diff --git a/2D Shooter.sln b/2D Shooter.sln
new file mode 100644
index 0000000000000000000000000000000000000000..1cba92200186840e47fe720894cb490ad9e81534
--- /dev/null
+++ b/2D Shooter.sln	
@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(MonoDevelopProperties) = preSolution
+		StartupItem = Assembly-CSharp.csproj
+	EndGlobalSection
+EndGlobal
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..debe5b7977dc8e2f36cccbb3d528229a7beded00
--- /dev/null
+++ b/Assembly-CSharp.csproj
@@ -0,0 +1,658 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <LangVersion>latest</LangVersion>
+  </PropertyGroup>
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>10.0.20506</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <RootNamespace></RootNamespace>
+    <ProjectGuid>{94B959A6-B9EA-F53F-A2AE-D52A643BBC74}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <AssemblyName>Assembly-CSharp</AssemblyName>
+    <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <BaseDirectory>.</BaseDirectory>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>Temp\bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2018_1_OR_NEWER;UNITY_2018_2_OR_NEWER;UNITY_2018_3_OR_NEWER;UNITY_2018_4_OR_NEWER;UNITY_2018_4_18;UNITY_2018_4;UNITY_2018;PLATFORM_ARCH_64;UNITY_64;UNITY_INCLUDE_TESTS;UNITY_ANALYTICS;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_TEXTURE_STREAMING;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_MANAGED_JOBS;ENABLE_MANAGED_TRANSFORM_JOBS;ENABLE_MANAGED_ANIMATION_JOBS;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_VIDEO;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_OUT_OF_PROCESS_CRASH_HANDLER;ENABLE_EVENT_QUEUE;ENABLE_CLUSTER_SYNC;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_STANDARD_2_0;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_UNITY_COLLECTIONS_CHECKS;ENABLE_BURST_AOT;UNITY_TEAM_LICENSE;CSHARP_7_OR_LATER;CSHARP_7_3_OR_NEWER</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoWarn>0169</NoWarn>
+    <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>Temp\bin\Release\</OutputPath>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <NoWarn>0169</NoWarn>
+    <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup>
+    <NoConfig>true</NoConfig>
+    <NoStdLib>true</NoStdLib>
+    <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
+    <ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades>
+    <ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="UnityEngine">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2018.4.18f1\Editor\Data\Managed/UnityEngine/UnityEngine.dll</HintPath>
+    </Reference>
+    <Reference Include="UnityEditor">
+      <HintPath>C:\Program Files\Unity\Hub\Editor\2018.4.18f1\Editor\Data\Managed/UnityEditor.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+     <Compile Include="Assets\Script\CameraFollow.cs" />
+     <Compile Include="Assets\Script\Enemy\EnemyAttack.cs" />
+     <Compile Include="Assets\Script\Enemy\EnemyHealth.cs" />
+     <Compile Include="Assets\Script\Enemy\EnemyMovement.cs" />
+     <Compile Include="Assets\Script\Managers\CustomSceneManager.cs" />
+     <Compile Include="Assets\Script\Managers\EnemySpawnManager.cs" />
+     <Compile Include="Assets\Script\Managers\ScoreboardManager.cs" />
+     <Compile Include="Assets\Script\Managers\ScoreManager.cs" />
+     <Compile Include="Assets\Script\Menu\BackButton.cs" />
+     <Compile Include="Assets\Script\Menu\ScoreboardButton.cs" />
+     <Compile Include="Assets\Script\Menu\StartGameScript.cs" />
+     <Compile Include="Assets\Script\Player\PlayerAttack.cs" />
+     <Compile Include="Assets\Script\Player\PlayerHealth.cs" />
+     <Compile Include="Assets\Script\Player\PlayerMovement.cs" />
+     <Compile Include="Assets\UnityLitJson\Extensions.cs" />
+     <Compile Include="Assets\UnityLitJson\IJsonWrapper.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonAttribute.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonData.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonException.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonMapper.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonMockWrapper.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonReader.cs" />
+     <Compile Include="Assets\UnityLitJson\JsonWriter.cs" />
+     <Compile Include="Assets\UnityLitJson\Lexer.cs" />
+     <Compile Include="Assets\UnityLitJson\ParserToken.cs" />
+     <Compile Include="Assets\UnityLitJson\Platform.cs" />
+     <Compile Include="Assets\UnityLitJson\Unity\UnityTypeBindings.cs" />
+     <Compile Include="Assets\UnityLitJson-Example\JsonExample.cs" />
+ <Reference Include="Unity.TextMeshPro.Editor">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.PackageManagerUI.Editor">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.CollabProxy.Editor">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.TextMeshPro">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/ScriptAssemblies/Unity.TextMeshPro.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.Analytics.DataPrivacy">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.AIModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ARModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.AccessibilityModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.AnimationModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.AssetBundleModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.AudioModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.BaselibModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.BaselibModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ClothModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ClusterInputModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ClusterRendererModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.CoreModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.CrashReportingModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.DirectorModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.FileSystemHttpModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.FileSystemHttpModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.GameCenterModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.GridModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.HotReloadModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.HotReloadModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.IMGUIModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ImageConversionModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.InputModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.JSONSerializeModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.LocalizationModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.LocalizationModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ParticleSystemModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.PerformanceReportingModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.PhysicsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.Physics2DModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ProfilerModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ProfilerModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.ScreenCaptureModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.SharedInternalsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.SpriteMaskModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.SpriteShapeModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.StreamingModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.StreamingModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.StyleSheetsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.SubstanceModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.SubstanceModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TLSModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TLSModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TerrainModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TerrainPhysicsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TextCoreModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextCoreModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TextRenderingModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TilemapModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TimelineModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.TimelineModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UIModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UIElementsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UNETModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UmbraModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UmbraModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityAnalyticsModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityConnectModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityTestProtocolModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityTestProtocolModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityWebRequestModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityWebRequestAudioModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityWebRequestTextureModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UnityWebRequestWWWModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.VFXModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.VFXModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.VRModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.VehiclesModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.VideoModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.WindModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.XRModule">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/UnityEngine/UnityEngine.XRModule.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.Locator">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/Managed/Unity.Locator.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.UI">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.TestRunner">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll</HintPath>
+ </Reference>
+ <Reference Include="nunit.framework">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.Timeline">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.Networking">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.GoogleAudioSpatializer">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll</HintPath>
+ </Reference>
+ <Reference Include="UnityEngine.SpatialTracking">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll</HintPath>
+ </Reference>
+ <Reference Include="Unity.Analytics.StandardEvents">
+ <HintPath>C:/Users/alamh/2D Shooter/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll</HintPath>
+ </Reference>
+ <Reference Include="netstandard">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/ref/2.0.0/netstandard.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Win32.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/Microsoft.Win32.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.AppContext">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.AppContext.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Collections.Concurrent">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.Concurrent.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Collections">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Collections.NonGeneric">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.NonGeneric.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Collections.Specialized">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Collections.Specialized.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel.EventBasedAsync">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.EventBasedAsync.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel.TypeConverter">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ComponentModel.TypeConverter.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Console">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Console.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Data.Common">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Data.Common.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.Contracts">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Contracts.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.Debug">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Debug.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.FileVersionInfo">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.FileVersionInfo.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.Process">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Process.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.StackTrace">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.StackTrace.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.TextWriterTraceListener">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.TextWriterTraceListener.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.Tools">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Tools.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.TraceSource">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.TraceSource.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Diagnostics.Tracing">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Diagnostics.Tracing.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Drawing.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Drawing.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Dynamic.Runtime">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Dynamic.Runtime.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Globalization.Calendars">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.Calendars.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Globalization">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Globalization.Extensions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Globalization.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.Compression">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Compression.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.Compression.ZipFile">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Compression.ZipFile.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.FileSystem">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.FileSystem.DriveInfo">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.DriveInfo.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.FileSystem.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.FileSystem.Watcher">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.FileSystem.Watcher.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.IsolatedStorage">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.IsolatedStorage.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.MemoryMappedFiles">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.MemoryMappedFiles.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.Pipes">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.Pipes.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.UnmanagedMemoryStream">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.IO.UnmanagedMemoryStream.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Linq">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Linq.Expressions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Expressions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Linq.Parallel">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Parallel.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Linq.Queryable">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Linq.Queryable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Http">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Http.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.NameResolution">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.NameResolution.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.NetworkInformation">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.NetworkInformation.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Ping">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Ping.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Requests">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Requests.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Security">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Security.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Sockets">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.Sockets.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.WebHeaderCollection">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebHeaderCollection.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.WebSockets.Client">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebSockets.Client.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.WebSockets">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Net.WebSockets.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ObjectModel">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ObjectModel.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Reflection">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Reflection.Extensions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Reflection.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Reflection.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Resources.Reader">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.Reader.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Resources.ResourceManager">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.ResourceManager.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Resources.Writer">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Resources.Writer.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.CompilerServices.VisualC">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.CompilerServices.VisualC.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Extensions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Handles">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Handles.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.InteropServices">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.InteropServices.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.InteropServices.RuntimeInformation">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Numerics">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Numerics.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Serialization.Formatters">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Formatters.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Serialization.Json">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Serialization.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Serialization.Xml">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Runtime.Serialization.Xml.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Claims">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Claims.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.Algorithms">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Algorithms.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.Csp">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Csp.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.Encoding">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Encoding.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.Primitives">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.X509Certificates">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Cryptography.X509Certificates.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.Principal">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.Principal.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Security.SecureString">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Security.SecureString.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Text.Encoding">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.Encoding.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Text.Encoding.Extensions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.Encoding.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Text.RegularExpressions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Text.RegularExpressions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.Overlapped">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Overlapped.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.Tasks">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Tasks.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.Tasks.Parallel">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Tasks.Parallel.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.Thread">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Thread.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.ThreadPool">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.ThreadPool.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Threading.Timer">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Threading.Timer.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ValueTuple">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.ValueTuple.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.ReaderWriter">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.ReaderWriter.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.XDocument">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XDocument.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.XmlDocument">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XmlDocument.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.XmlSerializer">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XmlSerializer.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.XPath">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XPath.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.XPath.XDocument">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netstandard/System.Xml.XPath.XDocument.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Numerics.Vectors">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/Extensions/2.0.0/System.Numerics.Vectors.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.InteropServices.WindowsRuntime">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/Extensions/2.0.0/System.Runtime.InteropServices.WindowsRuntime.dll</HintPath>
+ </Reference>
+ <Reference Include="mscorlib">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/mscorlib.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel.Composition">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.ComponentModel.Composition.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Core">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Data">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Data.dll</HintPath>
+ </Reference>
+ <Reference Include="System">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Drawing">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Drawing.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.Compression.FileSystem">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.IO.Compression.FileSystem.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Net.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Numerics">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Numerics.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.Serialization">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Runtime.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ServiceModel.Web">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.ServiceModel.Web.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Transactions">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Transactions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Web">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Web.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Windows">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Windows.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.Linq">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.Linq.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.Serialization">
+ <HintPath>C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data/NetStandard/compat/2.0.0/shims/netfx/System.Xml.Serialization.dll</HintPath>
+ </Reference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  
+</Project>
diff --git a/Assets/Animation.meta b/Assets/Animation.meta
new file mode 100644
index 0000000000000000000000000000000000000000..222f09d2b715dde420824e540284aed9d16eb869
--- /dev/null
+++ b/Assets/Animation.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1c8dd2cfbcb28614298e3e774f8f5158
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/PoliceAnimationController.controller b/Assets/Animation/PoliceAnimationController.controller
new file mode 100644
index 0000000000000000000000000000000000000000..04259c3623834c7b0881477555b1cfcf07259022
--- /dev/null
+++ b/Assets/Animation/PoliceAnimationController.controller
@@ -0,0 +1,368 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!91 &9100000
+AnimatorController:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceAnimationController
+  serializedVersion: 5
+  m_AnimatorParameters:
+  - m_Name: IsWalking
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: Dead
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  - m_Name: IsShooting
+    m_Type: 4
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 9100000}
+  m_AnimatorLayers:
+  - serializedVersion: 5
+    m_Name: Base Layer
+    m_StateMachine: {fileID: 1107745010865390340}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 0
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
+--- !u!1101 &1101282706929437590
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 2
+    m_ConditionEvent: IsWalking
+    m_EventTreshold: 0
+  - m_ConditionMode: 2
+    m_ConditionEvent: IsShooting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102543601375240102}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101393903705659402
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: IsWalking
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102068153928467854}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101516077262625896
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: IsShooting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102897238841786984}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.625
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101680160962456190
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: Dead
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102611073226222834}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.70294994
+  m_TransitionOffset: 0
+  m_ExitTime: 4.845906e-10
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101726432115114790
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: IsShooting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102897238841786984}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101884984484122010
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: IsWalking
+    m_EventTreshold: 0
+  - m_ConditionMode: 2
+    m_ConditionEvent: IsShooting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102068153928467854}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1101 &1101890426407658858
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 2
+    m_ConditionEvent: IsWalking
+    m_EventTreshold: 0
+  - m_ConditionMode: 2
+    m_ConditionEvent: IsShooting
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102543601375240102}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &1102068153928467854
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Walking
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 1101890426407658858}
+  - {fileID: 1101516077262625896}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 7a4024159218f184b9ce3b667f3b6876, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &1102543601375240102
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Idle
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 1101393903705659402}
+  - {fileID: 1101726432115114790}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 02aedd5d8e0c5b94f957adb8cf1e1925, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &1102611073226222834
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Dead
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 2693abf1b26506b4ca9445b37205a238, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &1102897238841786984
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Shooting
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions:
+  - {fileID: 1101884984484122010}
+  - {fileID: 1101282706929437590}
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 7c200ac59be94c44ead64d0173b58c94, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1107 &1107745010865390340
+AnimatorStateMachine:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Base Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 1102543601375240102}
+    m_Position: {x: 264, y: 132, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1102068153928467854}
+    m_Position: {x: 264, y: 12, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1102897238841786984}
+    m_Position: {x: -24, y: 12, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1102611073226222834}
+    m_Position: {x: 528, y: 156, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions:
+  - {fileID: 1101680160962456190}
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 528, y: 12, z: 0}
+  m_EntryPosition: {x: 12, y: 144, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 1102543601375240102}
diff --git a/Assets/Animation/PoliceAnimationController.controller.meta b/Assets/Animation/PoliceAnimationController.controller.meta
new file mode 100644
index 0000000000000000000000000000000000000000..04c5623ea8709cd225972bc6f7df06cff6dcda00
--- /dev/null
+++ b/Assets/Animation/PoliceAnimationController.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 9100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/PoliceDead.anim b/Assets/Animation/PoliceDead.anim
new file mode 100644
index 0000000000000000000000000000000000000000..975afd462280cdc15b9ef13b63d13d1d98940bce
--- /dev/null
+++ b/Assets/Animation/PoliceDead.anim
@@ -0,0 +1,92 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceDead
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: 1f19e8ef0e713c141937932ad4fb2237, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: 6887b29fa3d5b8442bc6d7a79cefd461, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: 133cd0d0f9e5dbe48a4d7f770147f972, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: f50a8792a52724345b71943ee2ff52f8, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: 4feab40945fe47c46ab90b2d36c9cbc3, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: 4674c0893b247844bb5933c9e7f2e04b, type: 3}
+    - time: 0.5
+      value: {fileID: 21300000, guid: 0530209eb0ae4f44eae4bedbd7d26a1e, type: 3}
+    - time: 0.5833333
+      value: {fileID: 21300000, guid: a11fdc28c124d1944810640a16d61019, type: 3}
+    - time: 0.6666667
+      value: {fileID: 21300000, guid: 045788648973c9841ac89a4bcfd25af4, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: 1f19e8ef0e713c141937932ad4fb2237, type: 3}
+    - {fileID: 21300000, guid: 6887b29fa3d5b8442bc6d7a79cefd461, type: 3}
+    - {fileID: 21300000, guid: 133cd0d0f9e5dbe48a4d7f770147f972, type: 3}
+    - {fileID: 21300000, guid: f50a8792a52724345b71943ee2ff52f8, type: 3}
+    - {fileID: 21300000, guid: 4feab40945fe47c46ab90b2d36c9cbc3, type: 3}
+    - {fileID: 21300000, guid: 4674c0893b247844bb5933c9e7f2e04b, type: 3}
+    - {fileID: 21300000, guid: 0530209eb0ae4f44eae4bedbd7d26a1e, type: 3}
+    - {fileID: 21300000, guid: a11fdc28c124d1944810640a16d61019, type: 3}
+    - {fileID: 21300000, guid: 045788648973c9841ac89a4bcfd25af4, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.75
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 0
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/PoliceDead.anim.meta b/Assets/Animation/PoliceDead.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8f9e12d2e7189c0edb238c6787d0d171ede9a3b8
--- /dev/null
+++ b/Assets/Animation/PoliceDead.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2693abf1b26506b4ca9445b37205a238
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/PoliceIdle.anim b/Assets/Animation/PoliceIdle.anim
new file mode 100644
index 0000000000000000000000000000000000000000..f879a13ac6e6256063c69da6317552c5a4d938e9
--- /dev/null
+++ b/Assets/Animation/PoliceIdle.anim
@@ -0,0 +1,53 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceIdle
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves: []
+  m_SampleRate: 60
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings: []
+    pptrCurveMapping: []
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 1
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 1
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/PoliceIdle.anim.meta b/Assets/Animation/PoliceIdle.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a64c76eeea9a773964669619c251475d0bfbb494
--- /dev/null
+++ b/Assets/Animation/PoliceIdle.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 02aedd5d8e0c5b94f957adb8cf1e1925
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/PoliceShooting.anim b/Assets/Animation/PoliceShooting.anim
new file mode 100644
index 0000000000000000000000000000000000000000..87ef169988040d80a63d69afc4881d27ce557cac
--- /dev/null
+++ b/Assets/Animation/PoliceShooting.anim
@@ -0,0 +1,83 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceShooting
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: 7f9e62135e44bac41b829b230473dd13, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: b3c6f6ddac6afaa48a878b0a8b4c3d1a, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: d7afef36096b81f418bea2f2d3261ac5, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: b94eb138c7296bc4095b1c8a472718df, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: 1360e4708272e7849b47057fdec534e0, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: 0ccda09206e352449ab23e73c5697ac0, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: 7f9e62135e44bac41b829b230473dd13, type: 3}
+    - {fileID: 21300000, guid: b3c6f6ddac6afaa48a878b0a8b4c3d1a, type: 3}
+    - {fileID: 21300000, guid: d7afef36096b81f418bea2f2d3261ac5, type: 3}
+    - {fileID: 21300000, guid: b94eb138c7296bc4095b1c8a472718df, type: 3}
+    - {fileID: 21300000, guid: 1360e4708272e7849b47057fdec534e0, type: 3}
+    - {fileID: 21300000, guid: 0ccda09206e352449ab23e73c5697ac0, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.5
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 1
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/PoliceShooting.anim.meta b/Assets/Animation/PoliceShooting.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..601095bc465718155c4ce66f4fe6db8f67ca1ae6
--- /dev/null
+++ b/Assets/Animation/PoliceShooting.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7c200ac59be94c44ead64d0173b58c94
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/PoliceWalk.anim b/Assets/Animation/PoliceWalk.anim
new file mode 100644
index 0000000000000000000000000000000000000000..2af9948b2e504f961c0b76f81fab8081802e6076
--- /dev/null
+++ b/Assets/Animation/PoliceWalk.anim
@@ -0,0 +1,89 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceWalk
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: 53f55179de74d574b8fa00fb7950c924, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: 54b9f4f056b83d2409dead4657b9270e, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: 284b30b43543abe4da8d5625aa37ff6b, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: c6b217bd11a4aac4fad5d94d637cbd27, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: ccf05e44e581645448f76c9885ad303b, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: ccaa4a21cc66f704db378129926aeb64, type: 3}
+    - time: 0.5
+      value: {fileID: 21300000, guid: 07d9c38a87d83e443886b576a1a20b58, type: 3}
+    - time: 0.5833333
+      value: {fileID: 21300000, guid: 439352284d5721f458621d976ccc0594, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: 53f55179de74d574b8fa00fb7950c924, type: 3}
+    - {fileID: 21300000, guid: 54b9f4f056b83d2409dead4657b9270e, type: 3}
+    - {fileID: 21300000, guid: 284b30b43543abe4da8d5625aa37ff6b, type: 3}
+    - {fileID: 21300000, guid: c6b217bd11a4aac4fad5d94d637cbd27, type: 3}
+    - {fileID: 21300000, guid: ccf05e44e581645448f76c9885ad303b, type: 3}
+    - {fileID: 21300000, guid: ccaa4a21cc66f704db378129926aeb64, type: 3}
+    - {fileID: 21300000, guid: 07d9c38a87d83e443886b576a1a20b58, type: 3}
+    - {fileID: 21300000, guid: 439352284d5721f458621d976ccc0594, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.6666666
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 1
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/PoliceWalk.anim.meta b/Assets/Animation/PoliceWalk.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9f94cc96b114f4527abca44b82bbebdf5b1289a1
--- /dev/null
+++ b/Assets/Animation/PoliceWalk.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7a4024159218f184b9ce3b667f3b6876
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/ZombieAnimatorController.controller b/Assets/Animation/ZombieAnimatorController.controller
new file mode 100644
index 0000000000000000000000000000000000000000..28d7c8ecad4ee58aa269624a592fad89c9e9247f
--- /dev/null
+++ b/Assets/Animation/ZombieAnimatorController.controller
@@ -0,0 +1,133 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!91 &9100000
+AnimatorController:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: ZombieAnimatorController
+  serializedVersion: 5
+  m_AnimatorParameters:
+  - m_Name: Dead
+    m_Type: 9
+    m_DefaultFloat: 0
+    m_DefaultInt: 0
+    m_DefaultBool: 0
+    m_Controller: {fileID: 0}
+  m_AnimatorLayers:
+  - serializedVersion: 5
+    m_Name: Base Layer
+    m_StateMachine: {fileID: 1107740691003741898}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 0
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
+--- !u!1101 &1101861956598051158
+AnimatorStateTransition:
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 
+  m_Conditions:
+  - m_ConditionMode: 1
+    m_ConditionEvent: Dead
+    m_EventTreshold: 0
+  m_DstStateMachine: {fileID: 0}
+  m_DstState: {fileID: 1102017498295327536}
+  m_Solo: 0
+  m_Mute: 0
+  m_IsExit: 0
+  serializedVersion: 3
+  m_TransitionDuration: 0.25
+  m_TransitionOffset: 0
+  m_ExitTime: 0.75
+  m_HasExitTime: 0
+  m_HasFixedDuration: 1
+  m_InterruptionSource: 0
+  m_OrderedInterruption: 1
+  m_CanTransitionToSelf: 1
+--- !u!1102 &1102017498295327536
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Dead
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 2d4ca193c425e8943957b8929c028cc2, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1102 &1102184940734412374
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Walk
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 72955380d3c9a8042a147513f224c58d, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1107 &1107740691003741898
+AnimatorStateMachine:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Base Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 1102184940734412374}
+    m_Position: {x: 240, y: 192, z: 0}
+  - serializedVersion: 1
+    m_State: {fileID: 1102017498295327536}
+    m_Position: {x: 288, y: 24, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions:
+  - {fileID: 1101861956598051158}
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 312, y: -96, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 1102184940734412374}
diff --git a/Assets/Animation/ZombieAnimatorController.controller.meta b/Assets/Animation/ZombieAnimatorController.controller.meta
new file mode 100644
index 0000000000000000000000000000000000000000..daeca3a1744d476b0b0eea3f90b66048b26b5f81
--- /dev/null
+++ b/Assets/Animation/ZombieAnimatorController.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1975a4f4aae21dc43abb86a5745e83b2
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 9100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/ZombieDead.anim b/Assets/Animation/ZombieDead.anim
new file mode 100644
index 0000000000000000000000000000000000000000..e3d6a6b3539afcc52b0cea5c40bbd500ecf16556
--- /dev/null
+++ b/Assets/Animation/ZombieDead.anim
@@ -0,0 +1,89 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: ZombieDead
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: 81adcf7401f49804eb0b69d7c592e4f2, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: fb750bc39c1d1d94eac4f5add3e227a8, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: 02c3e5cdb93d11c4f8b0f05d53e4257d, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: b718fab7db531034d9722193ae056486, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: 79ed1db6028c2de409380d4c123437a7, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: ce6108d20abb59c4592721a1f858c26c, type: 3}
+    - time: 0.5
+      value: {fileID: 21300000, guid: 7304f2e9e60197e4799c9fa13c28ccd1, type: 3}
+    - time: 0.5833333
+      value: {fileID: 21300000, guid: b7914b9393ade4048a9e495eff52019c, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: 81adcf7401f49804eb0b69d7c592e4f2, type: 3}
+    - {fileID: 21300000, guid: fb750bc39c1d1d94eac4f5add3e227a8, type: 3}
+    - {fileID: 21300000, guid: 02c3e5cdb93d11c4f8b0f05d53e4257d, type: 3}
+    - {fileID: 21300000, guid: b718fab7db531034d9722193ae056486, type: 3}
+    - {fileID: 21300000, guid: 79ed1db6028c2de409380d4c123437a7, type: 3}
+    - {fileID: 21300000, guid: ce6108d20abb59c4592721a1f858c26c, type: 3}
+    - {fileID: 21300000, guid: 7304f2e9e60197e4799c9fa13c28ccd1, type: 3}
+    - {fileID: 21300000, guid: b7914b9393ade4048a9e495eff52019c, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.6666666
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 0
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/ZombieDead.anim.meta b/Assets/Animation/ZombieDead.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..96658414b928561198f8be32959af125d0875687
--- /dev/null
+++ b/Assets/Animation/ZombieDead.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2d4ca193c425e8943957b8929c028cc2
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Animation/ZombieWalk.anim b/Assets/Animation/ZombieWalk.anim
new file mode 100644
index 0000000000000000000000000000000000000000..458581cb3055799f1cb635705ff844dcc0a72ccd
--- /dev/null
+++ b/Assets/Animation/ZombieWalk.anim
@@ -0,0 +1,83 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: ZombieWalk
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: fb94a85578dd49141ac3d93064efaa3e, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: e488e518fc6c5f444807ac34142c4ec7, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: 21f21f8522e7b5c4dae06e5fde95b624, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: c87efcf4926654c46a58be747da2f490, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: e45ba03774084ee4a899cbfd8f4b24da, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: 5533086cc69e03d4ab837de104b62517, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: fb94a85578dd49141ac3d93064efaa3e, type: 3}
+    - {fileID: 21300000, guid: e488e518fc6c5f444807ac34142c4ec7, type: 3}
+    - {fileID: 21300000, guid: 21f21f8522e7b5c4dae06e5fde95b624, type: 3}
+    - {fileID: 21300000, guid: c87efcf4926654c46a58be747da2f490, type: 3}
+    - {fileID: 21300000, guid: e45ba03774084ee4a899cbfd8f4b24da, type: 3}
+    - {fileID: 21300000, guid: 5533086cc69e03d4ab837de104b62517, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.5
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 1
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Animation/ZombieWalk.anim.meta b/Assets/Animation/ZombieWalk.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..56289353813ac710033b55fe5ba3ea65b0622af5
--- /dev/null
+++ b/Assets/Animation/ZombieWalk.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 72955380d3c9a8042a147513f224c58d
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Material.meta b/Assets/Material.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4cf8def2363c0a900835007b8e6ab819ab318518
--- /dev/null
+++ b/Assets/Material.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 012c1498881b4794fafa2e60d4aeacdb
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Material/Bullet.mat b/Assets/Material/Bullet.mat
new file mode 100644
index 0000000000000000000000000000000000000000..96f1006cf963d30d075988dd88c550bae6600173
--- /dev/null
+++ b/Assets/Material/Bullet.mat
@@ -0,0 +1,85 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 6
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Bullet
+  m_Shader: {fileID: 10800, guid: 0000000000000000f000000000000000, type: 0}
+  m_ShaderKeywords: 
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _AlphaTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Floats:
+    - PixelSnap: 0
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _EnableExternalAlpha: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 0.9151794, b: 0, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+    - _Flip: {r: 1, g: 1, b: 1, a: 1}
+    - _RendererColor: {r: 1, g: 1, b: 1, a: 1}
diff --git a/Assets/Material/Bullet.mat.meta b/Assets/Material/Bullet.mat.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3aaee21f0ed71bb2e97055ad1a39643348978f04
--- /dev/null
+++ b/Assets/Material/Bullet.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5a1bcd9f6bcd22940882a93ee43f1eea
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Palletes.meta b/Assets/Palletes.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c0eaa2022bec9f722a5e048bf69850ddd93f91a6
--- /dev/null
+++ b/Assets/Palletes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 60235fb861b8bbe4c974f6a5a7d9303e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Palletes/Dreamland.prefab b/Assets/Palletes/Dreamland.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..698490305adc87bfebceb3a18adf76878f5d4015
--- /dev/null
+++ b/Assets/Palletes/Dreamland.prefab
@@ -0,0 +1,206 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &6151998173921873672
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3326512513519323924}
+  - component: {fileID: 8236111431774033339}
+  - component: {fileID: 2456121761904604231}
+  m_Layer: 31
+  m_Name: Layer1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3326512513519323924
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6151998173921873672}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1633078370144715139}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1839735485 &8236111431774033339
+Tilemap:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6151998173921873672}
+  m_Enabled: 1
+  m_Tiles:
+  - first: {x: -1, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  m_AnimatedTiles: {}
+  m_TileAssetArray:
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 15c444c7f9a09804e862227170835a3d, type: 2}
+  m_TileSpriteArray:
+  - m_RefCount: 1
+    m_Data: {fileID: 21300000, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_TileMatrixArray:
+  - m_RefCount: 1
+    m_Data:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_TileColorArray:
+  - m_RefCount: 1
+    m_Data: {r: 1, g: 1, b: 1, a: 1}
+  m_AnimationFrameRate: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Origin: {x: -1, y: 0, z: 0}
+  m_Size: {x: 1, y: 1, z: 1}
+  m_TileAnchor: {x: 0.5, y: 0.5, z: 0}
+  m_TileOrientation: 0
+  m_TileOrientationMatrix:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+--- !u!483693784 &2456121761904604231
+TilemapRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6151998173921873672}
+  m_Enabled: 0
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_ChunkSize: {x: 32, y: 32, z: 32}
+  m_ChunkCullingBounds: {x: 0, y: 0, z: 0}
+  m_MaxChunkCount: 16
+  m_MaxFrameAge: 16
+  m_SortOrder: 0
+  m_Mode: 0
+  m_DetectChunkCullingBounds: 0
+  m_MaskInteraction: 0
+--- !u!1 &8554908275665052588
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1633078370144715139}
+  - component: {fileID: 3585151979794521324}
+  m_Layer: 31
+  m_Name: Dreamland
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1633078370144715139
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8554908275665052588}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 3326512513519323924}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!156049354 &3585151979794521324
+Grid:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8554908275665052588}
+  m_Enabled: 1
+  m_CellSize: {x: 9.28, y: 3.2, z: 0}
+  m_CellGap: {x: 0, y: 0, z: 0}
+  m_CellLayout: 0
+  m_CellSwizzle: 0
+--- !u!114 &114570806348704538
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12395, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: Palette Settings
+  m_EditorClassIdentifier: 
+  cellSizing: 0
diff --git a/Assets/Palletes/Dreamland.prefab.meta b/Assets/Palletes/Dreamland.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..64d8aaf553ab6c70865c38535cc3742ce4c14f5d
--- /dev/null
+++ b/Assets/Palletes/Dreamland.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f257d9bf30c4b004380441331faac5fa
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs.meta b/Assets/Prefabs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9570a536c025506d84453993446008a343f8a781
--- /dev/null
+++ b/Assets/Prefabs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 69dcb5a7806bdbf418d2b18aaedff309
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/Police.prefab b/Assets/Prefabs/Police.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..681ba9ad0e3456826827192682cfb17bbfb0784b
--- /dev/null
+++ b/Assets/Prefabs/Police.prefab
@@ -0,0 +1,280 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &6074805952158129260
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6074805951961176499}
+  - component: {fileID: 6074805952158129269}
+  - component: {fileID: 6074805952158129258}
+  - component: {fileID: 6074805952158129259}
+  - component: {fileID: 6074805952158129257}
+  - component: {fileID: 6074805952158129263}
+  - component: {fileID: 6074805952158129262}
+  - component: {fileID: 6074805952158129256}
+  m_Layer: 0
+  m_Name: Police
+  m_TagString: Player
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6074805951961176499
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -6.51, y: 7.39, z: 0}
+  m_LocalScale: {x: 0.216216, y: 0.216216, z: 0.216216}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &6074805952158129269
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: 14ea57a7127c2344d973fb9befde6b12, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.28, y: 12.29}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!50 &6074805952158129258
+Rigidbody2D:
+  serializedVersion: 4
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_BodyType: 0
+  m_Simulated: 1
+  m_UseFullKinematicContacts: 0
+  m_UseAutoMass: 0
+  m_Mass: 1
+  m_LinearDrag: 0
+  m_AngularDrag: 0.05
+  m_GravityScale: 3
+  m_Material: {fileID: 0}
+  m_Interpolate: 0
+  m_SleepingMode: 1
+  m_CollisionDetection: 0
+  m_Constraints: 4
+--- !u!61 &6074805952158129259
+BoxCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0, y: 0}
+  m_SpriteTilingProperty:
+    border: {x: 0, y: 0, z: 0, w: 0}
+    pivot: {x: 0.5, y: 0.5}
+    oldSize: {x: 5.28, y: 12.29}
+    newSize: {x: 5.28, y: 12.29}
+    adaptiveTilingThreshold: 0.5
+    drawMode: 0
+    adaptiveTiling: 0
+  m_AutoTiling: 0
+  serializedVersion: 2
+  m_Size: {x: 5.28, y: 12.29}
+  m_EdgeRadius: 0
+--- !u!95 &6074805952158129257
+Animator:
+  serializedVersion: 3
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_Avatar: {fileID: 0}
+  m_Controller: {fileID: 9100000, guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70, type: 2}
+  m_CullingMode: 0
+  m_UpdateMode: 0
+  m_ApplyRootMotion: 0
+  m_LinearVelocityBlending: 0
+  m_WarningMessage: 
+  m_HasTransformHierarchy: 1
+  m_AllowConstantClipSamplingOptimization: 1
+  m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!120 &6074805952158129263
+LineRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_MotionVectors: 0
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 0}
+  - {fileID: 2100000, guid: 5a1bcd9f6bcd22940882a93ee43f1eea, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 10
+  m_Positions:
+  - {x: 0, y: 0, z: 0}
+  - {x: 0, y: 0, z: 0}
+  m_Parameters:
+    serializedVersion: 3
+    widthMultiplier: 0.1
+    widthCurve:
+      serializedVersion: 2
+      m_Curve:
+      - serializedVersion: 3
+        time: 0
+        value: 1
+        inSlope: 0
+        outSlope: 0
+        tangentMode: 0
+        weightedMode: 0
+        inWeight: 0.33333334
+        outWeight: 0.33333334
+      m_PreInfinity: 2
+      m_PostInfinity: 2
+      m_RotationOrder: 4
+    colorGradient:
+      serializedVersion: 2
+      key0: {r: 0.7568628, g: 0.7568628, b: 0.7568628, a: 1}
+      key1: {r: 1, g: 1, b: 1, a: 1}
+      key2: {r: 0, g: 0, b: 0, a: 0}
+      key3: {r: 0, g: 0, b: 0, a: 0}
+      key4: {r: 0, g: 0, b: 0, a: 0}
+      key5: {r: 0, g: 0, b: 0, a: 0}
+      key6: {r: 0, g: 0, b: 0, a: 0}
+      key7: {r: 0, g: 0, b: 0, a: 0}
+      ctime0: 0
+      ctime1: 65535
+      ctime2: 0
+      ctime3: 0
+      ctime4: 0
+      ctime5: 0
+      ctime6: 0
+      ctime7: 0
+      atime0: 0
+      atime1: 65535
+      atime2: 0
+      atime3: 0
+      atime4: 0
+      atime5: 0
+      atime6: 0
+      atime7: 0
+      m_Mode: 1
+      m_NumColorKeys: 2
+      m_NumAlphaKeys: 2
+    numCornerVertices: 0
+    numCapVertices: 0
+    alignment: 0
+    textureMode: 0
+    shadowBias: 0.5
+    generateLightingData: 0
+  m_UseWorldSpace: 1
+  m_Loop: 0
+--- !u!114 &6074805952158129262
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5a9c1c408e1502d42befe580f215d2d5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  speed: 6
+  jump_force: 1
+--- !u!114 &6074805952158129256
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6074805952158129260}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 72da580ddc62254448bfbc92dc6c5a0c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  damagePerShot: 5
+  timeBetweenBullets: 0.05
+  range: 10
diff --git a/Assets/Prefabs/Police.prefab.meta b/Assets/Prefabs/Police.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5be765873d4c2de69a0c638a8b449c27a2efa3ea
--- /dev/null
+++ b/Assets/Prefabs/Police.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9af739a42eff7ec48b14cc2f7999fd69
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Prefabs/Zombie.prefab b/Assets/Prefabs/Zombie.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..9c6d0dee0381e9074717d0cb15560bd1d89a749d
--- /dev/null
+++ b/Assets/Prefabs/Zombie.prefab
@@ -0,0 +1,215 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3888029905473365562
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3888029905473365541}
+  - component: {fileID: 3888029905473365538}
+  - component: {fileID: 3888029905473365539}
+  - component: {fileID: 3888029905473365536}
+  - component: {fileID: 3888029905473365537}
+  - component: {fileID: 3888029905473365566}
+  - component: {fileID: 3888029905473365567}
+  - component: {fileID: 3888029905473365564}
+  - component: {fileID: 3888029905473365565}
+  m_Layer: 8
+  m_Name: Zombie
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3888029905473365541
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -59.93, y: 22.68, z: 0}
+  m_LocalScale: {x: 0.7, y: 0.7, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3888029905473365538
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 1169290741
+  m_SortingLayer: 2
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f36f751c2e598324cb7cde77dc0b85d4, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 2.22, y: 3.72}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!50 &3888029905473365539
+Rigidbody2D:
+  serializedVersion: 4
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_BodyType: 0
+  m_Simulated: 1
+  m_UseFullKinematicContacts: 0
+  m_UseAutoMass: 0
+  m_Mass: 1
+  m_LinearDrag: 0
+  m_AngularDrag: 0.05
+  m_GravityScale: 3
+  m_Material: {fileID: 0}
+  m_Interpolate: 0
+  m_SleepingMode: 1
+  m_CollisionDetection: 0
+  m_Constraints: 4
+--- !u!95 &3888029905473365536
+Animator:
+  serializedVersion: 3
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_Avatar: {fileID: 0}
+  m_Controller: {fileID: 9100000, guid: 1975a4f4aae21dc43abb86a5745e83b2, type: 2}
+  m_CullingMode: 0
+  m_UpdateMode: 0
+  m_ApplyRootMotion: 0
+  m_LinearVelocityBlending: 0
+  m_WarningMessage: 
+  m_HasTransformHierarchy: 1
+  m_AllowConstantClipSamplingOptimization: 1
+  m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!70 &3888029905473365537
+CapsuleCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0.07367543, y: 0}
+  m_Size: {x: 2.0574896, y: 3.7199998}
+  m_Direction: 0
+--- !u!114 &3888029905473365566
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 996ae9bb6e3f77245b77d1b29cd9b926, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  startingHealth: 100
+  currentHealth: 0
+  sinkSpeed: 2.5
+  scorePerShoot: 1
+  scoreDeath: 5
+--- !u!114 &3888029905473365567
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8933010149fb2d24ca47f930dc9fef27, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  LerpConstant: 3
+  speed: 3
+--- !u!61 &3888029905473365564
+BoxCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0.21297216, y: 0}
+  m_SpriteTilingProperty:
+    border: {x: 0, y: 0, z: 0, w: 0}
+    pivot: {x: 0.5, y: 0.5}
+    oldSize: {x: 2.22, y: 3.72}
+    newSize: {x: 2.22, y: 3.72}
+    adaptiveTilingThreshold: 0.5
+    drawMode: 0
+    adaptiveTiling: 0
+  m_AutoTiling: 0
+  serializedVersion: 2
+  m_Size: {x: 2.6459446, y: 3.72}
+  m_EdgeRadius: 0
+--- !u!114 &3888029905473365565
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3888029905473365562}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 21e48f4980ebb344e89af5790b3c9e7c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  damage: 10
+  attackInterval: 1
diff --git a/Assets/Prefabs/Zombie.prefab.meta b/Assets/Prefabs/Zombie.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0fcd814e84184c15bbc086e2d21485f43527dab0
--- /dev/null
+++ b/Assets/Prefabs/Zombie.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: aa677b132f3ec714786ca926c8ebe4ec
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3f71f17444527057d1301bcdbdacc0f450166d8b
--- /dev/null
+++ b/Assets/Scenes.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a21ee20f75d8eff4184a627c39b3d0a0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity
new file mode 100644
index 0000000000000000000000000000000000000000..b7fdd1d3f3cf5382971d14ed4c31873987e6f12b
--- /dev/null
+++ b/Assets/Scenes/MainMenu.unity
@@ -0,0 +1,848 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 11
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 0
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 10
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ShowResolutionOverlay: 1
+  m_LightingDataAsset: {fileID: 0}
+  m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &239860654
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 239860655}
+  - component: {fileID: 239860657}
+  - component: {fileID: 239860656}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &239860655
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 239860654}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1138044577}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &239860656
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 239860654}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Scoreboard
+--- !u!222 &239860657
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 239860654}
+  m_CullTransparentMesh: 0
+--- !u!1 &444539578
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 444539579}
+  - component: {fileID: 444539582}
+  - component: {fileID: 444539581}
+  - component: {fileID: 444539580}
+  - component: {fileID: 444539583}
+  m_Layer: 5
+  m_Name: StartGameButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &444539579
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 444539578}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 1393212582}
+  m_Father: {fileID: 840282145}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -17, y: 27}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &444539580
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 444539578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 444539581}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &444539581
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 444539578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+--- !u!222 &444539582
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 444539578}
+  m_CullTransparentMesh: 0
+--- !u!114 &444539583
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 444539578}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f53ba1c15d19fd34abacf443a6514045, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1 &701753398
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 701753401}
+  - component: {fileID: 701753400}
+  - component: {fileID: 701753399}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &701753399
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 701753398}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &701753400
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 701753398}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &701753401
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 701753398}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &840282141
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 840282145}
+  - component: {fileID: 840282144}
+  - component: {fileID: 840282143}
+  - component: {fileID: 840282142}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &840282142
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 840282141}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &840282143
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 840282141}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &840282144
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 840282141}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!224 &840282145
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 840282141}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 1941602015}
+  - {fileID: 444539579}
+  - {fileID: 1138044577}
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!1 &1138044576
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1138044577}
+  - component: {fileID: 1138044580}
+  - component: {fileID: 1138044579}
+  - component: {fileID: 1138044578}
+  - component: {fileID: 1138044581}
+  m_Layer: 5
+  m_Name: ScoreboardButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1138044577
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1138044576}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 239860655}
+  m_Father: {fileID: 840282145}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -17, y: -20}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1138044578
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1138044576}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1138044579}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &1138044579
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1138044576}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+--- !u!222 &1138044580
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1138044576}
+  m_CullTransparentMesh: 0
+--- !u!114 &1138044581
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1138044576}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cef9a845527863546b1318d1681f1545, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1 &1305111481
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1305111484}
+  - component: {fileID: 1305111483}
+  - component: {fileID: 1305111482}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &1305111482
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1305111481}
+  m_Enabled: 1
+--- !u!20 &1305111483
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1305111481}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1305111484
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1305111481}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1393212581
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1393212582}
+  - component: {fileID: 1393212584}
+  - component: {fileID: 1393212583}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1393212582
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393212581}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 444539579}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1393212583
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393212581}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Start Game
+--- !u!222 &1393212584
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1393212581}
+  m_CullTransparentMesh: 0
+--- !u!1 &1941602014
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1941602015}
+  - component: {fileID: 1941602017}
+  - component: {fileID: 1941602016}
+  m_Layer: 5
+  m_Name: Title
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1941602015
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1941602014}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 840282145}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -17, y: 107}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1941602016
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1941602014}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 20
+    m_FontStyle: 1
+    m_BestFit: 1
+    m_MinSize: 0
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: The Shooter Game
+--- !u!222 &1941602017
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1941602014}
+  m_CullTransparentMesh: 0
diff --git a/Assets/Scenes/MainMenu.unity.meta b/Assets/Scenes/MainMenu.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..03d9ca5c0089c770e95b081cddf9147796ab4f03
--- /dev/null
+++ b/Assets/Scenes/MainMenu.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9768f82ea595f7d4a8d7ef0994db7be7
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
new file mode 100644
index 0000000000000000000000000000000000000000..f0812a44f8d829b7b59f3f715587be234c05bb9d
--- /dev/null
+++ b/Assets/Scenes/SampleScene.unity
@@ -0,0 +1,21763 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 11
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 0
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 10
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ShowResolutionOverlay: 1
+  m_LightingDataAsset: {fileID: 0}
+  m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &10820264
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 10820265}
+  - component: {fileID: 10820266}
+  m_Layer: 0
+  m_Name: clouds (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &10820265
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 10820264}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0.7656121, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &10820266
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 10820264}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &19376704
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 19376705}
+  - component: {fileID: 19376706}
+  m_Layer: 0
+  m_Name: sea (3)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &19376705
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19376704}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -2.1502297, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &19376706
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 19376704}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &112183449
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 112183450}
+  m_Layer: 0
+  m_Name: Clouds
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &112183450
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 112183449}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 51.2, y: -39, z: 7.5246463}
+  m_LocalScale: {x: 18.41664, y: 18.41664, z: 18.41664}
+  m_Children:
+  - {fileID: 1579328613}
+  - {fileID: 10820265}
+  - {fileID: 1835875303}
+  - {fileID: 391580579}
+  - {fileID: 360916667}
+  - {fileID: 967830921}
+  - {fileID: 1525883133}
+  - {fileID: 432705989}
+  m_Father: {fileID: 961264510}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &139618425
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 139618426}
+  - component: {fileID: 139618427}
+  m_Layer: 0
+  m_Name: sky (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &139618426
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 139618425}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 4.28, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &139618427
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 139618425}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &241179072
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 241179073}
+  - component: {fileID: 241179075}
+  - component: {fileID: 241179074}
+  m_Layer: 5
+  m_Name: ScoreText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &241179073
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 241179072}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 929154465}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 189, y: 96}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &241179074
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 241179072}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!222 &241179075
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 241179072}
+  m_CullTransparentMesh: 0
+--- !u!1 &268027726
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 268027727}
+  - component: {fileID: 268027728}
+  m_Layer: 0
+  m_Name: sky
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &268027727
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 268027726}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &268027728
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 268027726}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &315975826
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463620932783324, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 315975827}
+  - component: {fileID: 315975830}
+  - component: {fileID: 315975829}
+  - component: {fileID: 315975828}
+  m_Layer: 0
+  m_Name: Tilemap
+  m_TagString: Platform
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &315975827
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463620932783325, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315975826}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1854079475}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!19719996 &315975828
+TilemapCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463620932783312, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315975826}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0, y: 0}
+--- !u!483693784 &315975829
+TilemapRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463620932783314, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315975826}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 1169290741
+  m_SortingLayer: 2
+  m_SortingOrder: 0
+  m_ChunkSize: {x: 32, y: 32, z: 32}
+  m_ChunkCullingBounds: {x: 0.010638297, y: 0.010638297, z: 0}
+  m_MaxChunkCount: 16
+  m_MaxFrameAge: 16
+  m_SortOrder: 0
+  m_Mode: 0
+  m_DetectChunkCullingBounds: 0
+  m_MaskInteraction: 0
+--- !u!1839735485 &315975830
+Tilemap:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 315975826}
+  m_Enabled: 1
+  m_Tiles:
+  - first: {x: 0, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 6, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 7, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 8, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 9, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 10, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 11, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 12, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 13, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 14, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 15, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 16, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 17, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 18, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 19, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 20, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 21, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 22, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 23, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 24, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 25, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 26, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 27, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: -3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -51, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -50, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -49, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -48, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -47, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -46, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -45, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -44, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -43, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -42, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -23, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -22, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -21, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -20, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -19, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -18, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -17, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -16, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -15, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -14, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -13, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -12, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -11, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -10, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -9, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -8, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -7, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -6, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -5, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -4, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -3, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -2, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 6, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 7, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 8, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 9, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 10, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 11, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 12, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 13, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 14, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 15, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 16, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 17, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 18, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 19, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 20, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 21, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 22, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 23, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 24, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 25, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 26, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 27, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: -2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -51, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -50, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -49, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -48, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -47, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -46, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -45, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -44, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -43, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -42, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -23, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -22, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -21, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -20, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -19, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -18, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -17, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -16, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -15, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -14, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -13, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -12, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -11, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -10, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -9, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -8, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -7, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -6, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -5, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -4, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -3, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -2, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 6, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 7, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 8, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 9, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 10, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 11, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 12, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 13, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 14, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 15, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 16, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 17, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 18, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 19, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 20, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 21, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 22, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 23, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 24, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 25, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 26, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 27, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: -1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -51, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -50, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -49, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -48, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -47, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -46, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -45, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -44, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -43, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -42, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -51, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -50, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -49, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -48, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -47, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -46, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -45, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -44, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -43, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -42, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 1, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -51, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -50, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -49, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -48, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -47, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -46, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -45, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -44, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -43, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -42, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 2, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 3, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 4, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -10, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -9, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -8, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -7, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -6, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -5, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -4, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -3, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -2, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 5, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 6, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -23, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -22, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -21, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -20, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -19, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -18, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -17, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -16, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -15, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -14, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 6, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 7, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 8, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 9, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 10, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 11, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 12, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 13, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 14, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 15, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 16, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 17, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 18, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 19, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 20, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 21, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 22, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 23, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 7, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -23, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -22, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -21, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -20, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -19, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -18, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -17, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -16, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -15, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -14, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 6, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 7, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 8, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 9, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 10, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 11, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 12, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 13, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 14, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 15, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 16, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 17, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 18, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 19, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 20, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 21, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 22, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 23, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 8, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -41, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -40, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -39, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -38, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -37, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -36, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -35, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -34, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -33, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -32, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -31, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -30, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -29, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -28, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -27, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -26, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -25, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -24, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -23, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -22, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -21, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -20, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -19, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -18, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -17, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -16, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -15, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -14, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 9, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 10, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 11, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 12, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 13, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 14, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 15, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 16, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 32, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 33, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 34, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 35, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 36, y: 17, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 32, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 33, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 34, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 35, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 36, y: 18, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -64, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -63, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -62, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -61, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -60, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -59, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -58, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -57, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -56, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -55, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -54, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 28, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 29, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 30, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 31, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 32, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 33, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 34, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 35, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 36, y: 19, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -64, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -63, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -62, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -61, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -60, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -59, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -58, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -57, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -56, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -55, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -54, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -53, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -52, y: 20, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  m_AnimatedTiles: {}
+  m_TileAssetArray:
+  - m_RefCount: 579
+    m_Data: {fileID: 11400000, guid: be48d66c967b0714b9635d4b32f88d7d, type: 2}
+  - m_RefCount: 0
+    m_Data: {fileID: 0}
+  m_TileSpriteArray:
+  - m_RefCount: 579
+    m_Data: {fileID: 21300016, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 0
+    m_Data: {fileID: 0}
+  m_TileMatrixArray:
+  - m_RefCount: 579
+    m_Data:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_TileColorArray:
+  - m_RefCount: 579
+    m_Data: {r: 1, g: 1, b: 1, a: 1}
+  m_AnimationFrameRate: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Origin: {x: -64, y: -3, z: 0}
+  m_Size: {x: 101, y: 24, z: 1}
+  m_TileAnchor: {x: 0.5, y: 0.5, z: 0}
+  m_TileOrientation: 0
+  m_TileOrientationMatrix:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+--- !u!1 &360916666
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 360916667}
+  - component: {fileID: 360916668}
+  m_Layer: 0
+  m_Name: clouds (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &360916667
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 360916666}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -1.6018124, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &360916668
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 360916666}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &379667710
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 379667711}
+  - component: {fileID: 379667712}
+  m_Layer: 5
+  m_Name: Slider
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &379667711
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 379667710}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 1673120467}
+  - {fileID: 1041948440}
+  m_Father: {fileID: 929154465}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -177, y: -116}
+  m_SizeDelta: {x: 160, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &379667712
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 379667710}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -113659843, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 0
+  m_TargetGraphic: {fileID: 0}
+  m_FillRect: {fileID: 458933519}
+  m_HandleRect: {fileID: 0}
+  m_Direction: 0
+  m_MinValue: 0
+  m_MaxValue: 100
+  m_WholeNumbers: 1
+  m_Value: 100
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!1 &391580578
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 391580579}
+  - component: {fileID: 391580580}
+  m_Layer: 0
+  m_Name: clouds (3)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &391580579
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 391580578}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -0.84706026, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &391580580
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 391580578}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &432705988
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 432705989}
+  - component: {fileID: 432705990}
+  m_Layer: 0
+  m_Name: clouds (7)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &432705989
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 432705988}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -2.2479672, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &432705990
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 432705988}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &448758479
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 448758480}
+  - component: {fileID: 448758481}
+  - component: {fileID: 448758482}
+  m_Layer: 0
+  m_Name: ScoreManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &448758480
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 448758479}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 395.22955, y: 184.90376, z: 5.2124643}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &448758481
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 448758479}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2b2fb3d14f555754480b3789a4f32362, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  text: {fileID: 241179074}
+--- !u!1839735485 &448758482
+Tilemap:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 448758479}
+  m_Enabled: 1
+  m_Tiles: {}
+  m_AnimatedTiles: {}
+  m_TileAssetArray: []
+  m_TileSpriteArray: []
+  m_TileMatrixArray: []
+  m_TileColorArray: []
+  m_AnimationFrameRate: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Origin: {x: 0, y: 0, z: 0}
+  m_Size: {x: 0, y: 0, z: 1}
+  m_TileAnchor: {x: 0.5, y: 0.5, z: 0}
+  m_TileOrientation: 0
+  m_TileOrientationMatrix:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+--- !u!1 &458933518
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 458933519}
+  - component: {fileID: 458933521}
+  - component: {fileID: 458933520}
+  m_Layer: 5
+  m_Name: Fill
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &458933519
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 458933518}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1041948440}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 10, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &458933520
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 458933518}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.8301887, g: 0.16838734, b: 0.16838734, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+--- !u!222 &458933521
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 458933518}
+  m_CullTransparentMesh: 0
+--- !u!1 &511576906
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 511576907}
+  - component: {fileID: 511576908}
+  m_Layer: 0
+  m_Name: sea (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &511576907
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 511576906}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -1.0642551, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &511576908
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 511576906}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &519420028
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 519420032}
+  - component: {fileID: 519420031}
+  - component: {fileID: 519420029}
+  - component: {fileID: 519420030}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &519420029
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_Enabled: 1
+--- !u!114 &519420030
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: bab3f3a731c89504391a72bfa7047e49, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  target: {fileID: 1227275894}
+  smoothing: 5
+--- !u!20 &519420031
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 2
+  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 24
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 0
+  m_HDR: 1
+  m_AllowMSAA: 0
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 0
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &519420032
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 519420028}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -6.51, y: 7.39, z: -30}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &830177113
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 830177114}
+  m_Layer: 0
+  m_Name: Sea
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &830177114
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 830177113}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 51.2, y: -39, z: 7.5246463}
+  m_LocalScale: {x: 18.41664, y: 18.41664, z: 18.41664}
+  m_Children:
+  - {fileID: 877676769}
+  - {fileID: 918832859}
+  - {fileID: 511576907}
+  - {fileID: 19376705}
+  - {fileID: 1747979429}
+  - {fileID: 1503820427}
+  m_Father: {fileID: 961264510}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &877676768
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 877676769}
+  - component: {fileID: 877676770}
+  m_Layer: 0
+  m_Name: sea
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &877676769
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 877676768}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &877676770
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 877676768}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &918832858
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 918832859}
+  - component: {fileID: 918832860}
+  m_Layer: 0
+  m_Name: sea (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &918832859
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 918832858}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 1.102264, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &918832860
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 918832858}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &926333072
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 926333073}
+  - component: {fileID: 926333074}
+  m_Layer: 0
+  m_Name: sky (5)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &926333073
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 926333072}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 5.41, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &926333074
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 926333072}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &929154461
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 929154465}
+  - component: {fileID: 929154464}
+  - component: {fileID: 929154463}
+  - component: {fileID: 929154462}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &929154462
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929154461}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &929154463
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929154461}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &929154464
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929154461}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!224 &929154465
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 929154461}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 241179073}
+  - {fileID: 379667711}
+  m_Father: {fileID: 0}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!1 &961264509
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 961264510}
+  m_Layer: 0
+  m_Name: Background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &961264510
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 961264509}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -69.349205, y: 40.466125, z: -7.5246463}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 1713388009}
+  - {fileID: 830177114}
+  - {fileID: 112183450}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &967830920
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 967830921}
+  - component: {fileID: 967830922}
+  m_Layer: 0
+  m_Name: clouds (5)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &967830921
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 967830920}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 2.3782842, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &967830922
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 967830920}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1007025206
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1007025207}
+  - component: {fileID: 1007025208}
+  m_Layer: 0
+  m_Name: sky (10)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1007025207
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007025206}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -5.36, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 10
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1007025208
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1007025206}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1041948439
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1041948440}
+  m_Layer: 5
+  m_Name: Fill Area
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1041948440
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1041948439}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 458933519}
+  m_Father: {fileID: 379667711}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.25}
+  m_AnchorMax: {x: 1, y: 0.75}
+  m_AnchoredPosition: {x: -5, y: 0}
+  m_SizeDelta: {x: -20, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1103959700
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1103959701}
+  - component: {fileID: 1103959702}
+  - component: {fileID: 1103959703}
+  m_Layer: 0
+  m_Name: CustomSceneManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1103959701
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1103959700}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -30.390017, y: 14.853229, z: -0.35815957}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!82 &1103959702
+AudioSource:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1103959700}
+  m_Enabled: 1
+  serializedVersion: 4
+  OutputAudioMixerGroup: {fileID: 0}
+  m_audioClip: {fileID: 8300000, guid: d6477a15b6bbef64d95f4a5ca8ca4f43, type: 3}
+  m_PlayOnAwake: 0
+  m_Volume: 0.78
+  m_Pitch: 1
+  Loop: 1
+  Mute: 0
+  Spatialize: 0
+  SpatializePostEffects: 0
+  Priority: 128
+  DopplerLevel: 1
+  MinDistance: 1
+  MaxDistance: 500
+  Pan2D: 0
+  rolloffMode: 0
+  BypassEffects: 0
+  BypassListenerEffects: 0
+  BypassReverbZones: 0
+  rolloffCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    - serializedVersion: 3
+      time: 1
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  panLevelCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  spreadCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  reverbZoneMixCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+--- !u!114 &1103959703
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1103959700}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 1dd9abf3d2f84674fba983f0072dfb16, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!1 &1106100524
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1106100525}
+  - component: {fileID: 1106100526}
+  m_Layer: 0
+  m_Name: sky (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1106100525
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1106100524}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 1.08, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1106100526
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1106100524}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1160760784
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1160760785}
+  - component: {fileID: 1160760786}
+  m_Layer: 0
+  m_Name: sky (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1160760785
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1160760784}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 2.14, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1160760786
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1160760784}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!4 &1227275894 stripped
+Transform:
+  m_CorrespondingSourceObject: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+    type: 3}
+  m_PrefabInstance: {fileID: 6074805950772258757}
+  m_PrefabAsset: {fileID: 0}
+--- !u!1 &1265164336
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1265164337}
+  - component: {fileID: 1265164338}
+  m_Layer: 0
+  m_Name: sky (6)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1265164337
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1265164336}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -1.11, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1265164338
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1265164336}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1472589734
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1472589737}
+  - component: {fileID: 1472589736}
+  - component: {fileID: 1472589735}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1472589735
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1472589734}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &1472589736
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1472589734}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &1472589737
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1472589734}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1503820426
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1503820427}
+  - component: {fileID: 1503820428}
+  m_Layer: 0
+  m_Name: sea (5)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1503820427
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1503820426}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 3.2090547, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1503820428
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1503820426}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1525883132
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1525883133}
+  - component: {fileID: 1525883134}
+  m_Layer: 0
+  m_Name: clouds (6)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1525883133
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1525883132}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 3.0841675, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1525883134
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1525883132}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1537244048
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1537244049}
+  - component: {fileID: 1537244050}
+  m_Layer: 0
+  m_Name: sky (9)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1537244049
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1537244048}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -4.3, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1537244050
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1537244048}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1579328612
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1579328613}
+  - component: {fileID: 1579328614}
+  m_Layer: 0
+  m_Name: clouds
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1579328613
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1579328612}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -0.027149362, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1579328614
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1579328612}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1629505615
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1629505616}
+  - component: {fileID: 1629505617}
+  m_Layer: 0
+  m_Name: sky (3)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1629505616
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1629505615}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 3.22, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1629505617
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1629505615}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1661095195
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1661095197}
+  - component: {fileID: 1661095196}
+  m_Layer: 0
+  m_Name: EnemySpawner
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1661095196
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1661095195}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9f1dd6c8c767b634c8d0547d242011c9, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  spawnTime: 3
+  enemy: {fileID: 3888029905473365562, guid: aa677b132f3ec714786ca926c8ebe4ec, type: 3}
+  positions:
+  - {fileID: 1661095197}
+--- !u!4 &1661095197
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1661095195}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -59.93, y: 22.7, z: -0.22265625}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1673120466
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1673120467}
+  - component: {fileID: 1673120469}
+  - component: {fileID: 1673120468}
+  m_Layer: 5
+  m_Name: Background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1673120467
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1673120466}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 379667711}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.25}
+  m_AnchorMax: {x: 1, y: 0.75}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1673120468
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1673120466}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+--- !u!222 &1673120469
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1673120466}
+  m_CullTransparentMesh: 0
+--- !u!1 &1703489970
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1703489971}
+  - component: {fileID: 1703489972}
+  m_Layer: 0
+  m_Name: sky (7)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1703489971
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1703489970}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -2.19, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 7
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1703489972
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1703489970}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1713388008
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1713388009}
+  m_Layer: 0
+  m_Name: Sky
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1713388009
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1713388008}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 50.5, y: -19.12, z: 7.5246463}
+  m_LocalScale: {x: 8.28725, y: 8.28725, z: 8.28725}
+  m_Children:
+  - {fileID: 268027727}
+  - {fileID: 1106100525}
+  - {fileID: 1160760785}
+  - {fileID: 1629505616}
+  - {fileID: 139618426}
+  - {fileID: 926333073}
+  - {fileID: 1265164337}
+  - {fileID: 1703489971}
+  - {fileID: 1746489615}
+  - {fileID: 1537244049}
+  - {fileID: 1007025207}
+  - {fileID: 1971126350}
+  m_Father: {fileID: 961264510}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1746489614
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1746489615}
+  - component: {fileID: 1746489616}
+  m_Layer: 0
+  m_Name: sky (8)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1746489615
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1746489614}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: -3.27, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1746489616
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1746489614}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1747979428
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1747979429}
+  - component: {fileID: 1747979430}
+  m_Layer: 0
+  m_Name: sea (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1747979429
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1747979428}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 2.2045283, y: -0.16, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 830177114}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1747979430
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1747979428}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d6cbe36d82b4eb64697e085a97f55244, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 0.96}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1835875302
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1835875303}
+  - component: {fileID: 1835875304}
+  m_Layer: 0
+  m_Name: clouds (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1835875303
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1835875302}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 1.5855228, y: 0.5, z: 0}
+  m_LocalScale: {x: 0.15469012, y: 0.15469012, z: 0.15469012}
+  m_Children: []
+  m_Father: {fileID: 112183450}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1835875304
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1835875302}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -1621031225
+  m_SortingLayer: 1
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: f05ac313a4e8919488a2825b55b9b513, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 5.44, y: 2.36}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &1854079473
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463621282132470, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1854079475}
+  - component: {fileID: 1854079474}
+  m_Layer: 0
+  m_Name: Grid
+  m_TagString: Platform
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!156049354 &1854079474
+Grid:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463621282132471, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1854079473}
+  m_Enabled: 1
+  m_CellSize: {x: 1, y: 1, z: 0}
+  m_CellGap: {x: 0, y: 0, z: 0}
+  m_CellLayout: 0
+  m_CellSwizzle: 0
+--- !u!4 &1854079475
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+    type: 3}
+  m_PrefabInstance: {fileID: 498463621784796922}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1854079473}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 315975827}
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1971126349
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1971126350}
+  - component: {fileID: 1971126351}
+  m_Layer: 0
+  m_Name: sky (11)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1971126350
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1971126349}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 6.48, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1713388009}
+  m_RootOrder: 11
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &1971126351
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1971126349}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: -250605813
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: d16707d14e0b5884b9c736d2dbfa9de9, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.12, y: 3.04}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!1 &2129001385 stripped
+GameObject:
+  m_CorrespondingSourceObject: {fileID: 6074805952158129260, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+    type: 3}
+  m_PrefabInstance: {fileID: 6074805950772258757}
+  m_PrefabAsset: {fileID: 0}
+--- !u!70 &2129001393
+CapsuleCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2129001385}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 1
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0.3604728, y: 0}
+  m_Size: {x: 7.6230783, y: 12.29}
+  m_Direction: 0
+--- !u!114 &2129001394
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2129001385}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4cb753b105cab14409a05ea1aac20d72, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  initHealth: 100
+  currentHealth: 0
+  slider: {fileID: 379667712}
+  sceneManager: {fileID: 1103959703}
+--- !u!82 &2129001395
+AudioSource:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2129001385}
+  m_Enabled: 1
+  serializedVersion: 4
+  OutputAudioMixerGroup: {fileID: 0}
+  m_audioClip: {fileID: 8300000, guid: 4a432f5f8e9a8e84d942ef5ebc19d9ad, type: 3}
+  m_PlayOnAwake: 0
+  m_Volume: 1
+  m_Pitch: 1
+  Loop: 1
+  Mute: 0
+  Spatialize: 0
+  SpatializePostEffects: 0
+  Priority: 128
+  DopplerLevel: 1
+  MinDistance: 1
+  MaxDistance: 500
+  Pan2D: 0
+  rolloffMode: 0
+  BypassEffects: 0
+  BypassListenerEffects: 0
+  BypassReverbZones: 0
+  rolloffCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    - serializedVersion: 3
+      time: 1
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  panLevelCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  spreadCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 0
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+  reverbZoneMixCustomCurve:
+    serializedVersion: 2
+    m_Curve:
+    - serializedVersion: 3
+      time: 0
+      value: 1
+      inSlope: 0
+      outSlope: 0
+      tangentMode: 0
+      weightedMode: 0
+      inWeight: 0.33333334
+      outWeight: 0.33333334
+    m_PreInfinity: 2
+    m_PostInfinity: 2
+    m_RotationOrder: 4
+--- !u!1001 &498463621784796922
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 498463620932783314, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_ChunkCullingBounds.x
+      value: 0.010638297
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783314, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_ChunkCullingBounds.y
+      value: 0.010638297
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783314, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_SortingLayerID
+      value: 1169290741
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783314, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_SortingLayer
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.size
+      value: 579
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[12].first.x
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[13].first.x
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[14].first.x
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[15].first.x
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[16].first.x
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[17].first.x
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[18].first.x
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[19].first.x
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[20].first.x
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[21].first.x
+      value: 21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[22].first.x
+      value: 22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[23].first.x
+      value: 23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[23].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[24].first.x
+      value: 24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[25].first.x
+      value: 25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[26].first.x
+      value: 26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[27].first.x
+      value: 27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[28].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[29].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[30].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[31].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[32].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[33].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[33].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[34].first.x
+      value: -51
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[35].first.x
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[36].first.x
+      value: -49
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[37].first.x
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[38].first.x
+      value: -47
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[39].first.x
+      value: -46
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[40].first.x
+      value: -45
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[41].first.x
+      value: -44
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[42].first.x
+      value: -43
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[43].first.x
+      value: -42
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[43].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[44].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[45].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[46].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[47].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[47].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[48].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[49].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[50].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[51].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[51].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[51].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[52].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[53].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[53].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[53].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[53].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[54].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[55].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[56].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[57].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[58].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[59].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[60].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[61].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[61].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[62].first.x
+      value: -23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[63].first.x
+      value: -22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[64].first.x
+      value: -21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[65].first.x
+      value: -20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[66].first.x
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[67].first.x
+      value: -18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[68].first.x
+      value: -17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].first.x
+      value: -16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileAssetArray.Array.data[0].m_RefCount
+      value: 579
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileSpriteArray.Array.data[0].m_RefCount
+      value: 579
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileMatrixArray.Array.data[0].m_RefCount
+      value: 579
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileColorArray.Array.data[0].m_RefCount
+      value: 579
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Origin.x
+      value: -64
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Size.x
+      value: 101
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[1].first.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[2].first.x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[3].first.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[4].first.x
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[5].first.x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[6].first.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[7].first.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[8].first.x
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[9].first.x
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[10].first.x
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[11].first.x
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[12].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[24].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[34].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[44].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[48].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[52].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[52].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[54].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[54].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[54].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[62].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].first.x
+      value: -15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[13].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[25].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[35].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[45].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[49].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[55].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[55].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[55].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[63].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].first.x
+      value: -14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[14].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[26].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[36].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[46].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[50].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[56].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[56].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[56].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[64].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].first.x
+      value: -13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[15].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[27].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[37].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[51].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[57].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[57].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[57].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[65].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].first.x
+      value: -12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[28].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[38].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[52].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[58].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[58].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[58].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[66].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].first.x
+      value: -11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[29].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[39].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[59].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[59].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[59].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[67].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].first.x
+      value: -10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[30].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[40].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[60].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[60].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[60].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[68].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].first.x
+      value: -9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[31].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[41].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[61].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[61].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].first.x
+      value: -8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[16].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[32].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[42].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[62].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[62].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].first.x
+      value: -7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[17].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[63].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[63].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].first.x
+      value: -6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[18].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[64].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[64].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].first.x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[65].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[65].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].first.x
+      value: -4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[66].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[66].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].first.x
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[19].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[67].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[67].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].first.x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[68].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[68].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].first.x
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[69].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].first.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[70].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].first.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[71].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].first.x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[72].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].first.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[73].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].first.x
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[74].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].first.x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[75].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].first.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[76].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].first.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[77].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].first.x
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[20].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[78].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].first.x
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[21].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[79].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].first.x
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[22].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[80].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].first.x
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[81].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].first.x
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[82].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].first.x
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[83].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].first.x
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[84].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].first.x
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[85].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].first.x
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[86].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].first.x
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[87].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].first.x
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[88].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].first.x
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[89].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].first.x
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[90].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].first.x
+      value: 21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[91].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].first.x
+      value: 22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[92].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].first.x
+      value: 23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[93].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].first.x
+      value: 24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[94].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].first.x
+      value: 25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[95].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].first.x
+      value: 26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[96].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].first.x
+      value: 27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[97].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[98].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[99].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[100].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].first.y
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[101].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[102].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[103].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].first.x
+      value: -51
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[104].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].first.x
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[105].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].first.x
+      value: -49
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[106].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].first.x
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[107].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].first.x
+      value: -47
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[108].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].first.x
+      value: -46
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[109].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].first.x
+      value: -45
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[110].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].first.x
+      value: -44
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[111].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].first.x
+      value: -43
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[112].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].first.x
+      value: -42
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[113].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[114].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[115].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[116].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[117].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[118].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[119].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[120].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[121].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[122].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[123].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[124].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[125].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[126].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[127].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[128].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[129].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[130].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[131].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].first.x
+      value: -23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[132].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].first.x
+      value: -22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[133].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].first.x
+      value: -21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[134].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].first.x
+      value: -20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[135].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].first.x
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[136].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].first.x
+      value: -18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[137].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].first.x
+      value: -17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[138].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].first.x
+      value: -16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[139].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].first.x
+      value: -15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[140].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].first.x
+      value: -14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[141].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].first.x
+      value: -13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[142].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].first.x
+      value: -12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[143].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].first.x
+      value: -11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[144].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].first.x
+      value: -10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[145].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].first.x
+      value: -9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[146].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].first.x
+      value: -8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[147].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].first.x
+      value: -7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[148].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].first.x
+      value: -6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[149].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].first.x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[150].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].first.x
+      value: -4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[151].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].first.x
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[152].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].first.x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[153].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].first.x
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[154].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].first.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[155].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].first.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[156].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].first.x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[157].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].first.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[158].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].first.x
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[159].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].first.x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[160].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].first.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[161].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].first.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[162].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].first.x
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[163].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].first.x
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[164].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].first.x
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[165].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].first.x
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[166].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].first.x
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[167].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].first.x
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[168].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].first.x
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[169].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].first.x
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[170].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].first.x
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[171].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].first.x
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[172].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].first.x
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[173].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].first.x
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].first.x
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].first.x
+      value: 21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].first.x
+      value: 22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].first.x
+      value: 23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].first.x
+      value: 24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].first.x
+      value: 25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].first.x
+      value: 26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].first.x
+      value: 27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].first.y
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].first.x
+      value: -51
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].first.x
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].first.x
+      value: -49
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].first.x
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].first.x
+      value: -47
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Size.y
+      value: 24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].first.x
+      value: -46
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].first.x
+      value: -45
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].first.x
+      value: -44
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].first.x
+      value: -43
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].first.x
+      value: -42
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[216].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[216].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[216].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[216].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[217].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[217].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[217].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[217].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[218].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[218].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[218].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[218].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[219].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[219].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[219].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[219].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[220].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[220].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[220].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[220].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[221].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[221].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[221].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[221].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[222].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[222].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[222].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[222].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[223].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[223].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[223].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[223].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[224].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[224].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[224].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[224].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[225].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[225].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[225].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[225].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[226].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[226].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[226].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[226].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[227].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[227].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[227].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[227].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[228].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[228].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[228].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[228].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[229].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[229].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[229].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[229].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[230].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[230].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[230].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[230].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[231].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[231].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[231].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[231].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[232].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[232].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[232].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[232].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[233].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[233].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[233].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[233].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[234].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[234].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[234].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[234].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[235].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[235].first.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[235].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[235].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[236].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[236].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[236].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[236].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[237].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[237].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[237].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[237].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[238].first.x
+      value: -51
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[238].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[238].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[238].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[239].first.x
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[239].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[239].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[239].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[240].first.x
+      value: -49
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[240].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[240].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[240].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[241].first.x
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[241].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[241].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[241].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[242].first.x
+      value: -47
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[242].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[242].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[242].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[243].first.x
+      value: -46
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[243].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[243].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[243].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[244].first.x
+      value: -45
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[244].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[244].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[244].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[245].first.x
+      value: -44
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[245].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[245].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[245].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[246].first.x
+      value: -43
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[246].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[246].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[246].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[247].first.x
+      value: -42
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[247].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[247].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[247].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[248].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[248].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[248].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[248].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[249].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[249].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[249].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[249].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[250].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[250].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[250].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[250].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[251].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[251].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[251].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[251].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[252].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[252].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[252].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[252].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[253].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[253].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[253].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[253].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[254].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[254].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[254].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[254].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[255].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[255].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[255].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[255].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[256].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[256].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[256].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[256].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[257].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[257].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[257].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[257].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[258].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[258].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[258].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[258].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[259].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[259].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[259].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[259].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[260].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[260].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[260].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[260].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[261].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[261].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[261].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[261].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[262].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[262].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[262].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[262].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[263].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[263].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[263].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[263].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[264].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[264].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[264].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[264].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[265].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[265].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[265].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[265].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[266].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[266].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[266].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[266].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[267].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[267].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[267].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[267].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[268].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[268].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[268].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[268].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[269].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[269].first.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[269].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[269].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[270].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[270].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[270].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[270].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[271].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[271].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[271].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[271].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[272].first.x
+      value: -51
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[272].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[272].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[272].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[273].first.x
+      value: -50
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[273].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[273].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[273].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[274].first.x
+      value: -49
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[274].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[274].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[274].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[275].first.x
+      value: -48
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[275].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[275].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[275].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[276].first.x
+      value: -47
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[276].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[276].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[276].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[277].first.x
+      value: -46
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[277].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[277].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[277].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[278].first.x
+      value: -45
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[278].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[278].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[278].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[279].first.x
+      value: -44
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[279].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[279].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[279].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[280].first.x
+      value: -43
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[280].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[280].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[280].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[281].first.x
+      value: -42
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[281].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[281].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[281].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[282].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[282].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[282].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[282].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[283].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[283].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[283].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[283].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[284].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[284].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[284].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[284].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[285].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[285].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[285].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[285].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[286].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[286].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[286].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[286].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[287].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[287].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[287].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[287].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[288].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[288].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[288].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[288].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[289].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[289].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[289].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[289].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[290].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[290].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[290].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[290].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[291].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[291].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[291].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[291].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[292].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[292].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[292].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[292].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[293].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[293].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[293].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[293].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[294].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[294].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[294].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[294].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[295].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[295].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[295].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[295].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[296].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[296].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[296].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[296].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[297].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[297].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[297].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[297].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[298].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[298].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[298].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[298].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[299].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[299].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[299].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[299].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[300].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[300].first.y
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[300].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[300].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[301].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[301].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[301].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[301].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[302].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[302].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[302].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[302].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[303].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[303].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[303].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[303].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[304].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[304].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[304].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[304].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[305].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[305].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[305].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[305].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[306].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[306].first.y
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[306].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[306].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[307].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[307].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[307].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[307].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[308].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[308].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[308].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[308].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[309].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[309].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[309].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[309].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[310].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[310].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[310].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[310].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[311].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[311].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[311].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[311].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[312].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[312].first.y
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[312].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[312].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[313].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[313].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[313].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[313].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[314].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[314].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[314].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[314].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[315].first.x
+      value: -10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[315].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[315].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[315].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[316].first.x
+      value: -9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[316].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[316].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[316].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[317].first.x
+      value: -8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[317].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[317].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[317].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[318].first.x
+      value: -7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[318].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[318].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[318].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[319].first.x
+      value: -6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[319].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[319].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[319].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[320].first.x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[320].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[320].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[320].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[321].first.x
+      value: -4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[321].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[321].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[321].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[322].first.x
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[322].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[322].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[322].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[323].first.x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[323].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[323].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[323].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[324].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[324].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[324].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[324].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[325].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[325].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[325].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[325].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[326].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[326].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[326].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[326].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[327].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[327].first.y
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[327].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[327].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[328].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[328].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[328].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[328].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[329].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[329].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[329].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[329].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[330].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[330].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[330].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[330].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[331].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[331].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[331].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[331].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[332].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[332].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[332].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[332].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[333].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[333].first.y
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[333].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[333].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[334].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[334].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[334].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[334].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[335].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[335].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[335].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[335].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[336].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[336].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[336].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[336].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[337].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[337].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[337].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[337].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[174].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[175].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[176].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[177].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[178].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[179].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[180].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[181].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[182].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[183].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[184].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[185].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[186].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[187].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[188].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[189].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[190].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[191].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[192].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[193].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[194].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[195].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[196].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[197].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[198].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[199].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[200].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[201].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[202].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[203].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[204].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[205].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[206].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[207].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[208].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[209].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[210].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[211].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[212].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[213].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[214].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[215].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[338].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[338].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[338].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[338].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[339].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[339].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[339].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[339].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[340].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[340].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[340].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[340].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[341].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[341].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[341].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[341].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[342].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[342].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[342].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[342].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[343].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[343].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[343].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[343].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[344].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[344].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[344].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[344].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[345].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[345].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[345].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[345].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[346].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[346].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[346].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[346].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[347].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[347].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[347].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[347].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[348].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[348].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[348].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[348].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[349].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[349].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[349].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[349].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[350].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[350].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[350].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[350].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[351].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[351].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[351].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[351].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[352].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[352].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[352].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[352].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[353].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[353].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[353].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[353].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[354].first.x
+      value: -23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[354].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[354].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[354].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[355].first.x
+      value: -22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[355].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[355].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[355].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[356].first.x
+      value: -21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[356].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[356].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[356].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[357].first.x
+      value: -20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[357].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[357].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[357].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[358].first.x
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[358].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[358].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[358].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[359].first.x
+      value: -18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[359].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[359].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[359].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[360].first.x
+      value: -17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[360].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[360].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[360].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[361].first.x
+      value: -16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[361].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[361].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[361].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[362].first.x
+      value: -15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[362].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[362].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[362].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[363].first.x
+      value: -14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[363].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[363].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[363].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[364].first.x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[364].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[364].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[364].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[365].first.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[365].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[365].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[365].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[366].first.x
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[366].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[366].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[366].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[367].first.x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[367].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[367].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[367].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[368].first.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[368].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[368].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[368].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[369].first.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[369].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[369].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[369].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[370].first.x
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[370].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[370].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[370].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[371].first.x
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[371].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[371].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[371].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[372].first.x
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[372].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[372].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[372].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[373].first.x
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[373].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[373].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[373].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[374].first.x
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[374].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[374].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[374].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[375].first.x
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[375].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[375].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[375].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[376].first.x
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[376].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[376].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[376].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[377].first.x
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[377].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[377].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[377].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[378].first.x
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[378].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[378].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[378].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[379].first.x
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[379].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[379].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[379].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[380].first.x
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[380].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[380].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[380].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[381].first.x
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[381].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[381].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[381].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[382].first.x
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[382].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[382].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[382].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[383].first.x
+      value: 21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[383].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[383].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[383].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[384].first.x
+      value: 22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[384].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[384].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[384].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[385].first.x
+      value: 23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[385].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[385].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[385].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[386].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[386].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[386].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[386].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[387].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[387].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[387].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[387].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[388].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[388].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[388].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[388].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[389].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[389].first.y
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[389].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[389].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[390].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[390].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[390].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[390].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[391].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[391].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[391].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[391].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[392].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[392].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[392].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[392].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[393].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[393].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[393].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[393].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[394].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[394].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[394].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[394].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[395].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[395].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[395].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[395].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[396].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[396].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[396].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[396].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[397].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[397].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[397].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[397].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[398].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[398].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[398].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[398].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[399].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[399].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[399].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[399].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[400].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[400].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[400].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[400].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[401].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[401].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[401].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[401].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[402].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[402].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[402].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[402].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[403].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[403].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[403].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[403].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[404].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[404].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[404].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[404].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[405].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[405].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[405].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[405].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileAssetArray.Array.data[1].m_RefCount
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileSpriteArray.Array.data[1].m_RefCount
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[406].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[406].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[406].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[406].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[407].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[407].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[407].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[407].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[408].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[408].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[408].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[408].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[409].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[409].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[409].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[409].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[410].first.x
+      value: -23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[410].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[410].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[410].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[411].first.x
+      value: -22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[411].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[411].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[411].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[412].first.x
+      value: -21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[412].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[412].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[412].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[413].first.x
+      value: -20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[413].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[413].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[413].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[414].first.x
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[414].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[414].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[414].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[415].first.x
+      value: -18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[415].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[415].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[415].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[416].first.x
+      value: -17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[416].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[416].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[416].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[417].first.x
+      value: -16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[417].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[417].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[417].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[418].first.x
+      value: -15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[418].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[418].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[418].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[419].first.x
+      value: -14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[419].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[419].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[419].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[420].first.x
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[420].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[420].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[420].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[421].first.x
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[421].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[421].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[421].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[422].first.x
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[422].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[422].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[422].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[423].first.x
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[423].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[423].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[423].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[424].first.x
+      value: 6
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[424].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[424].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[424].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[425].first.x
+      value: 7
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[425].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[425].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[425].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[426].first.x
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[426].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[426].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[426].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[427].first.x
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[427].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[427].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[427].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[428].first.x
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[428].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[428].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[428].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[429].first.x
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[429].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[429].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[429].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[430].first.x
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[430].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[430].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[430].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[431].first.x
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[431].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[431].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[431].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[432].first.x
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[432].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[432].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[432].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[433].first.x
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[433].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[433].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[433].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[434].first.x
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[434].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[434].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[434].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[435].first.x
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[435].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[435].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[435].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[436].first.x
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[436].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[436].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[436].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[437].first.x
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[437].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[437].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[437].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[438].first.x
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[438].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[438].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[438].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[439].first.x
+      value: 21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[439].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[439].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[439].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[440].first.x
+      value: 22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[440].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[440].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[440].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[441].first.x
+      value: 23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[441].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[441].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[441].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[442].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[442].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[442].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[442].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[443].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[443].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[443].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[443].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[444].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[444].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[444].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[444].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[445].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[445].first.y
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[445].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[445].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[446].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[446].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[446].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[446].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[447].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[447].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[447].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[447].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[448].first.x
+      value: -41
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[448].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[448].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[448].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[449].first.x
+      value: -40
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[449].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[449].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[449].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[450].first.x
+      value: -39
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[450].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[450].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[450].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[451].first.x
+      value: -38
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[451].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[451].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[451].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[452].first.x
+      value: -37
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[452].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[452].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[452].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[453].first.x
+      value: -36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[453].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[453].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[453].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[454].first.x
+      value: -35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[454].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[454].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[454].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[455].first.x
+      value: -34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[455].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[455].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[455].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[456].first.x
+      value: -33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[456].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[456].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[456].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[457].first.x
+      value: -32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[457].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[457].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[457].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[458].first.x
+      value: -31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[458].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[458].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[458].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[459].first.x
+      value: -30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[459].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[459].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[459].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[460].first.x
+      value: -29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[460].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[460].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[460].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[461].first.x
+      value: -28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[461].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[461].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[461].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[462].first.x
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[462].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[462].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[462].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[463].first.x
+      value: -26
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[463].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[463].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[463].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[464].first.x
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[464].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[464].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[464].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[465].first.x
+      value: -24
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[465].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[465].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[465].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[466].first.x
+      value: -23
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[466].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[466].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[466].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[467].first.x
+      value: -22
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[467].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[467].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[467].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[468].first.x
+      value: -21
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[468].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[468].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[468].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[469].first.x
+      value: -20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[469].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[469].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[469].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[470].first.x
+      value: -19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[470].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[470].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[470].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[471].first.x
+      value: -18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[471].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[471].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[471].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[472].first.x
+      value: -17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[472].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[472].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[472].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[473].first.x
+      value: -16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[473].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[473].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[473].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[474].first.x
+      value: -15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[474].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[474].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[474].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[475].first.x
+      value: -14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[475].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[475].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[475].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[476].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[476].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[476].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[476].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[477].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[477].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[477].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[477].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[478].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[478].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[478].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[478].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[479].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[479].first.y
+      value: 9
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[479].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[479].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[480].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[480].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[480].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[480].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[481].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[481].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[481].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[481].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[482].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[482].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[482].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[482].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[483].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[483].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[483].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[483].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[484].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[484].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[484].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[484].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[485].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[485].first.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[485].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[485].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[486].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[486].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[486].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[486].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[487].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[487].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[487].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[487].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[488].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[488].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[488].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[488].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[489].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[489].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[489].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[489].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[490].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[490].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[490].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[490].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[491].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[491].first.y
+      value: 11
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[491].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[491].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[492].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[492].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[492].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[492].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[493].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[493].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[493].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[493].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[494].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[494].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[494].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[494].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[495].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[495].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[495].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[495].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[496].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[496].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[496].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[496].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[497].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[497].first.y
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[497].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[497].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[498].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[498].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[498].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[498].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[499].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[499].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[499].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[499].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[500].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[500].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[500].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[500].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[501].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[501].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[501].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[501].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[502].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[502].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[502].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[502].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[503].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[503].first.y
+      value: 13
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[503].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[503].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[504].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[504].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[504].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[504].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[505].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[505].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[505].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[505].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[506].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[506].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[506].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[506].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[507].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[507].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[507].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[507].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[508].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[508].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[508].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[508].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[509].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[509].first.y
+      value: 14
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[509].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[509].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[510].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[510].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[510].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[510].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[511].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[511].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[511].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[511].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[512].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[512].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[512].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[512].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[513].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[513].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[513].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[513].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[514].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[514].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[514].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[514].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[515].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[515].first.y
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[515].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[515].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[516].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[516].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[516].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[516].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[517].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[517].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[517].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[517].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[518].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[518].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[518].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[518].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[519].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[519].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[519].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[519].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[520].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[520].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[520].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[520].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[521].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[521].first.y
+      value: 16
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[521].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[521].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[522].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[522].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[522].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[522].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[523].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[523].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[523].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[523].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[524].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[524].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[524].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[524].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[525].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[525].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[525].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[525].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[526].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[526].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[526].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[526].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[527].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[527].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[527].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[527].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[528].first.x
+      value: 32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[528].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[528].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[528].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[529].first.x
+      value: 33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[529].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[529].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[529].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[530].first.x
+      value: 34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[530].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[530].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[530].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[531].first.x
+      value: 35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[531].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[531].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[531].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[532].first.x
+      value: 36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[532].first.y
+      value: 17
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[532].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[532].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[533].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[533].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[533].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[533].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[534].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[534].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[534].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[534].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[535].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[535].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[535].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[535].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[536].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[536].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[536].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[536].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[537].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[537].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[537].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[537].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[538].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[538].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[538].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[538].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[539].first.x
+      value: 32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[539].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[539].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[539].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[540].first.x
+      value: 33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[540].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[540].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[540].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[541].first.x
+      value: 34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[541].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[541].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[541].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[542].first.x
+      value: 35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[542].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[542].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[542].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[543].first.x
+      value: 36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[543].first.y
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[543].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[543].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[544].first.x
+      value: -64
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[544].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[544].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[544].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[545].first.x
+      value: -63
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[545].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[545].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[545].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[546].first.x
+      value: -62
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[546].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[546].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[546].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[547].first.x
+      value: -61
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[547].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[547].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[547].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[548].first.x
+      value: -60
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[548].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[548].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[548].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[549].first.x
+      value: -59
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[549].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[549].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[549].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[550].first.x
+      value: -58
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[550].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[550].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[550].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[551].first.x
+      value: -57
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[551].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[551].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[551].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[552].first.x
+      value: -56
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[552].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[552].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[552].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[553].first.x
+      value: -55
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[553].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[553].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[553].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[554].first.x
+      value: -54
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[554].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[554].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[554].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[555].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[555].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[555].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[555].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[556].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[556].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[556].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[556].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[557].first.x
+      value: 28
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[557].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[557].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[557].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[558].first.x
+      value: 29
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[558].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[558].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[558].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[559].first.x
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[559].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[559].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[559].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[560].first.x
+      value: 31
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[560].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[560].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[560].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[561].first.x
+      value: 32
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[561].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[561].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[561].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[562].first.x
+      value: 33
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[562].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[562].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[562].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[563].first.x
+      value: 34
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[563].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[563].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[563].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[564].first.x
+      value: 35
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[564].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[564].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[564].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[565].first.x
+      value: 36
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[565].first.y
+      value: 19
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[565].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[565].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[566].first.x
+      value: -64
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[566].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[566].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[566].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[567].first.x
+      value: -63
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[567].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[567].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[567].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[568].first.x
+      value: -62
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[568].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[568].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[568].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[569].first.x
+      value: -61
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[569].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[569].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[569].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[570].first.x
+      value: -60
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[570].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[570].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[570].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[571].first.x
+      value: -59
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[571].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[571].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[571].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[572].first.x
+      value: -58
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[572].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[572].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[572].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[573].first.x
+      value: -57
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[573].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[573].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[573].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[574].first.x
+      value: -56
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[574].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[574].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[574].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[575].first.x
+      value: -55
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[575].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[575].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[575].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[576].first.x
+      value: -54
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[576].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[576].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[576].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[577].first.x
+      value: -53
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[577].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[577].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[577].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[578].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[578].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[578].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[578].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[0].first.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[0].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[0].second.m_TileIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[0].second.m_TileSpriteIndex
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileAssetArray.Array.data[1].m_Data
+      value: 
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_TileSpriteArray.Array.data[1].m_Data
+      value: 
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[1].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[2].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[3].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[4].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[5].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[6].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[7].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[8].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[9].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[10].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[11].first.y
+      value: -3
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[579].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[579].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[579].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[579].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[580].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[580].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[580].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[580].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[581].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[581].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[581].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[581].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[582].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[582].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[582].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[582].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[583].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[583].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[583].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[583].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[584].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[584].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[584].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[584].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[585].first.x
+      value: -52
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[585].first.y
+      value: 20
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[585].second.m_TileFlags
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463620932783315, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Tiles.Array.data[585].second.m_ColliderType
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132468, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 498463621282132470, guid: 84cba7f357aae034baa04d3ceeb02391,
+        type: 3}
+      propertyPath: m_Name
+      value: Grid
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 84cba7f357aae034baa04d3ceeb02391, type: 3}
+--- !u!1001 &3888029904866567345
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -59.93
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 22.68
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 8
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365541, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 3888029905473365562, guid: aa677b132f3ec714786ca926c8ebe4ec,
+        type: 3}
+      propertyPath: m_Name
+      value: Zombie
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: aa677b132f3ec714786ca926c8ebe4ec, type: 3}
+--- !u!1001 &6074805950772258757
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalPosition.x
+      value: -6.51
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 7.39
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805951961176499, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129258, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_GravityScale
+      value: 3
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129259, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_Offset.x
+      value: 0.049608827
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129259, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_Size.x
+      value: 5.379218
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129260, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_Name
+      value: Police
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129263, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_SortingLayerID
+      value: 1169290741
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129263, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_SortingLayer
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129269, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_SortingLayerID
+      value: 1169290741
+      objectReference: {fileID: 0}
+    - target: {fileID: 6074805952158129269, guid: 9af739a42eff7ec48b14cc2f7999fd69,
+        type: 3}
+      propertyPath: m_SortingLayer
+      value: 2
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: 9af739a42eff7ec48b14cc2f7999fd69, type: 3}
diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ef071d8abcce864c8c7c2b665ac042d5ac7125ad
--- /dev/null
+++ b/Assets/Scenes/SampleScene.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: df0c188f18eb59d418206508b45196b7
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/Scoreboard.unity b/Assets/Scenes/Scoreboard.unity
new file mode 100644
index 0000000000000000000000000000000000000000..19c6fa19df42aab26d106eef05f6bd1e0865b1a1
--- /dev/null
+++ b/Assets/Scenes/Scoreboard.unity
@@ -0,0 +1,765 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: 0.25
+    backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 9
+  m_Fog: 0
+  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: 0.01
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+  m_AmbientIntensity: 1
+  m_AmbientMode: 3
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: 0.5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+  m_DefaultReflectionMode: 0
+  m_DefaultReflectionResolution: 128
+  m_ReflectionBounces: 1
+  m_ReflectionIntensity: 1
+  m_CustomReflection: {fileID: 0}
+  m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+  m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 11
+  m_GIWorkflowMode: 1
+  m_GISettings:
+    serializedVersion: 2
+    m_BounceScale: 1
+    m_IndirectOutputScale: 1
+    m_AlbedoBoost: 1
+    m_EnvironmentLightingMode: 0
+    m_EnableBakedLightmaps: 0
+    m_EnableRealtimeLightmaps: 0
+  m_LightmapEditorSettings:
+    serializedVersion: 10
+    m_Resolution: 2
+    m_BakeResolution: 40
+    m_AtlasSize: 1024
+    m_AO: 0
+    m_AOMaxDistance: 1
+    m_CompAOExponent: 1
+    m_CompAOExponentDirect: 0
+    m_Padding: 2
+    m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
+    m_TextureCompression: 1
+    m_FinalGather: 0
+    m_FinalGatherFiltering: 1
+    m_FinalGatherRayCount: 256
+    m_ReflectionCompression: 2
+    m_MixedBakeMode: 2
+    m_BakeBackend: 1
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVRFilteringMode: 1
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ShowResolutionOverlay: 1
+  m_LightingDataAsset: {fileID: 0}
+  m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+  serializedVersion: 2
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.4
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_NavMeshData: {fileID: 0}
+--- !u!1 &66900692
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 66900693}
+  - component: {fileID: 66900694}
+  m_Layer: 0
+  m_Name: ScoreboardManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &66900693
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 66900692}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: -24.956879, y: 19.707346, z: -0.47279575}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &66900694
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 66900692}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d98c8cdf9b7129e4e8984f22fd06a4bf, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  text: {fileID: 273999298}
+--- !u!1 &178952368
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 178952369}
+  - component: {fileID: 178952371}
+  - component: {fileID: 178952370}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &178952369
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 178952368}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1718843036}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &178952370
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 178952368}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Back
+--- !u!222 &178952371
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 178952368}
+  m_CullTransparentMesh: 0
+--- !u!1 &273999296
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 273999297}
+  - component: {fileID: 273999299}
+  - component: {fileID: 273999298}
+  m_Layer: 5
+  m_Name: Score Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &273999297
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 273999296}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1912048163}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: -53.3}
+  m_SizeDelta: {x: 597, y: 237.5}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &273999298
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 273999296}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 0.5801887, b: 0.5801887, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 20
+    m_Alignment: 1
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: New Text
+--- !u!222 &273999299
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 273999296}
+  m_CullTransparentMesh: 0
+--- !u!1 &341733586
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 341733589}
+  - component: {fileID: 341733588}
+  - component: {fileID: 341733587}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &341733587
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 341733586}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &341733588
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 341733586}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 1
+  m_DragThreshold: 10
+--- !u!4 &341733589
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 341733586}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1718843035
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1718843036}
+  - component: {fileID: 1718843040}
+  - component: {fileID: 1718843039}
+  - component: {fileID: 1718843038}
+  - component: {fileID: 1718843037}
+  m_Layer: 5
+  m_Name: Button
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1718843036
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1718843035}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 178952369}
+  m_Father: {fileID: 1912048163}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -231.6, y: 128}
+  m_SizeDelta: {x: 88.9, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1718843037
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1718843035}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2cbe851e085f02b4d83fd75a102867db, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!114 &1718843038
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1718843035}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1718843039}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &1718843039
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1718843035}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+--- !u!222 &1718843040
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1718843035}
+  m_CullTransparentMesh: 0
+--- !u!1 &1811607188
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1811607191}
+  - component: {fileID: 1811607190}
+  - component: {fileID: 1811607189}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &1811607189
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811607188}
+  m_Enabled: 1
+--- !u!20 &1811607190
+Camera:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811607188}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: 0.3
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 1
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_TargetDisplay: 0
+  m_TargetEye: 3
+  m_HDR: 1
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
+  m_OcclusionCulling: 1
+  m_StereoConvergence: 10
+  m_StereoSeparation: 0.022
+--- !u!4 &1811607191
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1811607188}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1912048159
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1912048163}
+  - component: {fileID: 1912048162}
+  - component: {fileID: 1912048161}
+  - component: {fileID: 1912048160}
+  m_Layer: 5
+  m_Name: Canvas
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &1912048160
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1912048159}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &1912048161
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1912048159}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!223 &1912048162
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1912048159}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!224 &1912048163
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1912048159}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 2021541946}
+  - {fileID: 1718843036}
+  - {fileID: 273999297}
+  m_Father: {fileID: 0}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!1 &2021541945
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2021541946}
+  - component: {fileID: 2021541948}
+  - component: {fileID: 2021541947}
+  m_Layer: 5
+  m_Name: TitleText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2021541946
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2021541945}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1912048163}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 128}
+  m_SizeDelta: {x: 160, y: 30}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2021541947
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2021541945}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Highest Score
+--- !u!222 &2021541948
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2021541945}
+  m_CullTransparentMesh: 0
diff --git a/Assets/Scenes/Scoreboard.unity.meta b/Assets/Scenes/Scoreboard.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bfb91a958e6949ba160b5408b1ba0e75da5b5244
--- /dev/null
+++ b/Assets/Scenes/Scoreboard.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b6c7db7dacd591844967b34bde3b0d08
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script.meta b/Assets/Script.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a753643e76bcdbeb519a6b44de6983d83d419b70
--- /dev/null
+++ b/Assets/Script.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 81ac9186482a2ea4ba2fc7c78080256a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/CameraFollow.cs b/Assets/Script/CameraFollow.cs
new file mode 100644
index 0000000000000000000000000000000000000000..746dd7fea63183e6c331127821700d982e370372
--- /dev/null
+++ b/Assets/Script/CameraFollow.cs
@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CameraFollow : MonoBehaviour
+{
+	public Transform target;
+	public float smoothing = 5f;
+
+	private Vector3 offset;
+
+	void Start()
+	{
+		offset = transform.position - target.position;
+	}
+
+	void FixedUpdate()
+	{
+		Vector3 targetCamPos = target.position + offset;
+		transform.position = Vector3.Lerp(transform.position, targetCamPos, smoothing * Time.deltaTime);
+	}
+}
\ No newline at end of file
diff --git a/Assets/Script/CameraFollow.cs.meta b/Assets/Script/CameraFollow.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..55a8bd6b3627822ffd0bc897f335cd98aedd21ab
--- /dev/null
+++ b/Assets/Script/CameraFollow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bab3f3a731c89504391a72bfa7047e49
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Enemy.meta b/Assets/Script/Enemy.meta
new file mode 100644
index 0000000000000000000000000000000000000000..06b32a321854147c1d724f6b4b7ec11aa11c7d3d
--- /dev/null
+++ b/Assets/Script/Enemy.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5a835701b5c36f54da18e162a6590a39
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Enemy/EnemyAttack.cs b/Assets/Script/Enemy/EnemyAttack.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b5cd0ad3e4cab329f81c2c35511fd6a78662711d
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyAttack.cs
@@ -0,0 +1,62 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EnemyAttack : MonoBehaviour
+{
+	public float damage = 10f;
+	public float attackInterval = 1f;
+	
+	private GameObject player;
+	private PlayerHealth playerHealth;
+	private bool isPlayerInRange;
+	private float timer;
+	
+    // Start is called before the first frame update
+    void Awake()
+    {
+		player = GameObject.FindGameObjectWithTag("Player");
+		playerHealth = player.GetComponent<PlayerHealth>();
+		timer = 0f;
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+		
+		timer += Time.deltaTime;
+		
+		if(timer >= attackInterval && isPlayerInRange){
+			
+			timer = 0f;
+			Attack();
+		}
+		
+		if(playerHealth.currentHealth <=0){
+			EnemyMovement enemyMovement = GetComponent<EnemyMovement>();
+			enemyMovement.enabled = false;
+		}
+    }
+	
+	
+	void OnTriggerEnter2D(Collider2D other){
+		if(other.gameObject == player){
+			isPlayerInRange = true;	
+		}
+	}
+	
+	void OnTriggerExit2D(Collider2D other){
+		if(other.gameObject == player){
+			isPlayerInRange = false;
+		}
+	}
+	
+	void Attack(){
+		
+		if (playerHealth.currentHealth >0){
+			playerHealth.damage(damage);
+		}
+		
+	}
+}
diff --git a/Assets/Script/Enemy/EnemyAttack.cs.meta b/Assets/Script/Enemy/EnemyAttack.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b7d0f5e1b8193aa8d393f5bf97ee928f349379bf
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyAttack.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21e48f4980ebb344e89af5790b3c9e7c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Enemy/EnemyHealth.cs b/Assets/Script/Enemy/EnemyHealth.cs
new file mode 100644
index 0000000000000000000000000000000000000000..73414ac961bf8f84c1c544b24363417f732052a7
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyHealth.cs
@@ -0,0 +1,61 @@
+using UnityEngine;
+
+public class EnemyHealth : MonoBehaviour
+{
+    public int startingHealth = 100;
+    public int currentHealth;
+    public float sinkSpeed = 2.5f;
+    public int scorePerShoot = 1;
+	public int scoreDeath = 5;
+
+
+
+    Animator anim;
+    CapsuleCollider2D capsuleCollider;
+    bool isDead;
+
+
+    void Awake ()
+    {
+        anim = GetComponent <Animator> ();
+        capsuleCollider = GetComponent <CapsuleCollider2D> ();
+
+        currentHealth = startingHealth;
+    }
+
+
+    void Update ()
+    {
+		// do what ?
+    }
+
+
+    public void TakeDamage (int amount)
+    {
+        if(isDead)
+            return;
+
+
+        currentHealth -= amount;
+		ScoreManager.score += scorePerShoot;
+ 
+
+        if(currentHealth <= 0)
+        {
+            Dead ();
+        }
+    }
+
+
+    void Dead ()
+    {
+        isDead = true;
+		ScoreManager.score += scoreDeath;
+
+        capsuleCollider.isTrigger = true;
+
+        anim.SetTrigger ("Dead");
+		//GetComponent <Rigidbody2D>().isKinematic = true;
+		Destroy(gameObject,2f);
+    }
+}
diff --git a/Assets/Script/Enemy/EnemyHealth.cs.meta b/Assets/Script/Enemy/EnemyHealth.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..db8221f7dda7bf7c3955901c81871713987b65b5
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyHealth.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 996ae9bb6e3f77245b77d1b29cd9b926
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Enemy/EnemyMovement.cs b/Assets/Script/Enemy/EnemyMovement.cs
new file mode 100644
index 0000000000000000000000000000000000000000..95d17608146e7420909a10cea1f1ae01f04260ca
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyMovement.cs
@@ -0,0 +1,65 @@
+using UnityEngine;
+using System.Collections;
+
+public class EnemyMovement : MonoBehaviour
+{
+    //Transform player;
+    //PlayerHealth playerHealth;
+    //EnemyHealth enemyHealth;
+    //UnityEngine.AI.NavMeshAgent nav;
+	
+	public float LerpConstant = 3f;
+	public float speed = 3f;
+	
+	
+	
+	private GameObject target;
+	private Vector2 moveVector;
+	private Rigidbody2D rigidbody;
+	private Animator anim;
+	
+
+	
+	
+	private bool isFacingRight;
+	private float move_direction;
+	
+
+    void Start()
+    {
+		target = GameObject.FindWithTag("Player");
+		rigidbody = GetComponent<Rigidbody2D>();
+		anim = GetComponent<Animator>();
+		isFacingRight = true;
+    }
+
+
+    void Update ()
+    {
+		// Move enemy
+		// For now move unidirection
+		// next move according to user's position
+		move_direction = (target.transform.position - transform.position).x;
+		if(move_direction!=0){
+			if(move_direction>0){
+				rigidbody.velocity = new Vector2(speed,rigidbody.velocity.y);
+			} else {
+				rigidbody.velocity = new Vector2(-speed,rigidbody.velocity.y);
+			}
+		Rotation();
+		
+		}
+
+    } 
+	
+	void Rotation(){
+		
+		if((move_direction>0&&!isFacingRight)||(move_direction<0&&isFacingRight)){
+			Vector3 temp_scale = transform.localScale;
+			temp_scale.x *= -1;
+			transform.localScale = temp_scale;
+			isFacingRight = !isFacingRight;
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/Assets/Script/Enemy/EnemyMovement.cs.meta b/Assets/Script/Enemy/EnemyMovement.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..07270c5062eb2dde4dffb8759ea38ce101bb941a
--- /dev/null
+++ b/Assets/Script/Enemy/EnemyMovement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8933010149fb2d24ca47f930dc9fef27
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Managers.meta b/Assets/Script/Managers.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d9dd5fa602192ab25f2c160cda0a1fafae817ab0
--- /dev/null
+++ b/Assets/Script/Managers.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d32181e3b500f064c96ea078bb92190b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Managers/CustomSceneManager.cs b/Assets/Script/Managers/CustomSceneManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e126d67925b19b9855c8ccede7345ef691b25fe4
--- /dev/null
+++ b/Assets/Script/Managers/CustomSceneManager.cs
@@ -0,0 +1,45 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.Networking;
+
+public class CustomSceneManager : MonoBehaviour
+{
+    // Start is called before the first frame update
+	AudioSource bgm;
+    void Start()
+    {
+		bgm = GetComponent<AudioSource>();
+		
+		bgm.Play();
+        
+    }
+	public void back(){
+		
+		
+		StartCoroutine(uploadScore());
+
+		
+	}
+	
+	IEnumerator uploadScore(){
+		
+		WWWForm form = new WWWForm();
+        form.AddField("username", "Alam");
+		form.AddField("score",ScoreManager.score);
+
+        using (UnityWebRequest www = UnityWebRequest.Post("http://134.209.97.218:5051/scoreboards/13517096", form))
+        {
+            yield return www.SendWebRequest();
+
+            if (www.isNetworkError || www.isHttpError)
+            {
+                Debug.Log(www.error);
+            }
+        }		
+		
+		bgm.Stop();
+		SceneManager.LoadScene(0);
+	}
+}
diff --git a/Assets/Script/Managers/CustomSceneManager.cs.meta b/Assets/Script/Managers/CustomSceneManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c5d0d768859f6cca312b96875cae508486e56f5e
--- /dev/null
+++ b/Assets/Script/Managers/CustomSceneManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1dd9abf3d2f84674fba983f0072dfb16
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Managers/EnemySpawnManager.cs b/Assets/Script/Managers/EnemySpawnManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6bc434b8d90998e412854060002f5432cf919e8a
--- /dev/null
+++ b/Assets/Script/Managers/EnemySpawnManager.cs
@@ -0,0 +1,31 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EnemySpawnManager : MonoBehaviour
+{
+    // Start is called before the first frame update
+	
+	//public PlayerHealth playerHealth;
+	public float spawnTime;
+	public GameObject enemy;
+	public Transform[] positions;
+
+	
+    void Start()
+    {
+		InvokeRepeating("Spawn",spawnTime,spawnTime);
+		
+        
+    }
+
+    // Update is called once per frame
+    void Spawn()
+    {
+		
+		// Generate random spawn from points
+		int spawnIndex = Random.Range(0,positions.Length);
+		Instantiate(enemy,positions[spawnIndex].position,positions[spawnIndex].rotation);
+        
+    }
+}
diff --git a/Assets/Script/Managers/EnemySpawnManager.cs.meta b/Assets/Script/Managers/EnemySpawnManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..df379312479436345572a69d39e8de6f5e6070d7
--- /dev/null
+++ b/Assets/Script/Managers/EnemySpawnManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9f1dd6c8c767b634c8d0547d242011c9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Managers/ScoreManager.cs b/Assets/Script/Managers/ScoreManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0d414a11d6ccee0592501510d07ae7446576819b
--- /dev/null
+++ b/Assets/Script/Managers/ScoreManager.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ScoreManager : MonoBehaviour
+{
+	
+	public static int score;
+	public Text text;
+    // Start is called before the first frame update
+    void Start()
+    {
+		score = 0;
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+		
+		text.text = "Score : " + score;
+		
+        
+    }
+}
diff --git a/Assets/Script/Managers/ScoreManager.cs.meta b/Assets/Script/Managers/ScoreManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..01782124c65f9d98c1fafa916730b160f596ccca
--- /dev/null
+++ b/Assets/Script/Managers/ScoreManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2b2fb3d14f555754480b3789a4f32362
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Managers/ScoreboardManager.cs b/Assets/Script/Managers/ScoreboardManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..117882b2ab01aad696aac0afc141c1861e445456
--- /dev/null
+++ b/Assets/Script/Managers/ScoreboardManager.cs
@@ -0,0 +1,65 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Networking;
+using LitJson;
+
+
+public class ScoreboardManager : MonoBehaviour
+{
+	
+	public Text text;
+	
+	private ArrayList username;
+	private ArrayList score;
+	
+	private int maxDisplayed = 5;
+    // Start is called before the first frame update
+    void Start()
+    {
+
+        StartCoroutine(getScore());
+		username = new ArrayList();
+		score = new ArrayList();
+    }
+
+    // Update is called once per frame
+    IEnumerator getScore(){
+		
+		WWW www = new WWW("http://134.209.97.218:5051/scoreboards/13517096");
+		yield return www;
+		
+		if (www.error == null){
+			ParseData(www.text);
+			ShowScore();
+		} else {
+			Debug.Log(www.error);
+		}
+		
+		
+	}
+	
+	void ParseData(string data){
+		JsonData jsondata = JsonMapper.ToObject(data);
+		Debug.Log(jsondata);
+		for(int i = 0 ; i < jsondata.Count ; i++){
+			username.Add(jsondata[i]["username"].ToString());
+			score.Add(jsondata[i]["score"].ToString());
+			if(i==(maxDisplayed-1)){break;}
+		}
+	}
+	
+	void ShowScore(){
+		text.text = "";
+		for(int i = 0 ; i < username.Count ; i++){
+			
+			text.text += username[i] + "   -----   " + score[i] + "\n\n";
+			
+		}
+		
+	
+		
+		
+	}
+}
diff --git a/Assets/Script/Managers/ScoreboardManager.cs.meta b/Assets/Script/Managers/ScoreboardManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..885d942baf298a42cff4f3f5090953d76ac95e71
--- /dev/null
+++ b/Assets/Script/Managers/ScoreboardManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d98c8cdf9b7129e4e8984f22fd06a4bf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Menu.meta b/Assets/Script/Menu.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2b35fbd110be2d2459843af7b74ee60d1a946bed
--- /dev/null
+++ b/Assets/Script/Menu.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ab687522157bb7a42bf8a6a989fd02d5
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Menu/BackButton.cs b/Assets/Script/Menu/BackButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eb0e392f89c9c7de427057dbb9a46f3e0207c49f
--- /dev/null
+++ b/Assets/Script/Menu/BackButton.cs
@@ -0,0 +1,29 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.UI;
+
+public class BackButton : MonoBehaviour
+{
+    // Start is called before the first frame update
+	Button currButton;
+    void Start()
+    {
+		currButton = GetComponent<Button>();
+		currButton.onClick.AddListener(startGame);
+
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+	
+	void startGame(){
+		
+		SceneManager.LoadScene(0,LoadSceneMode.Single);
+		
+	}
+}
diff --git a/Assets/Script/Menu/BackButton.cs.meta b/Assets/Script/Menu/BackButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c259816548826fbf62c262007351ba2d11d4cb1
--- /dev/null
+++ b/Assets/Script/Menu/BackButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2cbe851e085f02b4d83fd75a102867db
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Menu/ScoreboardButton.cs b/Assets/Script/Menu/ScoreboardButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4c4b61baa7b6acc49b005549840f071ce3debc63
--- /dev/null
+++ b/Assets/Script/Menu/ScoreboardButton.cs
@@ -0,0 +1,29 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.UI;
+
+public class ScoreboardButton : MonoBehaviour
+{
+    // Start is called before the first frame update
+	Button currButton;
+    void Start()
+    {
+		currButton = GetComponent<Button>();
+		currButton.onClick.AddListener(startGame);
+
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+	
+	void startGame(){
+		
+		SceneManager.LoadScene(2,LoadSceneMode.Single);
+		
+	}
+}
diff --git a/Assets/Script/Menu/ScoreboardButton.cs.meta b/Assets/Script/Menu/ScoreboardButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5bbb1f4bb9a5f6901529cec71d3de310a4a29441
--- /dev/null
+++ b/Assets/Script/Menu/ScoreboardButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cef9a845527863546b1318d1681f1545
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Menu/StartGameScript.cs b/Assets/Script/Menu/StartGameScript.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4a84e9a014d55e6b3177b44a745298fc3d293419
--- /dev/null
+++ b/Assets/Script/Menu/StartGameScript.cs
@@ -0,0 +1,29 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using UnityEngine.UI;
+
+public class StartGameScript : MonoBehaviour
+{
+    // Start is called before the first frame update
+	Button currButton;
+    void Start()
+    {
+		currButton = GetComponent<Button>();
+		currButton.onClick.AddListener(startGame);
+
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+	
+	void startGame(){
+		
+		SceneManager.LoadScene(1,LoadSceneMode.Single);
+		
+	}
+}
diff --git a/Assets/Script/Menu/StartGameScript.cs.meta b/Assets/Script/Menu/StartGameScript.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a92e74bf35a77c4aa0e5ed7597a39541d006cc74
--- /dev/null
+++ b/Assets/Script/Menu/StartGameScript.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f53ba1c15d19fd34abacf443a6514045
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Player.meta b/Assets/Script/Player.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cda83edfcfc2ef98661a59ada124038e67726f6d
--- /dev/null
+++ b/Assets/Script/Player.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 88c5a6f3ddc0b9b488d857616d5488e1
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Player/PlayerAttack.cs b/Assets/Script/Player/PlayerAttack.cs
new file mode 100644
index 0000000000000000000000000000000000000000..400341f8cd6465213f436ec7c1fcc28be21f600d
--- /dev/null
+++ b/Assets/Script/Player/PlayerAttack.cs
@@ -0,0 +1,79 @@
+using UnityEngine;
+
+public class PlayerAttack : MonoBehaviour
+{
+    public int damagePerShot = 5;
+    public float timeBetweenBullets = 0.05f;
+    public float range = 20f;
+
+
+    float timer;
+    RaycastHit2D shootHit;
+	AudioSource audioSource;
+    int shootableMask;
+    LineRenderer gunLine;
+    float effectsDisplayTime = 1f;
+
+
+    void Awake ()
+    {
+        shootableMask = LayerMask.GetMask("Shootable");
+        gunLine = GetComponent <LineRenderer>();
+		audioSource = GetComponent<AudioSource>();
+    }
+
+
+    void Update ()
+    {
+        timer += Time.deltaTime;
+        if(timer >= timeBetweenBullets * effectsDisplayTime)
+        {
+            DisableEffects ();
+        }
+    }
+
+
+    private void DisableEffects ()
+    {
+        gunLine.enabled = false;
+		audioSource.Stop();
+    }
+
+
+    public void Shoot (bool isFacingRight)
+    {
+		Vector3 shootDirection;
+		if(timer >= timeBetweenBullets && Time.timeScale !=0){
+			
+			timer = 0f;
+
+			gunLine.enabled = true;
+			audioSource.Play();
+			gunLine.SetPosition (0, transform.position);
+
+			if(isFacingRight){
+				shootDirection = new Vector3(1f,0,0);
+			} else {
+				shootDirection = new Vector3(-1f,0,0);
+			}
+
+			shootHit = Physics2D.Raycast(transform.position, shootDirection,range,shootableMask);
+			if (shootHit.collider!=null)
+			{
+
+				EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
+				if(enemyHealth != null)
+				{
+					enemyHealth.TakeDamage(damagePerShot);
+				}
+				gunLine.SetPosition (1, shootHit.point);
+			}
+			else
+			{
+				gunLine.SetPosition (1, transform.position + shootDirection * range);
+			}
+		}
+					
+	}
+        
+}
diff --git a/Assets/Script/Player/PlayerAttack.cs.meta b/Assets/Script/Player/PlayerAttack.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1ba7bb33a699e40a62dd953ef447eeeddadcf52f
--- /dev/null
+++ b/Assets/Script/Player/PlayerAttack.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 72da580ddc62254448bfbc92dc6c5a0c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Player/PlayerHealth.cs b/Assets/Script/Player/PlayerHealth.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2faeeff4ab0d8865b378a012fb1516f9aa7eeaea
--- /dev/null
+++ b/Assets/Script/Player/PlayerHealth.cs
@@ -0,0 +1,53 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.SceneManagement;
+
+public class PlayerHealth : MonoBehaviour
+{
+	
+	public float initHealth = 100f;
+	public float currentHealth = 0f;
+	public Slider slider;
+	public CustomSceneManager sceneManager;
+    // Start is called before the first frame update
+    void Start()
+    {
+		currentHealth = initHealth;
+		slider.value = currentHealth;
+		
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+	
+	public void damage(float damage){
+		currentHealth -= damage;
+		
+		
+		slider.value = currentHealth;
+		
+		if(currentHealth <= 0f){
+			Dead();
+		}
+	}
+	
+	void Dead(){
+		Debug.Log("Dead");
+		GetComponent<PlayerMovement>().enabled = false;
+		GetComponent<PlayerAttack>().enabled = false;
+		GetComponent<AudioSource>().enabled = false;
+		GetComponent<Animator>().SetTrigger("Dead");
+		
+		Invoke("RestartLevel",3.0f);
+	}
+	
+	void RestartLevel(){
+		sceneManager.back();
+	}
+}
diff --git a/Assets/Script/Player/PlayerHealth.cs.meta b/Assets/Script/Player/PlayerHealth.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bd7f7263892c6b4638cf6e8e8a47eeac3e3fb630
--- /dev/null
+++ b/Assets/Script/Player/PlayerHealth.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4cb753b105cab14409a05ea1aac20d72
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Script/Player/PlayerMovement.cs b/Assets/Script/Player/PlayerMovement.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8b2ae415049eca0a1c75d3e8278e665aa7e9f236
--- /dev/null
+++ b/Assets/Script/Player/PlayerMovement.cs
@@ -0,0 +1,90 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PlayerMovement : MonoBehaviour
+{
+	
+	public float speed = 6f;
+	public float jump_force = 1f;
+	
+	private Animator anim;
+	private Rigidbody2D rb;
+	private bool isJumping;
+	private bool facingRight;
+	private bool isShooting;
+	private SpriteRenderer spriteRenderer;
+	private PlayerAttack playerAttack;
+    // Start is called before the first frame update
+    void Awake()
+    {
+		rb = GetComponent<Rigidbody2D>();
+		anim = GetComponent<Animator>();
+		facingRight = true;
+		spriteRenderer = GetComponent<SpriteRenderer>();
+		playerAttack = GetComponent<PlayerAttack>();
+
+    }
+
+    // Update is called once per frame
+    void FixedUpdate()
+    {
+		
+		
+		float fire = Input.GetAxisRaw("Fire1");
+		
+		float h = Input.GetAxisRaw("Horizontal");
+		float v = Input.GetAxisRaw("Vertical");
+		
+		// Set jumping to false;
+		if(rb.velocity.y == 0 && isJumping){
+			
+			isJumping = false;
+		}
+		
+		if((fire>0f)&&(!isJumping)){
+			shoot();
+		} else {
+			anim.SetBool("IsShooting",false);
+			if(v>0f&&(!isJumping)){
+				rb.velocity = new Vector2(speed*h, 15f*v);
+				isJumping = true;
+				
+			} else {
+				
+				// Walking
+				if(h!=0f){
+					anim.SetBool("IsWalking",true);
+					rb.velocity = new Vector2(speed*h , rb.velocity.y);
+					
+				} else {
+					rb.velocity = new Vector2(0f,rb.velocity.y);
+					anim.SetBool("IsWalking",false);
+				}	
+			}
+			
+			Rotation(h);
+		}
+	
+    }
+	
+	
+	void Rotation(float h){
+		
+		if(h!=0f){
+			Vector3 localScale = transform.localScale;
+			localScale.x *= -1;
+			if((facingRight&&(h<0f))||(!facingRight&&(h>0f))){
+				facingRight = !facingRight;
+				transform.localScale = localScale;
+				
+			} 
+		}
+	}
+	
+	void shoot(){
+		anim.SetBool("IsWalking",false);
+		anim.SetBool("IsShooting",true);
+		playerAttack.Shoot(facingRight);
+	}
+}
diff --git a/Assets/Script/Player/PlayerMovement.cs.meta b/Assets/Script/Player/PlayerMovement.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a95536bf945a787ebad03d769b3049cfa58cd849
--- /dev/null
+++ b/Assets/Script/Player/PlayerMovement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5a9c1c408e1502d42befe580f215d2d5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sound.meta b/Assets/Sound.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ca8e91e5e84f337659b8728181d715933faec830
--- /dev/null
+++ b/Assets/Sound.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0e5892ce3054f6240b372183ded1ccbd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sound/BGM-Cantina.mp3 b/Assets/Sound/BGM-Cantina.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..3f403ae12ef431ef41150d5359c0578a93f6ef94
Binary files /dev/null and b/Assets/Sound/BGM-Cantina.mp3 differ
diff --git a/Assets/Sound/BGM-Cantina.mp3.meta b/Assets/Sound/BGM-Cantina.mp3.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ca75996b43c95b7bf45a5a996761e83b8da6cf76
--- /dev/null
+++ b/Assets/Sound/BGM-Cantina.mp3.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: d6477a15b6bbef64d95f4a5ca8ca4f43
+AudioImporter:
+  externalObjects: {}
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  ambisonic: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sound/ShootingSound.mp3 b/Assets/Sound/ShootingSound.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..0c040bc08c6b8ca3d992826785e0db05cb4818cc
Binary files /dev/null and b/Assets/Sound/ShootingSound.mp3 differ
diff --git a/Assets/Sound/ShootingSound.mp3.meta b/Assets/Sound/ShootingSound.mp3.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e41cfa923de5e0b48987f019a322a06f264f29f1
--- /dev/null
+++ b/Assets/Sound/ShootingSound.mp3.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: 4a432f5f8e9a8e84d942ef5ebc19d9ad
+AudioImporter:
+  externalObjects: {}
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  ambisonic: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites.meta b/Assets/Sprites.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9d67dc8a6ebb72ffc6058c106d61943153069c5e
--- /dev/null
+++ b/Assets/Sprites.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 873d4ae1798ef3f468618f345bf96ad0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment.meta b/Assets/Sprites/Environment.meta
new file mode 100644
index 0000000000000000000000000000000000000000..702aacb64faae839be5b4a05914ad33d4b78931e
--- /dev/null
+++ b/Assets/Sprites/Environment.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3b17c62f739a7a740a3287e7dce21592
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/DreamlandTiles.prefab b/Assets/Sprites/Environment/DreamlandTiles.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..d2ec82f802806074ee677f1c4336b0d81d7c965b
--- /dev/null
+++ b/Assets/Sprites/Environment/DreamlandTiles.prefab
@@ -0,0 +1,752 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1827504442082098836
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3139770656588206271}
+  - component: {fileID: 1967894510939649154}
+  - component: {fileID: 2446887533299158230}
+  m_Layer: 31
+  m_Name: Layer1
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3139770656588206271
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1827504442082098836}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1518790476528154306}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1839735485 &1967894510939649154
+Tilemap:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1827504442082098836}
+  m_Enabled: 1
+  m_Tiles:
+  - first: {x: -1, y: -6, z: 0}
+    second:
+      m_TileIndex: 42
+      m_TileSpriteIndex: 42
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -5, z: 0}
+    second:
+      m_TileIndex: 35
+      m_TileSpriteIndex: 35
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -5, z: 0}
+    second:
+      m_TileIndex: 36
+      m_TileSpriteIndex: 36
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -5, z: 0}
+    second:
+      m_TileIndex: 37
+      m_TileSpriteIndex: 37
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -5, z: 0}
+    second:
+      m_TileIndex: 38
+      m_TileSpriteIndex: 38
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -5, z: 0}
+    second:
+      m_TileIndex: 39
+      m_TileSpriteIndex: 39
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -5, z: 0}
+    second:
+      m_TileIndex: 40
+      m_TileSpriteIndex: 40
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -5, z: 0}
+    second:
+      m_TileIndex: 41
+      m_TileSpriteIndex: 41
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -4, z: 0}
+    second:
+      m_TileIndex: 28
+      m_TileSpriteIndex: 28
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -4, z: 0}
+    second:
+      m_TileIndex: 29
+      m_TileSpriteIndex: 29
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -4, z: 0}
+    second:
+      m_TileIndex: 30
+      m_TileSpriteIndex: 30
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -4, z: 0}
+    second:
+      m_TileIndex: 31
+      m_TileSpriteIndex: 31
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -4, z: 0}
+    second:
+      m_TileIndex: 32
+      m_TileSpriteIndex: 32
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -4, z: 0}
+    second:
+      m_TileIndex: 33
+      m_TileSpriteIndex: 33
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -4, z: 0}
+    second:
+      m_TileIndex: 34
+      m_TileSpriteIndex: 34
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -3, z: 0}
+    second:
+      m_TileIndex: 21
+      m_TileSpriteIndex: 21
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -3, z: 0}
+    second:
+      m_TileIndex: 22
+      m_TileSpriteIndex: 22
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -3, z: 0}
+    second:
+      m_TileIndex: 23
+      m_TileSpriteIndex: 23
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -3, z: 0}
+    second:
+      m_TileIndex: 24
+      m_TileSpriteIndex: 24
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -3, z: 0}
+    second:
+      m_TileIndex: 25
+      m_TileSpriteIndex: 25
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -3, z: 0}
+    second:
+      m_TileIndex: 26
+      m_TileSpriteIndex: 26
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -3, z: 0}
+    second:
+      m_TileIndex: 27
+      m_TileSpriteIndex: 27
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -2, z: 0}
+    second:
+      m_TileIndex: 14
+      m_TileSpriteIndex: 14
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -2, z: 0}
+    second:
+      m_TileIndex: 15
+      m_TileSpriteIndex: 15
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -2, z: 0}
+    second:
+      m_TileIndex: 16
+      m_TileSpriteIndex: 16
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -2, z: 0}
+    second:
+      m_TileIndex: 17
+      m_TileSpriteIndex: 17
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -2, z: 0}
+    second:
+      m_TileIndex: 18
+      m_TileSpriteIndex: 18
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -2, z: 0}
+    second:
+      m_TileIndex: 19
+      m_TileSpriteIndex: 19
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -2, z: 0}
+    second:
+      m_TileIndex: 20
+      m_TileSpriteIndex: 20
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: -1, z: 0}
+    second:
+      m_TileIndex: 7
+      m_TileSpriteIndex: 7
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: -1, z: 0}
+    second:
+      m_TileIndex: 8
+      m_TileSpriteIndex: 8
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: -1, z: 0}
+    second:
+      m_TileIndex: 9
+      m_TileSpriteIndex: 9
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: -1, z: 0}
+    second:
+      m_TileIndex: 10
+      m_TileSpriteIndex: 10
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: -1, z: 0}
+    second:
+      m_TileIndex: 11
+      m_TileSpriteIndex: 11
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: -1, z: 0}
+    second:
+      m_TileIndex: 12
+      m_TileSpriteIndex: 12
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: -1, z: 0}
+    second:
+      m_TileIndex: 13
+      m_TileSpriteIndex: 13
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: -1, y: 0, z: 0}
+    second:
+      m_TileIndex: 0
+      m_TileSpriteIndex: 0
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 0, y: 0, z: 0}
+    second:
+      m_TileIndex: 1
+      m_TileSpriteIndex: 1
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 1, y: 0, z: 0}
+    second:
+      m_TileIndex: 2
+      m_TileSpriteIndex: 2
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 2, y: 0, z: 0}
+    second:
+      m_TileIndex: 3
+      m_TileSpriteIndex: 3
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 3, y: 0, z: 0}
+    second:
+      m_TileIndex: 4
+      m_TileSpriteIndex: 4
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 4, y: 0, z: 0}
+    second:
+      m_TileIndex: 5
+      m_TileSpriteIndex: 5
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  - first: {x: 5, y: 0, z: 0}
+    second:
+      m_TileIndex: 6
+      m_TileSpriteIndex: 6
+      m_TileMatrixIndex: 0
+      m_TileColorIndex: 0
+      m_ObjectToInstantiate: {fileID: 0}
+      m_TileFlags: 1
+      m_ColliderType: 1
+  m_AnimatedTiles: {}
+  m_TileAssetArray:
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 667edac0c86cd7041ad41b91ee8b9ade, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: b51b4ab3df234804d8a2e2516ff34c97, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 9e3efe6227e546844b9c2b46589e24e6, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: f14df4f591394954188a185fe4b20d07, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 430b5c7d554b8494286044e0e6d46d5a, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: a7958ea011ebd874785c871049c5686a, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 0ad150c34736bf94fb8601fc94008f0b, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 5b328b15bd3e3b544be1261c87465d57, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: be48d66c967b0714b9635d4b32f88d7d, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: e9d032764fa4433458c6a64d64995cb9, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: be9537cf7bafd0b42b1c0ca8af1920c2, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 001382d02ed25cb4c8eb7dc7a53b36e5, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 3200477f9e4824f4db91b739891f51ef, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: e48d1ac8d862d4b41b09aacfae304d6e, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 0288c9ea7a8195d42b0ceac1f8fc46ea, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 2dd2c9ad1fc60bd4bb8b1abece62ee87, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 48755891a9c18cd4682cc826cde7abed, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 1f8293163964a164c9380fc78d7949ed, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 0a560b2730802794bb411b5cc6f4b733, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 6e339d0ed9db0a440bad4d3fa6ed4c7b, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: f93b94d70e9edc841a2f91d115dc39f9, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 8b3a6d7906cffec47b445e25e680acaf, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 479aa72f0fc19c7409215d122550443f, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 6169383bf3e1d794bb86dbc70f16b91b, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 2088d42f75d295f4883e76d5bf5dd0a1, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: ab85a582e1c99c24d8b0d057e4609d4a, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 66af5995e65ce4d41b4fcd436e66af76, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 42a934796aa2fd844af63e82f45fbafb, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 316dbafe2b147704784432ea15a700a3, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: a18243fbf305de846a4ee437cc05477f, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 8d4973baa43aece46b894d92bb516b9b, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: c2b1ba894439f774193d0b1682be7569, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 4aa3b3285c6a6d84a9efcc7af6aec17e, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 8915267f4fee6f647bbfe77f1b94fb70, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: d133091c82502e34a98957df08617d2a, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: b1b63463cac1fab48aa45a0c517e6552, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 7141934703a36b144a1aa8f0f31a55a7, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 7e32ee33bbeeea44ab12fc7f6efa0188, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: bfe1d044851deb747aa0c65a22d7b7cb, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 6b2cccc3d6283984589a7c0e8ee06cf1, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 10468bc33db61834eaaeb6c259e19082, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 29ed76ee8f63b2b488d2c8260c44dc52, type: 2}
+  - m_RefCount: 1
+    m_Data: {fileID: 11400000, guid: 3402d33aed9f27c44b0c480813973a06, type: 2}
+  m_TileSpriteArray:
+  - m_RefCount: 1
+    m_Data: {fileID: 21300000, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300002, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300004, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300006, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300008, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300010, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300012, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300014, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300016, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300018, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300020, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300022, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300024, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300026, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300028, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300030, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300032, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300034, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300036, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300038, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300040, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300042, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300044, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300046, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300048, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300050, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300052, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300054, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300056, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300058, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300060, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300062, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300064, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300066, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300068, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300070, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300072, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300074, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300076, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300078, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300080, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300082, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  - m_RefCount: 1
+    m_Data: {fileID: 21300084, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_TileMatrixArray:
+  - m_RefCount: 43
+    m_Data:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_TileColorArray:
+  - m_RefCount: 43
+    m_Data: {r: 1, g: 1, b: 1, a: 1}
+  m_AnimationFrameRate: 1
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Origin: {x: -1, y: -6, z: 0}
+  m_Size: {x: 7, y: 7, z: 1}
+  m_TileAnchor: {x: 0.5, y: 0.5, z: 0}
+  m_TileOrientation: 0
+  m_TileOrientationMatrix:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+--- !u!483693784 &2446887533299158230
+TilemapRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1827504442082098836}
+  m_Enabled: 0
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_ChunkSize: {x: 32, y: 32, z: 32}
+  m_ChunkCullingBounds: {x: 0, y: 0, z: 0}
+  m_MaxChunkCount: 16
+  m_MaxFrameAge: 16
+  m_SortOrder: 0
+  m_Mode: 0
+  m_DetectChunkCullingBounds: 0
+  m_MaskInteraction: 0
+--- !u!1 &4281547029634537060
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1518790476528154306}
+  - component: {fileID: 6547904067293410503}
+  m_Layer: 31
+  m_Name: DreamlandTiles
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &1518790476528154306
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4281547029634537060}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 3139770656588206271}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!156049354 &6547904067293410503
+Grid:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4281547029634537060}
+  m_Enabled: 1
+  m_CellSize: {x: 1, y: 1, z: 0}
+  m_CellGap: {x: 0, y: 0, z: 0}
+  m_CellLayout: 0
+  m_CellSwizzle: 0
+--- !u!114 &114250641564105576
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12395, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: Palette Settings
+  m_EditorClassIdentifier: 
+  cellSizing: 0
diff --git a/Assets/Sprites/Environment/DreamlandTiles.prefab.meta b/Assets/Sprites/Environment/DreamlandTiles.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3cb4a658c05d134b2f8a7297c34e24c2f3eeff66
--- /dev/null
+++ b/Assets/Sprites/Environment/DreamlandTiles.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e8d4dd58e49e54f4ca14f84542a2afcc
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/clouds.png b/Assets/Sprites/Environment/clouds.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d3bf0f32f0158629736dad89d834fb5b30b1315
Binary files /dev/null and b/Assets/Sprites/Environment/clouds.png differ
diff --git a/Assets/Sprites/Environment/clouds.png.meta b/Assets/Sprites/Environment/clouds.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f0cf2fc6fc84c6fbb11006c385b52b2cf56a04fc
--- /dev/null
+++ b/Assets/Sprites/Environment/clouds.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f05ac313a4e8919488a2825b55b9b513
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: da296cab7fa66c6478368843423990bc
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/far-grounds.png b/Assets/Sprites/Environment/far-grounds.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0d02dc3fe3b4d893e655dbcb4d8562e8b48fe6f
Binary files /dev/null and b/Assets/Sprites/Environment/far-grounds.png differ
diff --git a/Assets/Sprites/Environment/far-grounds.png.meta b/Assets/Sprites/Environment/far-grounds.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..75d22e4fba1f87ad38e2fc24d7e54289a087832f
--- /dev/null
+++ b/Assets/Sprites/Environment/far-grounds.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 5c9c20367dc78104f9291c9563de9482
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f248a0b7ba085064ba258db8252687ce
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/sea.png b/Assets/Sprites/Environment/sea.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb2ceb00872ce48e1ce5ef89f57b0485a7a7d27f
Binary files /dev/null and b/Assets/Sprites/Environment/sea.png differ
diff --git a/Assets/Sprites/Environment/sea.png.meta b/Assets/Sprites/Environment/sea.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..15ce89f022c8cd542094be4fccde487b5ed38a38
--- /dev/null
+++ b/Assets/Sprites/Environment/sea.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d6cbe36d82b4eb64697e085a97f55244
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a25e89d13beffbb448a271699a6a4121
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/sky.png b/Assets/Sprites/Environment/sky.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb73308ee8c12d5338685db4fcf48f59110385f1
Binary files /dev/null and b/Assets/Sprites/Environment/sky.png differ
diff --git a/Assets/Sprites/Environment/sky.png.meta b/Assets/Sprites/Environment/sky.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..aca3ba657f42491eef4f8edd80e765955828e06a
--- /dev/null
+++ b/Assets/Sprites/Environment/sky.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d16707d14e0b5884b9c736d2dbfa9de9
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 3982da8fa569c45489a8266f46ad55ce
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset.png b/Assets/Sprites/Environment/tileset.png
new file mode 100644
index 0000000000000000000000000000000000000000..3405b65692f6dafacd5b07249d21450a4c4f997f
Binary files /dev/null and b/Assets/Sprites/Environment/tileset.png differ
diff --git a/Assets/Sprites/Environment/tileset.png.meta b/Assets/Sprites/Environment/tileset.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..84dcc247ed7fbb0ecfb81c4457c8786c8fe71e69
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset.png.meta
@@ -0,0 +1,1026 @@
+fileFormatVersion: 2
+guid: bec366c396bdcb94db53194db2fbfc3f
+TextureImporter:
+  fileIDToRecycleName:
+    21300000: world_tileset
+    21300002: tileset_1
+    21300004: tileset_2
+    21300006: tileset_3
+    21300008: tileset_4
+    21300010: tileset_5
+    21300012: tileset_6
+    21300014: tileset_7
+    21300016: tileset_8
+    21300018: tileset_9
+    21300020: tileset_10
+    21300022: tileset_11
+    21300024: tileset_12
+    21300026: tileset_13
+    21300028: tileset_14
+    21300030: tileset_15
+    21300032: tileset_16
+    21300034: tileset_17
+    21300036: tileset_18
+    21300038: tileset_19
+    21300040: tileset_20
+    21300042: tileset_21
+    21300044: tileset_22
+    21300046: tileset_23
+    21300048: tileset_24
+    21300050: tileset_25
+    21300052: tileset_26
+    21300054: tileset_27
+    21300056: tileset_28
+    21300058: tileset_29
+    21300060: tileset_30
+    21300062: tileset_31
+    21300064: tileset_32
+    21300066: tileset_33
+    21300068: tileset_34
+    21300070: tileset_35
+    21300072: tileset_36
+    21300074: tileset_37
+    21300076: tileset_38
+    21300078: tileset_39
+    21300080: tileset_40
+    21300082: tileset_41
+    21300084: tileset_42
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 2
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 47
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: 0
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 1
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 1
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites:
+    - serializedVersion: 2
+      name: world_tileset
+      rect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 16
+        height: 320
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 50908d5ee12a8484187c615f5e41e42a
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_1
+      rect:
+        serializedVersion: 2
+        x: 41
+        y: 220
+        width: 98
+        height: 76
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 89274a58e8ced1149a396e91279d5f72
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_2
+      rect:
+        serializedVersion: 2
+        x: 191
+        y: 160
+        width: 123
+        height: 114
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 86021bdde6692344788d269acc263a62
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_3
+      rect:
+        serializedVersion: 2
+        x: 325
+        y: 180
+        width: 59
+        height: 97
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 5ae090b54aa694a4ba28b97bda929cf2
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_4
+      rect:
+        serializedVersion: 2
+        x: 400
+        y: 181
+        width: 16
+        height: 96
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 547ed994b4d6ec84a932f776eae655e4
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_5
+      rect:
+        serializedVersion: 2
+        x: 432
+        y: 180
+        width: 59
+        height: 97
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: e2505e4b98a78334283aca81fa628a0a
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_6
+      rect:
+        serializedVersion: 2
+        x: 537
+        y: 232
+        width: 32
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: caed7e75be1360c448fc130db4c4fa09
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_7
+      rect:
+        serializedVersion: 2
+        x: 601
+        y: 232
+        width: 48
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 9439cf4becb3f9747a744361cc8b6d3a
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_8
+      rect:
+        serializedVersion: 2
+        x: 688
+        y: 224
+        width: 48
+        height: 48
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 7f96101a2c8351040bd932b87a176b13
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_9
+      rect:
+        serializedVersion: 2
+        x: 755
+        y: 240
+        width: 29
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: aa6f28071e6f3cd4aa861f7dc430804b
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_10
+      rect:
+        serializedVersion: 2
+        x: 832
+        y: 240
+        width: 29
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 0a8889a0c5edbda46800312144f3e5ed
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_11
+      rect:
+        serializedVersion: 2
+        x: 48
+        y: 160
+        width: 48
+        height: 39
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: b35e24ef52e33124aa8e3ba8be9741e4
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_12
+      rect:
+        serializedVersion: 2
+        x: 144
+        y: 160
+        width: 32
+        height: 55
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 38974e718bec387459cfd094a0f5d8a8
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_13
+      rect:
+        serializedVersion: 2
+        x: 543
+        y: 176
+        width: 64
+        height: 40
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 12926cea07445d6488f1d7b039efd118
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_14
+      rect:
+        serializedVersion: 2
+        x: 672
+        y: 192
+        width: 16
+        height: 16
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 4d83e7e93609c6e4e8f535c781e58593
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_15
+      rect:
+        serializedVersion: 2
+        x: 704
+        y: 176
+        width: 32
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: e66f3ac1b648cd6418b7110be79ccf86
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_16
+      rect:
+        serializedVersion: 2
+        x: 768
+        y: 192
+        width: 32
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: ef76f7ca78006d94eae50fd0a1956efb
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_17
+      rect:
+        serializedVersion: 2
+        x: 816
+        y: 192
+        width: 32
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 8e5ec7093063dae4f9e23157af24dbef
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_18
+      rect:
+        serializedVersion: 2
+        x: 432
+        y: 112
+        width: 32
+        height: 42
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 74b904829f3d180439cf2745b30cbaa2
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_19
+      rect:
+        serializedVersion: 2
+        x: 740
+        y: 144
+        width: 44
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 8086d20c82b997b4cb8cbb743e37463d
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_20
+      rect:
+        serializedVersion: 2
+        x: 848
+        y: 144
+        width: 44
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 2d136d0e12f42214e9611dc6aa6cd989
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_21
+      rect:
+        serializedVersion: 2
+        x: 36
+        y: 32
+        width: 92
+        height: 111
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: ab8826e7933288c429f32ed209afc0b7
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_22
+      rect:
+        serializedVersion: 2
+        x: 144
+        y: 96
+        width: 32
+        height: 41
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 2e8bdcf943d62d34b94756a433311bb7
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_23
+      rect:
+        serializedVersion: 2
+        x: 192
+        y: 96
+        width: 48
+        height: 38
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: a9a18f14aca604946ad75cc4d8583ebc
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_24
+      rect:
+        serializedVersion: 2
+        x: 256
+        y: 96
+        width: 32
+        height: 44
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 00a6b2b0b59169945bcec58b56560899
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_25
+      rect:
+        serializedVersion: 2
+        x: 304
+        y: 112
+        width: 32
+        height: 22
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 79f0a31120ca52c4f9d8325e3d309887
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_26
+      rect:
+        serializedVersion: 2
+        x: 352
+        y: 112
+        width: 16
+        height: 25
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: dbf6d0d4f165ea14583cfc62bf7c350b
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_27
+      rect:
+        serializedVersion: 2
+        x: 384
+        y: 112
+        width: 32
+        height: 21
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: a1aa13473500cb346a2ce8cbeae3fb57
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_28
+      rect:
+        serializedVersion: 2
+        x: 480
+        y: 112
+        width: 16
+        height: 22
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 50f3972d49bfdb745bfb1a1dc054ef69
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_29
+      rect:
+        serializedVersion: 2
+        x: 512
+        y: 48
+        width: 44
+        height: 86
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 4f00a99f0d785ad4d84011f676a8da47
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_30
+      rect:
+        serializedVersion: 2
+        x: 583
+        y: 102
+        width: 41
+        height: 30
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 58f586fd49a93ca41842708caf319197
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_31
+      rect:
+        serializedVersion: 2
+        x: 640
+        y: 102
+        width: 32
+        height: 31
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 7362c7adc7f1de548b2bdd4af4f4aff5
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_32
+      rect:
+        serializedVersion: 2
+        x: 688
+        y: 102
+        width: 41
+        height: 30
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 184bdb69b9c266a42b6afe36f77453bf
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_33
+      rect:
+        serializedVersion: 2
+        x: 752
+        y: 16
+        width: 96
+        height: 112
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 46dba282a57000c46b162588c2efcc6a
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_34
+      rect:
+        serializedVersion: 2
+        x: 144
+        y: 48
+        width: 32
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 1e1e00de389f9564186085beb5e23f39
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_35
+      rect:
+        serializedVersion: 2
+        x: 192
+        y: 16
+        width: 32
+        height: 64
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: a35b8dc36a6a8234e8352c597381ce00
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_36
+      rect:
+        serializedVersion: 2
+        x: 240
+        y: 46
+        width: 64
+        height: 32
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: ad668b28ca83c1d47b2872e7129e3f79
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_37
+      rect:
+        serializedVersion: 2
+        x: 320
+        y: 48
+        width: 32
+        height: 36
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: a05dd346214a77746a575ede5e441c0d
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_38
+      rect:
+        serializedVersion: 2
+        x: 368
+        y: 48
+        width: 32
+        height: 40
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: f27b909ebecbf364a81683a029865aa0
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_39
+      rect:
+        serializedVersion: 2
+        x: 416
+        y: 48
+        width: 32
+        height: 36
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 63d832f4580a8e0498b6ccc44fcb4a6b
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_40
+      rect:
+        serializedVersion: 2
+        x: 464
+        y: 32
+        width: 32
+        height: 45
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 0b6d07c8c64c3ec4e8789527f0ed9921
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_41
+      rect:
+        serializedVersion: 2
+        x: 576
+        y: 32
+        width: 64
+        height: 48
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 12c01d84b07a3e84497bf83587c96ea3
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    - serializedVersion: 2
+      name: tileset_42
+      rect:
+        serializedVersion: 2
+        x: 656
+        y: 32
+        width: 48
+        height: 48
+      alignment: 0
+      pivot: {x: 0.5, y: 0.5}
+      border: {x: 0, y: 0, z: 0, w: 0}
+      outline: []
+      physicsShape: []
+      tessellationDetail: 0
+      bones: []
+      spriteID: 0b38ca525c0b85e49880c1874edb61d9
+      vertices: []
+      indices: 
+      edges: []
+      weights: []
+    outline:
+    - - {x: -22, y: 56}
+      - {x: -22, y: 113}
+      - {x: -20, y: 113}
+      - {x: -20, y: 56}
+    - - {x: -428, y: -126}
+      - {x: -419, y: -24}
+      - {x: -331, y: -21}
+      - {x: -330, y: -135}
+    - - {x: -403, y: 73}
+      - {x: -424, y: 138}
+      - {x: -317, y: 138}
+      - {x: -344, y: 69}
+    - - {x: -422, y: 0}
+      - {x: -422, y: 39}
+      - {x: -361, y: 39}
+      - {x: -361, y: 0}
+    - - {x: -271, y: -66}
+      - {x: -271, y: -27}
+      - {x: -221, y: -27}
+      - {x: -221, y: -66}
+    - - {x: 138, y: 70}
+      - {x: 138, y: 106}
+      - {x: 190, y: 106}
+      - {x: 190, y: 70}
+    physicsShape: []
+    bones: []
+    spriteID: 76b4e9dc3eb0a2143b66ef13df644670
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_1.asset b/Assets/Sprites/Environment/tileset_1.asset
new file mode 100644
index 0000000000000000000000000000000000000000..eb3c3c8444cea862c6df610927f6f099e8a6e74f
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_1.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_1
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300002, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_1.asset.meta b/Assets/Sprites/Environment/tileset_1.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ae294529742fb2752213ec42249bed8f09a48820
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_1.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b51b4ab3df234804d8a2e2516ff34c97
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_10.asset b/Assets/Sprites/Environment/tileset_10.asset
new file mode 100644
index 0000000000000000000000000000000000000000..f60e4027fa0409c6d9b16aeb8cd2c93c7da58cf7
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_10.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_10
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300020, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_10.asset.meta b/Assets/Sprites/Environment/tileset_10.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..db0774fbeb1fca4068333837a9ec5cc01c88de6c
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_10.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be9537cf7bafd0b42b1c0ca8af1920c2
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_11.asset b/Assets/Sprites/Environment/tileset_11.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fb285b571e7c44caad08e7dc8d9603a42aafec78
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_11.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_11
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300022, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_11.asset.meta b/Assets/Sprites/Environment/tileset_11.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..66e616417614ccc572c7a95600667d48c4361259
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_11.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 001382d02ed25cb4c8eb7dc7a53b36e5
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_12.asset b/Assets/Sprites/Environment/tileset_12.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fa6ca0cdaea1187a1ad0a2ef5a955df9b02990a9
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_12.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_12
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300024, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_12.asset.meta b/Assets/Sprites/Environment/tileset_12.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e1f99120f3635305b9cab779a8d94986fae5e773
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_12.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3200477f9e4824f4db91b739891f51ef
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_13.asset b/Assets/Sprites/Environment/tileset_13.asset
new file mode 100644
index 0000000000000000000000000000000000000000..8a52755425f5f217508ddba1be16520d8921db98
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_13.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_13
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300026, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_13.asset.meta b/Assets/Sprites/Environment/tileset_13.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d71a010a73de4e06c1f17d422fa6e6aa42c82c3e
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_13.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e48d1ac8d862d4b41b09aacfae304d6e
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_14.asset b/Assets/Sprites/Environment/tileset_14.asset
new file mode 100644
index 0000000000000000000000000000000000000000..0d093e57e245de236dc1b8a7c9f6563f56de2415
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_14.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_14
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300028, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_14.asset.meta b/Assets/Sprites/Environment/tileset_14.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1b9d60e40b75f933f615083717031e2fd69c16bc
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_14.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0288c9ea7a8195d42b0ceac1f8fc46ea
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_15.asset b/Assets/Sprites/Environment/tileset_15.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b181656b2e49a9d127b13adcf5c0a50e0de2eedd
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_15.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_15
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300030, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_15.asset.meta b/Assets/Sprites/Environment/tileset_15.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ef038a0387729fcbae85d4b495908fa027eec31a
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_15.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2dd2c9ad1fc60bd4bb8b1abece62ee87
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_16.asset b/Assets/Sprites/Environment/tileset_16.asset
new file mode 100644
index 0000000000000000000000000000000000000000..1086b4dd7912e1cd9d3f4b81b43c58625d19497c
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_16.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_16
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300032, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_16.asset.meta b/Assets/Sprites/Environment/tileset_16.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..76bedeb4666549b019d786b0cd68b0fb6d5db426
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_16.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 48755891a9c18cd4682cc826cde7abed
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_17.asset b/Assets/Sprites/Environment/tileset_17.asset
new file mode 100644
index 0000000000000000000000000000000000000000..17467aab5c8796558f1d26859bc62faf62db78f3
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_17.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_17
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300034, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_17.asset.meta b/Assets/Sprites/Environment/tileset_17.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..79b3ca07798fd7359d179c53641f1d0ade8c9543
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_17.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1f8293163964a164c9380fc78d7949ed
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_18.asset b/Assets/Sprites/Environment/tileset_18.asset
new file mode 100644
index 0000000000000000000000000000000000000000..d18e199b4a2a5e1f07b691e28567c976aff1ae27
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_18.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_18
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300036, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_18.asset.meta b/Assets/Sprites/Environment/tileset_18.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bae7fc50ee97dacf135b13cef268b54c291090d1
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_18.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0a560b2730802794bb411b5cc6f4b733
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_19.asset b/Assets/Sprites/Environment/tileset_19.asset
new file mode 100644
index 0000000000000000000000000000000000000000..c8a59aeb334cddb9ae4231956a7a6a948f9fa616
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_19.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_19
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300038, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_19.asset.meta b/Assets/Sprites/Environment/tileset_19.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..688ef0e890203a4ab5102e0c131fbca316572192
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_19.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6e339d0ed9db0a440bad4d3fa6ed4c7b
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_2.asset b/Assets/Sprites/Environment/tileset_2.asset
new file mode 100644
index 0000000000000000000000000000000000000000..1d3333c9129724511312c5a0a0025705b93f9ba8
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_2.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_2
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300004, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_2.asset.meta b/Assets/Sprites/Environment/tileset_2.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..65cfba99492bd23e00755c246d278d6ba8fba18f
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_2.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9e3efe6227e546844b9c2b46589e24e6
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_20.asset b/Assets/Sprites/Environment/tileset_20.asset
new file mode 100644
index 0000000000000000000000000000000000000000..a0888ffb24c0c0d5baff187bee8d856d2282f0a6
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_20.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_20
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300040, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_20.asset.meta b/Assets/Sprites/Environment/tileset_20.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e3acf089ca456d6eb05dcf934ada06c08f5c9f87
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_20.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f93b94d70e9edc841a2f91d115dc39f9
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_21.asset b/Assets/Sprites/Environment/tileset_21.asset
new file mode 100644
index 0000000000000000000000000000000000000000..7d3877a563110fe6b39dbe15001d8c49f6896897
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_21.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_21
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300042, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_21.asset.meta b/Assets/Sprites/Environment/tileset_21.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7d9ca0e4263734d96af00f684622a90b0ee197e5
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_21.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b3a6d7906cffec47b445e25e680acaf
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_22.asset b/Assets/Sprites/Environment/tileset_22.asset
new file mode 100644
index 0000000000000000000000000000000000000000..2e9c35ec9cc678b375d90b5184e98edbfd876265
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_22.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_22
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300044, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_22.asset.meta b/Assets/Sprites/Environment/tileset_22.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1a74952e26aa57d43f5ff0bc0b8b081276045655
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_22.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 479aa72f0fc19c7409215d122550443f
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_23.asset b/Assets/Sprites/Environment/tileset_23.asset
new file mode 100644
index 0000000000000000000000000000000000000000..fef31b3747863e89244b88f0bcd5b6db8d296947
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_23.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_23
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300046, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_23.asset.meta b/Assets/Sprites/Environment/tileset_23.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b95f6eea87e73ae6b22de7a0a9a6ebc8dfd74d61
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_23.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6169383bf3e1d794bb86dbc70f16b91b
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_24.asset b/Assets/Sprites/Environment/tileset_24.asset
new file mode 100644
index 0000000000000000000000000000000000000000..a3d76bdb4f5b09ac6ac52c90634d98eee9bd35cc
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_24.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_24
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300048, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_24.asset.meta b/Assets/Sprites/Environment/tileset_24.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bde5861a6932ecd8659fd3738bdab8af91747a46
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_24.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2088d42f75d295f4883e76d5bf5dd0a1
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_25.asset b/Assets/Sprites/Environment/tileset_25.asset
new file mode 100644
index 0000000000000000000000000000000000000000..14447306de7870e722c8653ac1df1510520ab59f
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_25.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_25
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300050, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_25.asset.meta b/Assets/Sprites/Environment/tileset_25.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ef6d46c6151d1f5750919e3786b244d71a868a2e
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_25.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ab85a582e1c99c24d8b0d057e4609d4a
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_26.asset b/Assets/Sprites/Environment/tileset_26.asset
new file mode 100644
index 0000000000000000000000000000000000000000..849785a1f795ef99719223d346c2670950a5d26b
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_26.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_26
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300052, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_26.asset.meta b/Assets/Sprites/Environment/tileset_26.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93cf32239d020e67e504a8ef80103c98ba837089
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_26.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 66af5995e65ce4d41b4fcd436e66af76
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_27.asset b/Assets/Sprites/Environment/tileset_27.asset
new file mode 100644
index 0000000000000000000000000000000000000000..78e78f1b7becd6feda4e85e37932830230285622
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_27.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_27
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300054, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_27.asset.meta b/Assets/Sprites/Environment/tileset_27.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..73b707aade942d7793718747d41e57407c61e2da
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_27.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 42a934796aa2fd844af63e82f45fbafb
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_28.asset b/Assets/Sprites/Environment/tileset_28.asset
new file mode 100644
index 0000000000000000000000000000000000000000..4c951fb16b541ac56b1027c66dd25d17036dca73
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_28.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_28
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300056, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_28.asset.meta b/Assets/Sprites/Environment/tileset_28.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c6eb97d4f10806c4eef1f119dd8ff000809a88dc
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_28.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 316dbafe2b147704784432ea15a700a3
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_29.asset b/Assets/Sprites/Environment/tileset_29.asset
new file mode 100644
index 0000000000000000000000000000000000000000..4d129384c8814a6af3f9ef2916176198b3744a85
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_29.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_29
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300058, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_29.asset.meta b/Assets/Sprites/Environment/tileset_29.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a16d4429c599a28cdf940d599426312e62ac83b4
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_29.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a18243fbf305de846a4ee437cc05477f
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_3.asset b/Assets/Sprites/Environment/tileset_3.asset
new file mode 100644
index 0000000000000000000000000000000000000000..f1756d1c10edb366eb15094b9535f2a6f3a1f9f4
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_3.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_3
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300006, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_3.asset.meta b/Assets/Sprites/Environment/tileset_3.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..28a4942ef9122e6d0fe365c3e75f85b34a0a693b
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_3.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f14df4f591394954188a185fe4b20d07
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_30.asset b/Assets/Sprites/Environment/tileset_30.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b596784f27126e094427b2327fe980740cc80fa0
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_30.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_30
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300060, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_30.asset.meta b/Assets/Sprites/Environment/tileset_30.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..446f8dcf5aafb25ed0a30ab7143372bce78b854d
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_30.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8d4973baa43aece46b894d92bb516b9b
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_31.asset b/Assets/Sprites/Environment/tileset_31.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b949f15c8fff04e7171568a2b94578eefe4c134b
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_31.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_31
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300062, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_31.asset.meta b/Assets/Sprites/Environment/tileset_31.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..463754e712917dfe505a9f1c0527e909bb7d71ee
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_31.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c2b1ba894439f774193d0b1682be7569
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_32.asset b/Assets/Sprites/Environment/tileset_32.asset
new file mode 100644
index 0000000000000000000000000000000000000000..13fca1ef922e62b0f38a3a3dc22f553ab0d9c182
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_32.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_32
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300064, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_32.asset.meta b/Assets/Sprites/Environment/tileset_32.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f124782ac0058e131c6400cba94f9e97c80961c3
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_32.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4aa3b3285c6a6d84a9efcc7af6aec17e
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_33.asset b/Assets/Sprites/Environment/tileset_33.asset
new file mode 100644
index 0000000000000000000000000000000000000000..c4c8a0aba3e9eeb6942224b80d73906831635892
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_33.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_33
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300066, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_33.asset.meta b/Assets/Sprites/Environment/tileset_33.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3626c47947f913317b3a0d09a2c84c331cbf7b8c
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_33.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8915267f4fee6f647bbfe77f1b94fb70
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_34.asset b/Assets/Sprites/Environment/tileset_34.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b5e231b065f1c080ab3592ef88b55a486c8c0429
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_34.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_34
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300068, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_34.asset.meta b/Assets/Sprites/Environment/tileset_34.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1630427e8a7f638d2bfc5eb0c29997c4af539b34
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_34.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d133091c82502e34a98957df08617d2a
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_35.asset b/Assets/Sprites/Environment/tileset_35.asset
new file mode 100644
index 0000000000000000000000000000000000000000..acbcb53ccf6b9a4f4830566e4949c8cc51e2be22
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_35.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_35
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300070, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_35.asset.meta b/Assets/Sprites/Environment/tileset_35.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0efcce505731a8632984dac73a8308a7e7172e05
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_35.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b1b63463cac1fab48aa45a0c517e6552
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_36.asset b/Assets/Sprites/Environment/tileset_36.asset
new file mode 100644
index 0000000000000000000000000000000000000000..34b0ff3cbf3e22b2bec26ece0a2b2f5e50c13ddf
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_36.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_36
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300072, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_36.asset.meta b/Assets/Sprites/Environment/tileset_36.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..73f118b1fecbbc91dbdcfec1fcf8383a9993160b
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_36.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7141934703a36b144a1aa8f0f31a55a7
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_37.asset b/Assets/Sprites/Environment/tileset_37.asset
new file mode 100644
index 0000000000000000000000000000000000000000..f4375da2bd55ff0cf48c0284ca086f3249601514
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_37.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_37
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300074, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_37.asset.meta b/Assets/Sprites/Environment/tileset_37.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e40cfd4a82cc35b6fada9a5c30bf2adc625e36e6
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_37.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e32ee33bbeeea44ab12fc7f6efa0188
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_38.asset b/Assets/Sprites/Environment/tileset_38.asset
new file mode 100644
index 0000000000000000000000000000000000000000..529a0c95abb0be62b49a5afbe945d373952ef1fe
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_38.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_38
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300076, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_38.asset.meta b/Assets/Sprites/Environment/tileset_38.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c9b32f75281323dec8ab61116138f38cac921188
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_38.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bfe1d044851deb747aa0c65a22d7b7cb
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_39.asset b/Assets/Sprites/Environment/tileset_39.asset
new file mode 100644
index 0000000000000000000000000000000000000000..242cd52ccef0e80e87e21c79a0b1fb4f3d4ae359
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_39.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_39
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300078, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_39.asset.meta b/Assets/Sprites/Environment/tileset_39.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bcfe4001514e0620b4acf60a024f83c29f3abb78
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_39.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6b2cccc3d6283984589a7c0e8ee06cf1
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_4.asset b/Assets/Sprites/Environment/tileset_4.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ebf04de17fda00441d71e4bfbbb18763013ce501
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_4.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_4
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300008, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_4.asset.meta b/Assets/Sprites/Environment/tileset_4.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ae3b9e582413cf3a8297775f0195d10fc3eb98d7
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_4.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 430b5c7d554b8494286044e0e6d46d5a
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_40.asset b/Assets/Sprites/Environment/tileset_40.asset
new file mode 100644
index 0000000000000000000000000000000000000000..470b9cd5f43b1d0004e1a11f5b1e2b60e7dea132
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_40.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_40
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300080, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_40.asset.meta b/Assets/Sprites/Environment/tileset_40.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dbb8866000bfa4d0ea5fc3d9c200d1bb5e45073e
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_40.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 10468bc33db61834eaaeb6c259e19082
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_41.asset b/Assets/Sprites/Environment/tileset_41.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b87f96655f7eb8b839cf55e8bbfbb5767e54650b
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_41.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_41
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300082, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_41.asset.meta b/Assets/Sprites/Environment/tileset_41.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..25eac06ee0ff1315e2899fbbdbefe0a08bb08376
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_41.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 29ed76ee8f63b2b488d2c8260c44dc52
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_42.asset b/Assets/Sprites/Environment/tileset_42.asset
new file mode 100644
index 0000000000000000000000000000000000000000..79ff79d8f268cd539f08824b0d5a772cbeba7b75
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_42.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_42
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300084, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_42.asset.meta b/Assets/Sprites/Environment/tileset_42.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e9ff2ac06245bbc0c552ee6d5b39985f8653d7c8
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_42.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3402d33aed9f27c44b0c480813973a06
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_5.asset b/Assets/Sprites/Environment/tileset_5.asset
new file mode 100644
index 0000000000000000000000000000000000000000..c58126d92eef7cf32f6611b505ebd4618ab5debf
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_5.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_5
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300010, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_5.asset.meta b/Assets/Sprites/Environment/tileset_5.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..db950c5b3be1aa7ab06de926357a41549179f337
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_5.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a7958ea011ebd874785c871049c5686a
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_6.asset b/Assets/Sprites/Environment/tileset_6.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ed5acd323ea9414e8aaefc2f57ab75f53922daea
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_6.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_6
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300012, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_6.asset.meta b/Assets/Sprites/Environment/tileset_6.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..007951a884deb45c091ea128481f50bd49de39c3
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_6.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0ad150c34736bf94fb8601fc94008f0b
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_7.asset b/Assets/Sprites/Environment/tileset_7.asset
new file mode 100644
index 0000000000000000000000000000000000000000..4283f109b13cdfe0df103fc7168e37e5f1de0f27
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_7.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_7
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300014, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_7.asset.meta b/Assets/Sprites/Environment/tileset_7.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d8fc6ad2f1552d70c7c67fc5cba71f12c006ce88
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_7.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5b328b15bd3e3b544be1261c87465d57
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_8.asset b/Assets/Sprites/Environment/tileset_8.asset
new file mode 100644
index 0000000000000000000000000000000000000000..8a74bee18ec304306684260d103daf441f872c8d
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_8.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_8
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300016, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_8.asset.meta b/Assets/Sprites/Environment/tileset_8.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..80a99f4b64c243127ddfbb873e27d71a9b43113d
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_8.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: be48d66c967b0714b9635d4b32f88d7d
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/tileset_9.asset b/Assets/Sprites/Environment/tileset_9.asset
new file mode 100644
index 0000000000000000000000000000000000000000..f5282f4d2c68231ab79b5bcb6ffe5442068bfc27
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_9.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: tileset_9
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300018, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/tileset_9.asset.meta b/Assets/Sprites/Environment/tileset_9.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3559d030311315f03c0f639b7e53d2adcaa9faa9
--- /dev/null
+++ b/Assets/Sprites/Environment/tileset_9.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e9d032764fa4433458c6a64d64995cb9
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Environment/world_tileset.asset b/Assets/Sprites/Environment/world_tileset.asset
new file mode 100644
index 0000000000000000000000000000000000000000..6ed4d4d9a7d4db19ecf6773efd0ddc8bc30d4639
--- /dev/null
+++ b/Assets/Sprites/Environment/world_tileset.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 13312, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: world_tileset
+  m_EditorClassIdentifier: 
+  m_Sprite: {fileID: 21300000, guid: bec366c396bdcb94db53194db2fbfc3f, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Transform:
+    e00: 1
+    e01: 0
+    e02: 0
+    e03: 0
+    e10: 0
+    e11: 1
+    e12: 0
+    e13: 0
+    e20: 0
+    e21: 0
+    e22: 1
+    e23: 0
+    e30: 0
+    e31: 0
+    e32: 0
+    e33: 1
+  m_InstancedGameObject: {fileID: 0}
+  m_Flags: 1
+  m_ColliderType: 1
diff --git a/Assets/Sprites/Environment/world_tileset.asset.meta b/Assets/Sprites/Environment/world_tileset.asset.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d0ef7299ae5dce379afd3503d962e7259d1180b
--- /dev/null
+++ b/Assets/Sprites/Environment/world_tileset.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 667edac0c86cd7041ad41b91ee8b9ade
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police.meta b/Assets/Sprites/Police.meta
new file mode 100644
index 0000000000000000000000000000000000000000..24e22de80ca02771756692e60a737f3230c6af3f
--- /dev/null
+++ b/Assets/Sprites/Police.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bdf9dacb21a28ce469a968904c80f1b3
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack.meta b/Assets/Sprites/Police/attack.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9389ec6a64a8e0024a3ff3e02d87ca01a16c15da
--- /dev/null
+++ b/Assets/Sprites/Police/attack.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 69ab96fda5bd9544a89606daca971ca2
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9434b0a193460927814641565423df7e47162a3
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e1d88b0b616ad4bb963cfddd727e537575b8d825
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7f9e62135e44bac41b829b230473dd13
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c352b696fa99bc64c8ccecfe7d6bbd52
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c3c732121c8201aa7b675d40f656f140480d7df
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..229b52a39c48d3c1af3af26a79f455a4cc4e1e6c
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b3c6f6ddac6afaa48a878b0a8b4c3d1a
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e14a22bac8b7a344ead3ec9608e8ca3e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1a958ebb4300f745653bc69f4c8d39b3a42745f
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d4dec53c6b0a72c48dd975df96f9abf8217bd64b
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d7afef36096b81f418bea2f2d3261ac5
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0114b8ec22ce0f54daf3eccfaf10d06a
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..f091f6f12433689ab1179826ec244eb8570d583c
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..857b8b1943e311384b099d2446e18dcf7ddc8835
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b94eb138c7296bc4095b1c8a472718df
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 18ac6f97fa263de41958d8ff62d21fc4
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..97245c76b89ee1907b3b4a88dc4db803a402fa49
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4075c6497d662f6a58dd75965aa1e6fd15c8a958
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 1360e4708272e7849b47057fdec534e0
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: be7b74a37bf7a6349966ec714270cdf7
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..30eda1d31fd7080a3181ae8c40b19513cc130de1
Binary files /dev/null and b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png differ
diff --git a/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png.meta b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8d00c1156df672e2a23f58aee91eca3f77ef70e9
--- /dev/null
+++ b/Assets/Sprites/Police/attack/1_police_attack_Attack_000_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0ccda09206e352449ab23e73c5697ac0
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d841ff47f872022418d8ef7ac3b84a28
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1.meta b/Assets/Sprites/Police/attack1.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3853f9d4846567a824d4d44c51dc2fe4394877d4
--- /dev/null
+++ b/Assets/Sprites/Police/attack1.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e0991703f2d24f41996e1cce6db6a2e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8a96097a6553f6cc5f0a6d607c67fc36ad8663f
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dcaecf16daf9f2af4dd3305daaef5f52742071db
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: aa9dcaaab8c01ef4a94c37b06d3c2039
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: cf2886b706c57ea44ac672a2a3d656e3
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..77dd360a1e94fd0925a418fbc308781372b26907
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c377d345bc579d4d3fb57e295f92ff41d97679b8
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c7ce3cd873dbe3244b5ee01ecb73658f
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1ab035108ad30184f8f190c106e793f1
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..82f84d40288e5ac8bb5e448f799ed8fcb4be6690
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ede33bbde60cc858d2c1a829bb53416cf1eda9df
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d44480f900820d941aa64074555d6243
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 9d88970affa165a44a9a7f27ccf69e0b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..87192dd696641e57c937e7f8e36403ba6b109547
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3c9b71b2b4e0a76a247337f56073f065d2fe6107
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c81e82837b7f52f4e81a3d4f831e334b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 42f7f9169c020f74699babd33d861ffc
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8aff6b7a9b80ea6036d0414a4ce469bf2e2ea45
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..962f611305c1cfb29abbe9ca1dac2890129671bc
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: a55c097497b7f3843980f3733c7a5e64
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 83a79ba9f62e2ee408ff75fefc77fa69
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..e379e9ce4fc6603fc6f8fc96c2055d3ad166e5dd
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..88b325eb5fe66be4ab7020fcfe798b30c1fe7713
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 60484193e609a5249b8965a6da3e6de5
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 7f7773785c42efe49860eab6e6d02471
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f8ed75a221ac6b384be7d2fc5e94b7053dbd918
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7d2cc8cfd54e1bc89e9887987155a12e2deb11fe
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_006.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b1dfb2444315bc149b99779c55c61143
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d0be713b01f2fc443a22575dfd250b4a
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5630090c516d9e2a90a6100771431e5d4f236ba
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b6182cfc60c6904cd56f926626dc668f04b4ebd7
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_007.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 199bcd69ad57f634088dde2a47357275
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d4f649c2ae4bd1443a3f03700b7cf8be
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bde08fb268a2c07edf4d28cce985e2787047969
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..14284e1116f371fecedabd3abacf5f76e846dd5e
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_008.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: aae2662718c5ba447b61f4f79f2485aa
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: b8142c9c11ab61a49a47b1bdd7578688
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png
new file mode 100644
index 0000000000000000000000000000000000000000..8671991bb9e86eefbd1694347c76758d68d81c36
Binary files /dev/null and b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png differ
diff --git a/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png.meta b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..769d3ee2efacea9699510030fdc5951bdca63a4e
--- /dev/null
+++ b/Assets/Sprites/Police/attack1/1_police_attack_Attack1_009.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f028115ac8729e44d955113204947937
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5f29a63702e2dea439e6c23ddf21c9cc
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2.meta b/Assets/Sprites/Police/attack2.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d4b08b26d204964e661cdeb11cc85aa89d9efa01
--- /dev/null
+++ b/Assets/Sprites/Police/attack2.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bc3e4dee19c670e4bac09907f0bea90f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..59524baf0a74b53d490625fcc281c117f4ea6b1b
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f4a3c7efabbc0edc2ca1895b4f1356ddd1d45649
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 038424eca12b58c4bb60f4fe2ad7a5f6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: dec8e9fc64316cf418b71366a8c31ca5
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..42428a3aa5027256de736ecd6ff40d3c0d74a3b1
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3d3156d09b27b1f2691e63efc4af88aee0119289
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4d443ad1baea3ef4cbb286611f953ddd
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a5d75372c5cde1043ba4e8d7039cc202
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..a545c68ff0ad4bad3b2dd3680b4a89a20ce6e6a0
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..39c8efb87593f640b3c8c8d0487d3dee2326881e
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 51b9083dfe89c7045996906effa67f3e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1f7188bf236de004cad5fb1c16ff924b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..d758ed8770bdc7081ce47162bc8ffa93d87f7e26
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f964f89d3535b92a45e5cd755c434bbaf88a6cb1
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 60bf1c48322e96244ba0e70630b6534e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 20ce8257201fc5c438fe719d8b8c0f1d
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7de3451bddf67cd403e52e873fd4e1e0d485658
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b7443ce9434b5f73462fdc3e504b5e61c08186ed
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 8df48545d236f3b43b0eea6f0bb5829d
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0884e2a2cce5a484a88009b913396f54
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba94ac9bab503be6eec0cf38f9c0f935b38ed1a3
Binary files /dev/null and b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png differ
diff --git a/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png.meta b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..509d248920489ceaffad21e2c29a1ab19e811204
--- /dev/null
+++ b/Assets/Sprites/Police/attack2/1_police_attack_Attack2_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0559790a21ec74e43a1411651f46843e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: dc79c0162db14c149b84cb3fe31e3502
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3.meta b/Assets/Sprites/Police/attack3.meta
new file mode 100644
index 0000000000000000000000000000000000000000..310cd1d8a0b558e742e796432fe5854de57d9f3d
--- /dev/null
+++ b/Assets/Sprites/Police/attack3.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e8df51b00999fb349842d80a161a2a61
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ce456334d2bf74c0adb00d04deafb4cff9275ce
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8c53aebc2760d8928d76c79de99128f72bef88b3
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: afc8af15377e8664cb9dd19bdfd842eb
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: feac631ad3c88e0498f9c5c8ad7251ee
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..5ba9b29f8dd7aef4054ec0fedd6e0ad04bf0c274
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0138b5f321af3a169d8a6e6a9d93520d4e918e93
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ad48f910d88023649a1807c7bd027afa
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 6730d9fa12767ca4f843276611ad47c3
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..04415c4a344a9e36d8ff0607b708933631d209bb
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f3053b035a2cbe33c1a7c935eaa8662b94bdd33e
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 790f5bf0f45da7e4199c91ebe3b44359
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 280b5378a17be59438ff45411d3464c1
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b73bee4e873f85d7ff41457b2c6d84e6904d22c
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4066363abb2672e644add8d3733c73d686f27e33
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4169ada20330a0946b683d6581b4efdf
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f786e884950b6c647b19edc4ec6d32c1
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..4811d6e2d496d01664ee1826fe90af940fe8ca57
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a4cbb8500c0d4c4f6a11349641cba9fc530f8e15
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 663dc299359662f44b24715f5f793b4e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 38bc6c615f6e21b48bd1dcdd706d02fe
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d7e607aaed3f50b5531992efd83b4c61f3550bf
Binary files /dev/null and b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png differ
diff --git a/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png.meta b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..972a368b3edf9b764653f8342895ee31857579db
--- /dev/null
+++ b/Assets/Sprites/Police/attack3/1_police_attack_Attack3_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7fba5f72b28d2b649a53922858865139
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1db17f107f99015499686b749a8dcf84
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt.meta b/Assets/Sprites/Police/hurt.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f46c4f2301384f5981b2b3cb239f17dd63523237
--- /dev/null
+++ b/Assets/Sprites/Police/hurt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9b15bf7623656e349873d8564211ca16
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_000.png b/Assets/Sprites/Police/hurt/1_police_Hurt_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..3136ce6405893f2fbe2194bb27a51819b08345fa
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_000.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_000.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..55f20c39c25b211bcd989cbbad5f9b33c220d26d
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 1f19e8ef0e713c141937932ad4fb2237
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 786364e517ceeaf4b8f8335503e80431
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_001.png b/Assets/Sprites/Police/hurt/1_police_Hurt_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac1624962c1390951f4124f9069a8bac77e17fa1
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_001.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_001.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c9fd3b53514e81f7a10bcca943cc29713ba17325
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 6887b29fa3d5b8442bc6d7a79cefd461
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: ccd9b33708bf9ee43b8e548abddf65c4
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_002.png b/Assets/Sprites/Police/hurt/1_police_Hurt_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..44d4728cb575a96fb81726b5c2d68adb00b16877
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_002.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_002.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0c991f2ef5613e617668389947ae7b420f65409a
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 133cd0d0f9e5dbe48a4d7f770147f972
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 4d0ff8abdad521e42af6bd04c3509047
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_003.png b/Assets/Sprites/Police/hurt/1_police_Hurt_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e8ea265e792f9eae050dcaea7c32b303f722479
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_003.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_003.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..36b488dda37ec46b48a7e824196b92650dec1d77
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f50a8792a52724345b71943ee2ff52f8
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 62342f60e9ab52c478e4948580b66b1c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_004.png b/Assets/Sprites/Police/hurt/1_police_Hurt_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..e02a6c272a33cb8127a013783545565a27963bdc
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_004.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_004.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..730bdc6be87835d889c3e404edc30521686b950c
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4feab40945fe47c46ab90b2d36c9cbc3
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 10dee9d000b88294c92afc7497a78f62
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_005.png b/Assets/Sprites/Police/hurt/1_police_Hurt_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..28cb716381516226db4a776076819103c93fe87a
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_005.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_005.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0a1de23b2c703898b7a203eae30f42bf3f0bdf8d
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4674c0893b247844bb5933c9e7f2e04b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 36b2964871c38c44197c73a84daba632
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_006.png b/Assets/Sprites/Police/hurt/1_police_Hurt_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..553fafec5d99fb91d0f90e9752854dbc8314e820
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_006.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_006.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_006.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..621571b02ebc52ff52ccbf76eab4231074afd334
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_006.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0530209eb0ae4f44eae4bedbd7d26a1e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: ac0bcf0aaf7fe184d8c6f786f891e75b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_007.png b/Assets/Sprites/Police/hurt/1_police_Hurt_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..e668c57adbb916dcef11bbf19b8744a9831e9e8c
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_007.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_007.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_007.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c74f629689569e18372474e0690ca88be5a2593b
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_007.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: a11fdc28c124d1944810640a16d61019
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1f4a0404a7144814aa740a39cffbaf7d
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_008.png b/Assets/Sprites/Police/hurt/1_police_Hurt_008.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa4bcd4edba5a0fe5844aef5d230e1e1ba36ce15
Binary files /dev/null and b/Assets/Sprites/Police/hurt/1_police_Hurt_008.png differ
diff --git a/Assets/Sprites/Police/hurt/1_police_Hurt_008.png.meta b/Assets/Sprites/Police/hurt/1_police_Hurt_008.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4051b88ee89645974b84e5fe26c30f13640f60f7
--- /dev/null
+++ b/Assets/Sprites/Police/hurt/1_police_Hurt_008.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 045788648973c9841ac89a4bcfd25af4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 477f1d6f34d79cc4c88bf41407399f16
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle.meta b/Assets/Sprites/Police/idle.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9772755ed2835eaaf8bf5b01a2fd7f18dc075ec3
--- /dev/null
+++ b/Assets/Sprites/Police/idle.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0ed5fa68ea41b754f916aecb437d4a7e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_000.controller b/Assets/Sprites/Police/idle/1_police_Idle_000.controller
new file mode 100644
index 0000000000000000000000000000000000000000..fd351d23e685fda15178de2ebc176868ef20dcc6
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_000.controller
@@ -0,0 +1,72 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!91 &9100000
+AnimatorController:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: 1_police_Idle_000
+  serializedVersion: 5
+  m_AnimatorParameters: []
+  m_AnimatorLayers:
+  - serializedVersion: 5
+    m_Name: Base Layer
+    m_StateMachine: {fileID: 1107316451264672126}
+    m_Mask: {fileID: 0}
+    m_Motions: []
+    m_Behaviours: []
+    m_BlendingMode: 0
+    m_SyncedLayerIndex: -1
+    m_DefaultWeight: 0
+    m_IKPass: 0
+    m_SyncedLayerAffectsTiming: 0
+    m_Controller: {fileID: 9100000}
+--- !u!1102 &1102543185506095052
+AnimatorState:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: PoliceIdle
+  m_Speed: 1
+  m_CycleOffset: 0
+  m_Transitions: []
+  m_StateMachineBehaviours: []
+  m_Position: {x: 50, y: 50, z: 0}
+  m_IKOnFeet: 0
+  m_WriteDefaultValues: 1
+  m_Mirror: 0
+  m_SpeedParameterActive: 0
+  m_MirrorParameterActive: 0
+  m_CycleOffsetParameterActive: 0
+  m_TimeParameterActive: 0
+  m_Motion: {fileID: 7400000, guid: 66f7ba1f26d6dda41b40045ef3fd6d4e, type: 2}
+  m_Tag: 
+  m_SpeedParameter: 
+  m_MirrorParameter: 
+  m_CycleOffsetParameter: 
+  m_TimeParameter: 
+--- !u!1107 &1107316451264672126
+AnimatorStateMachine:
+  serializedVersion: 5
+  m_ObjectHideFlags: 1
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Base Layer
+  m_ChildStates:
+  - serializedVersion: 1
+    m_State: {fileID: 1102543185506095052}
+    m_Position: {x: 200, y: 0, z: 0}
+  m_ChildStateMachines: []
+  m_AnyStateTransitions: []
+  m_EntryTransitions: []
+  m_StateMachineTransitions: {}
+  m_StateMachineBehaviours: []
+  m_AnyStatePosition: {x: 50, y: 20, z: 0}
+  m_EntryPosition: {x: 50, y: 120, z: 0}
+  m_ExitPosition: {x: 800, y: 120, z: 0}
+  m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+  m_DefaultState: {fileID: 1102543185506095052}
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_000.controller.meta b/Assets/Sprites/Police/idle/1_police_Idle_000.controller.meta
new file mode 100644
index 0000000000000000000000000000000000000000..986cb0b2567d4847697f94ba05c922206cfc1d06
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_000.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: da7af2b41531e4149991d337de2c7e93
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 9100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_000.png b/Assets/Sprites/Police/idle/1_police_Idle_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..994a739e25141cd8968a778f8a3010759bd3f82c
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_000.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_000.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..106ca8fb750a24d7bdca005a429d291645fac093
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 14ea57a7127c2344d973fb9befde6b12
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d55ad795658775748968e67405193be5
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_001.png b/Assets/Sprites/Police/idle/1_police_Idle_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..55af5475f0ea1cf85c18afd017821cd34a03733e
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_001.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_001.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e524376e4b3335c5e4524dab2cc0fe50ab279e52
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c86ce4cf34c23ed40b5d66031ee7e7c6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a8e39e661c177ff4bbd57ff502871fb5
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_002.png b/Assets/Sprites/Police/idle/1_police_Idle_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b4927a81e0ec8c8efd8f5c2244acbfca9bc9f17
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_002.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_002.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0710ee28c67231bd384c48471ffa9e249be0de57
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 45936f542d06a4746bef881a1be61694
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: edd111551bad47a44b3deef594bfacf6
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_003.png b/Assets/Sprites/Police/idle/1_police_Idle_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..885e6ca0f381120cfa2fed3829995a35f2d5b95e
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_003.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_003.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a026f846e0ba8147fd9f500eeb2bc3f4f9977a93
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 592d3538a9273584fbb80beb46e9ed99
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2d052004d01e29b418b10b30a3c30d6c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_004.png b/Assets/Sprites/Police/idle/1_police_Idle_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc068d0b08f70f87a5316de14f76f230e5549556
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_004.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_004.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e0b3906d3eb7ac6648e3ea954553782a8eb55774
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 3e987bdaa72532c449a3078bbd6d16f8
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 360c0917b8b43a24482cafeb0c7756e7
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_005.png b/Assets/Sprites/Police/idle/1_police_Idle_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..384746df931b4c37985d130052ccad05e039f7d1
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_005.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_005.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e59a0fd57eb2b95cf0918f8e61a936334abd5223
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d200af1436d786d4f884fcab62412f27
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f971b26d3c5337c448c5151058b750f2
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_006.png b/Assets/Sprites/Police/idle/1_police_Idle_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..138a2ec9fde3b6c590c098406014f518072ec9d5
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_006.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_006.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_006.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5084582aa63fa9f9dde03ee421af1520fe7c34e0
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_006.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 57b225205d5c95f4788249d0e4385ef2
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 92c3897dafa64e5438a288e409d1641c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_007.png b/Assets/Sprites/Police/idle/1_police_Idle_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b8753b155b725856bfbe04668703c3e5e52af78
Binary files /dev/null and b/Assets/Sprites/Police/idle/1_police_Idle_007.png differ
diff --git a/Assets/Sprites/Police/idle/1_police_Idle_007.png.meta b/Assets/Sprites/Police/idle/1_police_Idle_007.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cacab4a37b6d0763a22df859571ef7558061b21b
--- /dev/null
+++ b/Assets/Sprites/Police/idle/1_police_Idle_007.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 90cc90090cd34ed41bd8714fc29c0e26
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 418ce2f126799b94aade0215171da852
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump.meta b/Assets/Sprites/Police/jump.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7edf4b64d205bb2ba5896df4244c4a99306201f3
--- /dev/null
+++ b/Assets/Sprites/Police/jump.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bd4da6efdd991254eb2f5b7c617878ee
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_000.png b/Assets/Sprites/Police/jump/1_police_Jump_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..65ad98d26bdcb9558a2ea5a3855bb29f305ecb6f
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_000.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_000.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..99e287ff84c0d6d1636be45fa2d5106d685a404f
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: fa469c8648c10b14bb67833db45f245f
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 294cd1c80b8bca34f87249152116a173
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_001.png b/Assets/Sprites/Police/jump/1_police_Jump_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..533f3ec3dccf14fdf1c1d5a4026d31fb6c1704fe
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_001.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_001.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4406484def555f8cbbaa3f71e1c27963eb5a5985
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 8a0ddab77e8dfa94ebac6100b1cc8dbc
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: b6645a22c3dc5af419a6f444985faab9
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_002.png b/Assets/Sprites/Police/jump/1_police_Jump_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5bd4747245ffdbcfe37d79b3d87ec68353ebf9c
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_002.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_002.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1f77bab9f2a8fd58226a448d35b92743f6ad1f13
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 223080c568c0efc498707c17e5a79972
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d112cc32ddeb356449ea2f3254783a5c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_003.png b/Assets/Sprites/Police/jump/1_police_Jump_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..86972f41ec45d37fc5e1efdb1b2f690036b951cc
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_003.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_003.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f2bc9804bd48655039143bc6db824acd9f82dddf
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0fd9a3df0a4d01a4aad043ea19bfdb48
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 8f2fc3f82fe4ea34b837083dcfaf78dd
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_004.png b/Assets/Sprites/Police/jump/1_police_Jump_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfef2e8279a8deda123beb0a7e904f8d2cf2ce9c
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_004.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_004.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..28c7bc94ccbb5d2f69d5ce52763f0fee1b02d6ee
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d563741c8209e204c842895413aded74
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 670faa9f79564734cb07b9514ba652df
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_005.png b/Assets/Sprites/Police/jump/1_police_Jump_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8722c627892e0e48f1d797ee679b4a101f8d8e2
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_005.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_005.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a45fb8b8dc3f1c1074c66496c0dbeaee8b25c8ff
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c232a0216066df34cb5ee1b14c5ef2a2
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 01e8107639cbade4f9e34129dcd48987
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_006.png b/Assets/Sprites/Police/jump/1_police_Jump_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..c5c0799049da0c4dec96ccc23c88dfe18693e9bb
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_006.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_006.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_006.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1d16105952c7461069a79771232615023431f30e
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_006.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ccf4fbf70ed379f4d95d4818aa3154c7
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e8d1a05f478b6934681f4207ea0bc092
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_007.png b/Assets/Sprites/Police/jump/1_police_Jump_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cf2d33d6be791abfedcf32147f4637423883300
Binary files /dev/null and b/Assets/Sprites/Police/jump/1_police_Jump_007.png differ
diff --git a/Assets/Sprites/Police/jump/1_police_Jump_007.png.meta b/Assets/Sprites/Police/jump/1_police_Jump_007.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e54cca26b382e37acffb1e7143bb2270b31387a3
--- /dev/null
+++ b/Assets/Sprites/Police/jump/1_police_Jump_007.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 8e319388af59e2d4e914ce868be79e8e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 4a7b9567ea7c9e5468ba46c693d66d38
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run.meta b/Assets/Sprites/Police/run.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bc25c20796b9378f83f45c2bed891f1dca45e9e1
--- /dev/null
+++ b/Assets/Sprites/Police/run.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 00a3942a8c372b5448fc58f1a5f20aac
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_000.png b/Assets/Sprites/Police/run/1_police_Run_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..64ad4be15facc4ee403c3b098e70927f6e361178
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_000.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_000.png.meta b/Assets/Sprites/Police/run/1_police_Run_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..122ae0794af27ac0d5ae10cdb22b2296677301c6
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c20299d491dac3843957e48b30f6a168
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a171ba053235f7348a064578227fe5ea
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_001.png b/Assets/Sprites/Police/run/1_police_Run_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..463ccf31a0f0d0ac52218f7e51629cae3f547680
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_001.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_001.png.meta b/Assets/Sprites/Police/run/1_police_Run_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d38b3c200200d31ebdbbb024ee52706e00fb159e
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 100d9ab85cbc1f84bbf38231d2b4d767
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fece732ce8ba617438c57e025f0ff35b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_002.png b/Assets/Sprites/Police/run/1_police_Run_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..a13f8980e8c51284c8ef9be1b1577eec1e4f65da
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_002.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_002.png.meta b/Assets/Sprites/Police/run/1_police_Run_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..be7cd4bd9f9f45f0543c13291e3d6ab8bb5e7abf
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 843020839a7cf934bbd8f30d5aaa099d
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 4e76cd4d6ed71a24b904522936d1eca8
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_003.png b/Assets/Sprites/Police/run/1_police_Run_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..c02376a1a1273ac1ce013417b5226f8805edda4d
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_003.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_003.png.meta b/Assets/Sprites/Police/run/1_police_Run_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f61743255451612fcbf89ab852c7b3812845fb87
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 636d1568e709f224db16dfc9fbe7b466
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2334af1ad4783c14c8ad01d113969312
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_004.png b/Assets/Sprites/Police/run/1_police_Run_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..d505070ffb719b0a656055889054adcf2e8935c0
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_004.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_004.png.meta b/Assets/Sprites/Police/run/1_police_Run_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..56c273a790c037c2f9ab11ed88acadc7dae496f7
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b046bc046be987c459a7c7ec08590836
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: ad4f196ce6095a848b6c82d736f7c66e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/run/1_police_Run_005.png b/Assets/Sprites/Police/run/1_police_Run_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..33bacaf01ce51a8d5594bd05eea7719e7ab157e7
Binary files /dev/null and b/Assets/Sprites/Police/run/1_police_Run_005.png differ
diff --git a/Assets/Sprites/Police/run/1_police_Run_005.png.meta b/Assets/Sprites/Police/run/1_police_Run_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eb82f741d32e84eafab0378f52707d0c3fc9e7f2
--- /dev/null
+++ b/Assets/Sprites/Police/run/1_police_Run_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0a97c0e85f2237345a6e237feec5bc37
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c9c5ff791bd5eaa4d9bcf9284633c125
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk.meta b/Assets/Sprites/Police/walk.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3541ea7a013646213e965e061a68397b8a94fdec
--- /dev/null
+++ b/Assets/Sprites/Police/walk.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 20b8f635926422b43a3f5775ac9adb0b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_000.png b/Assets/Sprites/Police/walk/1_police_Walk_000.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f560ed10eca10a819661d6d77efe276ddb5a875
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_000.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_000.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_000.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dc5bb64c1e8a8625b718fb21a642c3cb08075fb7
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_000.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 53f55179de74d574b8fa00fb7950c924
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a470b03afe5a70e46bb9765d8acd5306
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_001.png b/Assets/Sprites/Police/walk/1_police_Walk_001.png
new file mode 100644
index 0000000000000000000000000000000000000000..5cc69862229221268f16465adad1932b336a350c
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_001.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_001.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_001.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3e3fd5dd7ebe4b6667a539961389caa8c83963f3
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_001.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 54b9f4f056b83d2409dead4657b9270e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fe75faac65a41b64baa084fb01fd45d9
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_002.png b/Assets/Sprites/Police/walk/1_police_Walk_002.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1528f3714d86261e5b6b7c68b99914575d2d422
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_002.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_002.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_002.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cc71e26fde1be82d542bb9e5015bfeb3e4cd9214
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_002.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 284b30b43543abe4da8d5625aa37ff6b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0b44f432999d795418ffeb87f32d2ffc
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_003.png b/Assets/Sprites/Police/walk/1_police_Walk_003.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ad8d179c8bb628a6ca5a5048172d02c0b6e78cc
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_003.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_003.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_003.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..939e02e83ce5d22c8ac799866a160ca324f37e8b
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_003.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c6b217bd11a4aac4fad5d94d637cbd27
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 03b4181f97379e0478fa655b1a4172de
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_004.png b/Assets/Sprites/Police/walk/1_police_Walk_004.png
new file mode 100644
index 0000000000000000000000000000000000000000..372d05dd794d275042ae625a19e70d93f84581b8
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_004.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_004.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_004.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..44f64af5f5d6095e4a2c20a341ca83d8b55a1001
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_004.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ccf05e44e581645448f76c9885ad303b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 4d64494be77ea1741a500e75348d3747
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_005.png b/Assets/Sprites/Police/walk/1_police_Walk_005.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf48b46ac53bc2488f34fabc6990f3cfedca5143
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_005.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_005.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_005.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0e12dd1edd96dc70df12f6196f730c07541f8b92
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_005.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ccaa4a21cc66f704db378129926aeb64
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 693e6bc7f1b9ed24f9ad9831d017bd0c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_006.png b/Assets/Sprites/Police/walk/1_police_Walk_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c281b2630cdc42587942796ed939a6cf80e1dfc
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_006.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_006.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_006.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93b72d0bdef8a1ce317815f0b120995570b677f3
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_006.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 07d9c38a87d83e443886b576a1a20b58
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 6f4504699262130458d0ff31c7ed2a02
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_007.png b/Assets/Sprites/Police/walk/1_police_Walk_007.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa84b62b0d82d5c4e29eb10c5e4ec44c598ebdb4
Binary files /dev/null and b/Assets/Sprites/Police/walk/1_police_Walk_007.png differ
diff --git a/Assets/Sprites/Police/walk/1_police_Walk_007.png.meta b/Assets/Sprites/Police/walk/1_police_Walk_007.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4ffd2098c5acd7369b25a7b12446a9093470f4bf
--- /dev/null
+++ b/Assets/Sprites/Police/walk/1_police_Walk_007.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 439352284d5721f458621d976ccc0594
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 59ecd34fb46423b45bbe3415d9ed0f2b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie.meta b/Assets/Sprites/Zombie.meta
new file mode 100644
index 0000000000000000000000000000000000000000..06d7fafb6017192840e885ba2bde2b3b1419deee
--- /dev/null
+++ b/Assets/Sprites/Zombie.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e93ff1d31f60dad45bb1f74a599ebe34
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation.meta b/Assets/Sprites/Zombie/animation.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a58fd1bcd04c300e0fdbfbdcd44f8ddd54275738
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 414eaff990966d74bb7172887d164743
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack1.png b/Assets/Sprites/Zombie/animation/Attack1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c90d55aec9d52256697b25abc55155141744e6c
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack1.png.meta b/Assets/Sprites/Zombie/animation/Attack1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5bd405ddd708d60e35e590a0f66937bd12761a36
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e870dbea0da3c384cb0dcb99904389e2
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: bb49c47858f4f7b458b42251b2a81168
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack2.png b/Assets/Sprites/Zombie/animation/Attack2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d322e91cfaaf8c3072c08e2effa2a94ebb981571
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack2.png.meta b/Assets/Sprites/Zombie/animation/Attack2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0f4b2b896bc8e9c33e510711b72eb4d140bb477e
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: cada42fdc2e85784c9bec9d2ade99f08
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 29d4ef995e03b6f4280550634a245bce
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack3.png b/Assets/Sprites/Zombie/animation/Attack3.png
new file mode 100644
index 0000000000000000000000000000000000000000..53fec512152a6f4bc58cb5a7f7099848c6a6ff08
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack3.png.meta b/Assets/Sprites/Zombie/animation/Attack3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d62c5931e30793e81ee5b192612dad24ca0794c9
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 70f60d01cf6063d488cea9ee17a02d18
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2c0d51051b460694c8cb9b7c2c328469
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack4.png b/Assets/Sprites/Zombie/animation/Attack4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6752bfbec7f62e7960e7fedb7b2f97a24f897a62
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack4.png.meta b/Assets/Sprites/Zombie/animation/Attack4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2cd5aefb964796dbc22882e8e084327b18998435
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 74311c3ad825a8544a8c0e8656a3edb4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f9efaa47e1afd5044ba7d51b077a9295
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack5.png b/Assets/Sprites/Zombie/animation/Attack5.png
new file mode 100644
index 0000000000000000000000000000000000000000..48ba0c3ad0467da3b5f9c12bb683c99a441f0671
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack5.png.meta b/Assets/Sprites/Zombie/animation/Attack5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3916aece355f86ef6082e1f2bce244808f571621
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d4faf47cf9be3b444a0dfabe3131b22b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c2c530be5cf1ace4ab397c02053a4098
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Attack6.png b/Assets/Sprites/Zombie/animation/Attack6.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa1815b1deff1d87680db68c0511a1903725512a
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Attack6.png differ
diff --git a/Assets/Sprites/Zombie/animation/Attack6.png.meta b/Assets/Sprites/Zombie/animation/Attack6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b969d5c12d3e986246601cf4a73eb772668a565e
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Attack6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 5f110e9322a4b934e9b821e2fd41061d
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: bf4f503613a86ef4caa37283215e5e04
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead1.png b/Assets/Sprites/Zombie/animation/Dead1.png
new file mode 100644
index 0000000000000000000000000000000000000000..905ec353fa83a16af141a1ffb4a4118bd85528c5
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead1.png.meta b/Assets/Sprites/Zombie/animation/Dead1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..facc4c14dfc115c0871477454ec090e9b28c0dcd
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 81adcf7401f49804eb0b69d7c592e4f2
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a18ed9a31fe968045a19e5e81634d3c2
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead2.png b/Assets/Sprites/Zombie/animation/Dead2.png
new file mode 100644
index 0000000000000000000000000000000000000000..e035c91b1ab0a44c0d2e726a4178fad199485539
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead2.png.meta b/Assets/Sprites/Zombie/animation/Dead2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..86884397e6bbae702b6348e16cb71ed52f348d30
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: fb750bc39c1d1d94eac4f5add3e227a8
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1ff91543735e38e44834e059194dc072
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead3.png b/Assets/Sprites/Zombie/animation/Dead3.png
new file mode 100644
index 0000000000000000000000000000000000000000..fcc2aaaba27c6bd7fe04f330c18b6d6a6b5272fd
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead3.png.meta b/Assets/Sprites/Zombie/animation/Dead3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..304b7bddbae702d9bd0ad14f411d2d446da357a3
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 02c3e5cdb93d11c4f8b0f05d53e4257d
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c81704fbc02aba241a96b25eeedfd1e1
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead4.png b/Assets/Sprites/Zombie/animation/Dead4.png
new file mode 100644
index 0000000000000000000000000000000000000000..1425f772fd9b45e8b8d318e176919033f8f0547a
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead4.png.meta b/Assets/Sprites/Zombie/animation/Dead4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..97962039fc2d4ca231b4890459ba51c1d496304b
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b718fab7db531034d9722193ae056486
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0aab09fa840f0c54f86c5343985c1735
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead5.png b/Assets/Sprites/Zombie/animation/Dead5.png
new file mode 100644
index 0000000000000000000000000000000000000000..5df91e9f3cf5228b67f3bde20bae206fb3bbe080
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead5.png.meta b/Assets/Sprites/Zombie/animation/Dead5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a3be94251439ec0a5f9ecdb8bd6a57207ffb55f6
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 79ed1db6028c2de409380d4c123437a7
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 59bca34f5cb7e7b46aabbf90e8cf9263
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead6.png b/Assets/Sprites/Zombie/animation/Dead6.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e53fb1dca4dbdc850efe3ebe0ceb76855bb5c62
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead6.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead6.png.meta b/Assets/Sprites/Zombie/animation/Dead6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c346ddb201fd47aff30c02807947c32cda1a83b5
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ce6108d20abb59c4592721a1f858c26c
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 4efbcc87ff9407946a95a4ba2d0efd37
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead7.png b/Assets/Sprites/Zombie/animation/Dead7.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbe2f8f6e0486b1b18e4b86d0107c3fa4e7abf2f
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead7.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead7.png.meta b/Assets/Sprites/Zombie/animation/Dead7.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f41e8fb3dd3b979dec34f4b75d0eb3745b082fa8
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead7.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7304f2e9e60197e4799c9fa13c28ccd1
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2b0b68eda28eb3f41bbf1c60db8674fc
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Dead8.png b/Assets/Sprites/Zombie/animation/Dead8.png
new file mode 100644
index 0000000000000000000000000000000000000000..361a36223e5ccc078bb1bcd7b0d767541a63f763
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Dead8.png differ
diff --git a/Assets/Sprites/Zombie/animation/Dead8.png.meta b/Assets/Sprites/Zombie/animation/Dead8.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6f12320f604423fec81c31c644ac28de898fceae
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Dead8.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: b7914b9393ade4048a9e495eff52019c
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0dd983889cf26324099b74d1bb5cd87e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Hurt1.png b/Assets/Sprites/Zombie/animation/Hurt1.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6dfa885d5cc19505da38c9ab9b5f95b13310075
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Hurt1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Hurt1.png.meta b/Assets/Sprites/Zombie/animation/Hurt1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8e0b6f9e84220ee4d1f19ed520bb89d506008e8f
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Hurt1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 612dbbb3e3c5f24478365bd0ccf54213
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1e5c69d09b6c29447a277d4b5a89b3ee
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Hurt2.png b/Assets/Sprites/Zombie/animation/Hurt2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9253f65b04447cadfe80b2322e50e8869090aa5
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Hurt2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Hurt2.png.meta b/Assets/Sprites/Zombie/animation/Hurt2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..15b784b8504c5c7e921bc7182e12cd6a211d55af
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Hurt2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: deba9a10e109bfb4f8754d12eefa9fd4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e14df2e4a2827814a9b77b8104c75147
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Hurt3.png b/Assets/Sprites/Zombie/animation/Hurt3.png
new file mode 100644
index 0000000000000000000000000000000000000000..691d499df9cf07ed42f200bc0d5583a0690d0637
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Hurt3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Hurt3.png.meta b/Assets/Sprites/Zombie/animation/Hurt3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..07ba7226d2fb20dcf164d6caff6ab45360f84987
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Hurt3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 8b662d22e9424ce4285dadca78d4cb5c
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 152c2cf83f7fb3d478a0497ca0b3bd78
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Hurt4.png b/Assets/Sprites/Zombie/animation/Hurt4.png
new file mode 100644
index 0000000000000000000000000000000000000000..c83480ed90ad49130b9e853e9bf9cc9ec2e932cb
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Hurt4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Hurt4.png.meta b/Assets/Sprites/Zombie/animation/Hurt4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..68d035d8ee94f242626f0bc716db4fae2d792d92
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Hurt4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 8d6aa912ce5aad341bc6497fd4c2f021
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: ebca3222039842b4182449008f0b11ca
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Hurt5.png b/Assets/Sprites/Zombie/animation/Hurt5.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b0ca38443f134a2da6926cc7ac5a6b317db507c
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Hurt5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Hurt5.png.meta b/Assets/Sprites/Zombie/animation/Hurt5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a42ed267735d7df803f39b31b0cd4367328ed2a3
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Hurt5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f3e9be7a01a611c49af4ad5d45b0e603
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fe9913220c5649247a24d3a1f5bd465e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Idle1.png b/Assets/Sprites/Zombie/animation/Idle1.png
new file mode 100644
index 0000000000000000000000000000000000000000..752d202a36f02df03f4b43ce8815524b5e1f292b
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Idle1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Idle1.png.meta b/Assets/Sprites/Zombie/animation/Idle1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4e541a82919af4ed0fd0270547c2615a58517152
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Idle1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f36f751c2e598324cb7cde77dc0b85d4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 12838440bd76fa546bb67aa222934a51
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Idle2.png b/Assets/Sprites/Zombie/animation/Idle2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2be999ecaa01b26466cc82921df5ab14d18c6f4d
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Idle2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Idle2.png.meta b/Assets/Sprites/Zombie/animation/Idle2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0eb19fafa9da215e2c4129dcdccf6b18e37e1424
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Idle2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: daa3ef99a3bebeb45b7418d9f710643a
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 9eed39bac20a63542a4209d4d729a18f
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Idle3.png b/Assets/Sprites/Zombie/animation/Idle3.png
new file mode 100644
index 0000000000000000000000000000000000000000..c02b55ee1ef5130ddeaed1a6bc79c5d69d96b573
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Idle3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Idle3.png.meta b/Assets/Sprites/Zombie/animation/Idle3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2c6e26fa45e52f26bef893541d9458432d73163a
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Idle3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: cfb1e146a78b1f14ca7aba9b799692f4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 9971a5a51808f3044a13d27362998163
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Idle4.png b/Assets/Sprites/Zombie/animation/Idle4.png
new file mode 100644
index 0000000000000000000000000000000000000000..eec20f19d3a95e8bd88cf325bc3e5d143961e530
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Idle4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Idle4.png.meta b/Assets/Sprites/Zombie/animation/Idle4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dc21f280fbb337a07b049d5ae200c5146ac51892
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Idle4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 677e759c4d7078440b49c1e54d3a69df
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d54897aea186591418d19086cb51e9b9
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump1.png b/Assets/Sprites/Zombie/animation/Jump1.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6c84a7e4aacd3d1fd57297b1ef35abdb4e2e4dd
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump1.png.meta b/Assets/Sprites/Zombie/animation/Jump1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8b3e26e2c027676ab9aba6ec97df0428bdfde41c
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: fbd6a683bee77e14baf74f2fe40cb6e3
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: bfe9336ccd2357a499c248fb942e4198
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump2.png b/Assets/Sprites/Zombie/animation/Jump2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7320e8191a4e188d770d85f6ba905c2152a98a89
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump2.png.meta b/Assets/Sprites/Zombie/animation/Jump2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b69b38b8185d439efebef5be4287710ea14f1f64
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 29f9c6e82c799cd4eb0146d6c41be8e6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fcd863046a4a753469342e6cb83fa714
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump3.png b/Assets/Sprites/Zombie/animation/Jump3.png
new file mode 100644
index 0000000000000000000000000000000000000000..706f1ea66f56a79d53303b161976ee08c0bd5fcb
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump3.png.meta b/Assets/Sprites/Zombie/animation/Jump3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..da4ed813f2928d8de34ac488541b22abecc2f924
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ddc2cf13ac2f2c6488a2cf7ee2397449
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 7ed90eb711dce3c4cb868688c402eeb7
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump4.png b/Assets/Sprites/Zombie/animation/Jump4.png
new file mode 100644
index 0000000000000000000000000000000000000000..7689e7b0d0b4ca727b1cc79d2c49d48fae678743
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump4.png.meta b/Assets/Sprites/Zombie/animation/Jump4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f8ab6c9230447f890fe2b08cf4b990b09618c1e1
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f5be2b8c262f47f48bd26dc7e27b39a0
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a113375faf7cae54b8e45c1b276af368
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump5.png b/Assets/Sprites/Zombie/animation/Jump5.png
new file mode 100644
index 0000000000000000000000000000000000000000..56bbd7fe8f0f16ab81698a9ffee1e9b5f6f1ffa5
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump5.png.meta b/Assets/Sprites/Zombie/animation/Jump5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..de473d3cb368a2f4ecde9eb009df795b24c9ff24
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 940777fea6fd34e448a822c292147e59
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1ae46053640a62345b7ed7fb54c9e9e1
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump6.png b/Assets/Sprites/Zombie/animation/Jump6.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ba04cce5c0863c14438ac0c6043bcb5752119d5
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump6.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump6.png.meta b/Assets/Sprites/Zombie/animation/Jump6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..47eea23423b18464b8708279b3e893d48348c11a
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 5953794ba01370145bc8aa7585bff6e5
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: aeda9b7f1eef4404caabc0dfa6d389a6
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Jump7.png b/Assets/Sprites/Zombie/animation/Jump7.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae66e0f532b29f21f84d7282a33ace1b1b690b44
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Jump7.png differ
diff --git a/Assets/Sprites/Zombie/animation/Jump7.png.meta b/Assets/Sprites/Zombie/animation/Jump7.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d4399d397824dd7597287b22d6e5020e7e8e7ae4
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Jump7.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 34c304e659a3f674f9c098449d120088
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: bb4524ce2c1f8d644a6ac12be8359a30
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run1.png b/Assets/Sprites/Zombie/animation/Run1.png
new file mode 100644
index 0000000000000000000000000000000000000000..057ccd9d125225ed3d5a7dedad6e9dc29577cb7c
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run1.png.meta b/Assets/Sprites/Zombie/animation/Run1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7fdc4d98589c22b0c585ae16d89aee131ce5506c
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 2bb7541eba52d2049b6b4c7c63bca275
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 347e7a47cfe09824184eed1b09b17787
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run10.png b/Assets/Sprites/Zombie/animation/Run10.png
new file mode 100644
index 0000000000000000000000000000000000000000..843d8488eec17fa33b93ee1efbe7a962a753200e
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run10.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run10.png.meta b/Assets/Sprites/Zombie/animation/Run10.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a7f6ee1cc3f94c4671bd4b32b1f030f0eb80d186
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run10.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 483f37c25f0b91d448a51bfeecaf0c7d
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 9aa00ad799d9e2a41a19b35660a4ab82
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run2.png b/Assets/Sprites/Zombie/animation/Run2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5342c48ca98268bd4e56cc08d9ab092774d55813
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run2.png.meta b/Assets/Sprites/Zombie/animation/Run2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..19a062200d97ba37e249ce634c64c91706ad5f78
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 89991bec782e76e41bd3cf4e62957935
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: b9db083e394fbee40ba4f70908528c40
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run3.png b/Assets/Sprites/Zombie/animation/Run3.png
new file mode 100644
index 0000000000000000000000000000000000000000..51adca9e609b21dbe9caed568aee4ac8086a1fe2
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run3.png.meta b/Assets/Sprites/Zombie/animation/Run3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f3c0e6c577049426e7d0c0336e22d8ecef15bf8f
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f47e7a413153c4f4b88c5a2b1f7fea37
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 13d948a07229c3b41854bbe69e4dfcd0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run4.png b/Assets/Sprites/Zombie/animation/Run4.png
new file mode 100644
index 0000000000000000000000000000000000000000..70af798d78707ab81c08953ecbf8d5a48723cf0f
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run4.png.meta b/Assets/Sprites/Zombie/animation/Run4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..467bf8fcd290005fa678b5681d30bcfdd2059439
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7a9c0fd3c6cf2f74b95173c4dd496187
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 28c59c39923bb3943b18343ef06c7632
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run5.png b/Assets/Sprites/Zombie/animation/Run5.png
new file mode 100644
index 0000000000000000000000000000000000000000..898bb827c0d86efbce4e3531775c9a100a7cb77a
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run5.png.meta b/Assets/Sprites/Zombie/animation/Run5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1187fdaf50fca4624d2637f32535b97df76a928b
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7e601a0c686b0944c95d5c9edf7e38e5
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c87e6630e7df1ab4788747e2296fa5fd
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run6.png b/Assets/Sprites/Zombie/animation/Run6.png
new file mode 100644
index 0000000000000000000000000000000000000000..b04539dbe6b909bf852ff024005da3be197c5481
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run6.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run6.png.meta b/Assets/Sprites/Zombie/animation/Run6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..69c44c9dcd338b706359517f586da25722c03ce7
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0e73db1a8c9e2c041aaa07b85b05050a
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 37b61315cdb7e0a4c8dc737dba30c214
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run7.png b/Assets/Sprites/Zombie/animation/Run7.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a181e700fa6efff679d5eabca33da0f44ab91e7
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run7.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run7.png.meta b/Assets/Sprites/Zombie/animation/Run7.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dfbe44200cdfb87ab882541b239dc8ee668c2fe3
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run7.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 06cf5d43096a0034a82c78524738461b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 6ac29caf354ecbe42a6bdb1f41f29640
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run8.png b/Assets/Sprites/Zombie/animation/Run8.png
new file mode 100644
index 0000000000000000000000000000000000000000..58f755c2223bbf4b719fe96165ebc64c5e69c737
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run8.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run8.png.meta b/Assets/Sprites/Zombie/animation/Run8.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6c547b6fb4d1fce829f0410a5ba662b7eb8b3c2f
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run8.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4fdf546d5b2970b4699447a4362bca00
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5a9c588b5215ae540810dcc71d62a57a
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Run9.png b/Assets/Sprites/Zombie/animation/Run9.png
new file mode 100644
index 0000000000000000000000000000000000000000..62eb592a675da26be4080c574ef309b5300c9c03
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Run9.png differ
diff --git a/Assets/Sprites/Zombie/animation/Run9.png.meta b/Assets/Sprites/Zombie/animation/Run9.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..024d27705be2a5cb106ac80587283d16616ff331
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Run9.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: ae8388f3c1507554cab2bb7873147eb6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0e25ac266f9052849b878a41e5a53167
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk1.png b/Assets/Sprites/Zombie/animation/Walk1.png
new file mode 100644
index 0000000000000000000000000000000000000000..6264bc80c0bc9d76a18914b8b5aa2fd0bbd5235a
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk1.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk1.png.meta b/Assets/Sprites/Zombie/animation/Walk1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b0d27767d74f709efaa3efa18c7763ac9114fe22
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: fb94a85578dd49141ac3d93064efaa3e
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 1b0240ece5ca34f47b28b3f2d89c036b
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk2.png b/Assets/Sprites/Zombie/animation/Walk2.png
new file mode 100644
index 0000000000000000000000000000000000000000..934bc2900ce9727ec85165f8cb663ad91bd47fc0
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk2.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk2.png.meta b/Assets/Sprites/Zombie/animation/Walk2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..001e2edfdfad95814c96bc6b34afcdf3da9d1e3d
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e488e518fc6c5f444807ac34142c4ec7
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: c374a2bd36c5f3d448ebf7c8b70e2447
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk3.png b/Assets/Sprites/Zombie/animation/Walk3.png
new file mode 100644
index 0000000000000000000000000000000000000000..fce2013f4e7062bf014e60559616ff0e26c5d57c
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk3.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk3.png.meta b/Assets/Sprites/Zombie/animation/Walk3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d87bdd246856286ff411a2875f3fec4bb8ef7ab1
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 21f21f8522e7b5c4dae06e5fde95b624
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e1d083a7e3773914883907f3c89b4acf
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk4.png b/Assets/Sprites/Zombie/animation/Walk4.png
new file mode 100644
index 0000000000000000000000000000000000000000..2aa1792962869eada0656fe922575d08a28bfe51
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk4.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk4.png.meta b/Assets/Sprites/Zombie/animation/Walk4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f97a0cb228771510509eb6cf82fc23e38865a0fd
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c87efcf4926654c46a58be747da2f490
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f4225461fee26844384a9b508869e718
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk5.png b/Assets/Sprites/Zombie/animation/Walk5.png
new file mode 100644
index 0000000000000000000000000000000000000000..12ab518bb7d1352987b24a35991328e0fc6b59ca
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk5.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk5.png.meta b/Assets/Sprites/Zombie/animation/Walk5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8fb6efd427354bfb1e3ad773386d06ea95cf2c7d
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e45ba03774084ee4a899cbfd8f4b24da
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2580f9ab67dc4d44b87d437e22ee4ea9
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/animation/Walk6.png b/Assets/Sprites/Zombie/animation/Walk6.png
new file mode 100644
index 0000000000000000000000000000000000000000..420182885e337815611b1d5a1fed3e2a6fc93486
Binary files /dev/null and b/Assets/Sprites/Zombie/animation/Walk6.png differ
diff --git a/Assets/Sprites/Zombie/animation/Walk6.png.meta b/Assets/Sprites/Zombie/animation/Walk6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..07d89e5b780fd0907925c708dbb33365fac06452
--- /dev/null
+++ b/Assets/Sprites/Zombie/animation/Walk6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 5533086cc69e03d4ab837de104b62517
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: bb782b345196d1147a4a8a65c878733d
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts.meta b/Assets/Sprites/Zombie/bodyparts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4f46dbb858c2976dc160a455ebda97cead7fe90f
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 880f4ac0d72cd874db9dc710298d7fda
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/body.png b/Assets/Sprites/Zombie/bodyparts/body.png
new file mode 100644
index 0000000000000000000000000000000000000000..30da1fa0f4558a76bfdf31df729e555e32b99fa7
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/body.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/body.png.meta b/Assets/Sprites/Zombie/bodyparts/body.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3ad75200c4a3e995995720d7574d2bde5a91f5b4
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/body.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 9ab40593e600b0b448211af1e6faea67
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 3833df55a85fcce4d887b05d0b0abf7a
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/body_2.png b/Assets/Sprites/Zombie/bodyparts/body_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a89ac874def6489a545590fde48cbc6e9527ac3
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/body_2.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/body_2.png.meta b/Assets/Sprites/Zombie/bodyparts/body_2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4638c576932cd1a647b9d38064695f4f3d9e4dbc
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/body_2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: da58e41a0c7d7184287af3497f97da62
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: a941b7ee255916e4ea025e00db1176f3
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/hand.png b/Assets/Sprites/Zombie/bodyparts/hand.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9c3fb73056543a162aed089ec01917ece085de9
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/hand.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/hand.png.meta b/Assets/Sprites/Zombie/bodyparts/hand.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..24e5d1b32ba0a745c00b36d9925d2ff4b00e7891
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/hand.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 4a151cd5fb89b124fb64a0bee60121c1
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 76a355739d278a543935f86ae4e48d87
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head.png b/Assets/Sprites/Zombie/bodyparts/head.png
new file mode 100644
index 0000000000000000000000000000000000000000..43845f14fe14b9afdb67ff8e6253b1d37b215b40
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head.png.meta b/Assets/Sprites/Zombie/bodyparts/head.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fdbbd95b09381833bdcaa8fbfb6a26b79224d92b
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 63d5b4042818ff147a08b398a0548567
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fa3069ee25341b742827927dacf64d22
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head2.png b/Assets/Sprites/Zombie/bodyparts/head2.png
new file mode 100644
index 0000000000000000000000000000000000000000..62c7e1fb76b141a45e3e03ad4272ea7c2c3109db
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head2.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head2.png.meta b/Assets/Sprites/Zombie/bodyparts/head2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dd3afc45014561f182335946ef8f77dbafe9bbb2
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c8f94a8bc382c454dbcbcc6459e38066
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 619cd61ebb787bd4b9852e22b97e918e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head3.png b/Assets/Sprites/Zombie/bodyparts/head3.png
new file mode 100644
index 0000000000000000000000000000000000000000..af9026a83d7cab73eecd4365c4afa88afb9dd24e
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head3.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head3.png.meta b/Assets/Sprites/Zombie/bodyparts/head3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ebf2d07e112a1590bc987afd2effbe06c0f61cb5
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e40365ad2e2e92a40b428d97f4465f3b
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 8b7dfd542a8586749b180339a5c3bb26
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head4.png b/Assets/Sprites/Zombie/bodyparts/head4.png
new file mode 100644
index 0000000000000000000000000000000000000000..946881997aa00df45b57ffd7be541bd77f4bc1fd
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head4.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head4.png.meta b/Assets/Sprites/Zombie/bodyparts/head4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7aef41a8bdb7f042d230192d832a48ec9fa3ef8d
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: cc7d99abc3ec09644a143fb9185eb2d7
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e4fcf0cee8a4b2d478b8f2be7d32e481
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head5.png b/Assets/Sprites/Zombie/bodyparts/head5.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eb22f8562c86901e79cd7b19788882c4c6aa8f7
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head5.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head5.png.meta b/Assets/Sprites/Zombie/bodyparts/head5.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dc40772bc4396689631c0c6212bbb9e9fb96f9ed
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head5.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7405a92151387284bb13bab3e8e90cc6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 88cef9f5db47e204299c5c52183d2dbd
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/head6.png b/Assets/Sprites/Zombie/bodyparts/head6.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a1f6e8e82699ac9ea3ebef180bde44b793186a5
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/head6.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/head6.png.meta b/Assets/Sprites/Zombie/bodyparts/head6.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..41e02ed7065db893cae832648a834b6c303b95f1
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/head6.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c4895692e9cf23f4bb3a7616ad968466
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: e6087f4a2cab2b842a8d4e8c81a0bc28
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_arm.png b/Assets/Sprites/Zombie/bodyparts/left_arm.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e7e012e7781837ad3405823fe857090a1f0cd70
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_arm.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_arm.png.meta b/Assets/Sprites/Zombie/bodyparts/left_arm.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8757e0a763410b01b7582b88b1e846a68ec74d5d
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_arm.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 216f2bdd0a50a104fa4927f260551c83
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5ff5cc9c8afe4ae40beec8dc2cde9509
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_feet.png b/Assets/Sprites/Zombie/bodyparts/left_feet.png
new file mode 100644
index 0000000000000000000000000000000000000000..37174752ac976f20a68954c4825bdb746c47cd18
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_feet.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_feet.png.meta b/Assets/Sprites/Zombie/bodyparts/left_feet.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ece284b46a9d50ab2cfb0cbc63e506959c1e89db
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_feet.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 46774595a2c032f4b826d6baf6110a39
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 0d7a4c177c083c64190ada7062755255
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_hand.png b/Assets/Sprites/Zombie/bodyparts/left_hand.png
new file mode 100644
index 0000000000000000000000000000000000000000..8086589bb05fe46e72267f4d1efc6b80ff9605bf
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_hand.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_hand.png.meta b/Assets/Sprites/Zombie/bodyparts/left_hand.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f52b1d46322aa0f373c37dd677f8b6e1d90b7051
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_hand.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: a9d131f178070df48a5f9f7abe2baa09
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 35106e32ad9496f42ba644fb32658ae0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_leg.png b/Assets/Sprites/Zombie/bodyparts/left_leg.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9e419afeee349c3f07efe16c3b833be667d34c4
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_leg.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_leg.png.meta b/Assets/Sprites/Zombie/bodyparts/left_leg.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..99f6afbac3c780b52c71053c423d45ecb3058f5a
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_leg.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e2135e9ba7bc8e34e99c5b6c19b822ab
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5a6b79e7c559a5f43be2052ac7a643bb
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_leg_down.png b/Assets/Sprites/Zombie/bodyparts/left_leg_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..8eabe2b66ec0ef52df0a9075e3a622da38922f24
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_leg_down.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_leg_down.png.meta b/Assets/Sprites/Zombie/bodyparts/left_leg_down.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..10925fe2b33a7c99c40cfedf59d45fcd5c3d5b4d
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_leg_down.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f5b355aa2f884c148b650e442c42a6e4
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 706eefc97ad718b4e806690ced0226e4
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/left_sholder.png b/Assets/Sprites/Zombie/bodyparts/left_sholder.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b24efc09254eda8ca9e2c97a96b9c4cef7a0e42
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/left_sholder.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/left_sholder.png.meta b/Assets/Sprites/Zombie/bodyparts/left_sholder.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..232c9860512af4850ed067a9691d42b084463ac6
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/left_sholder.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 828ec02863ac580498e5437c3dec3d79
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2aa499b645c6f7742928d223e7514d9e
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/neck.png b/Assets/Sprites/Zombie/bodyparts/neck.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b25d1f500992e9d5885c2a90babd6a5c7c6ada3
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/neck.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/neck.png.meta b/Assets/Sprites/Zombie/bodyparts/neck.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bb7cb5e83e68a47c40a02b2f518ff6d0dffaee89
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/neck.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 963cea26ffac28747bf29abbb60b6fca
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: ba86bca9f70ce4f49bc58eb018d8d52c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/right_art.png b/Assets/Sprites/Zombie/bodyparts/right_art.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4475f3d999cbed00f7e5b3e0175b013a04f4091
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/right_art.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/right_art.png.meta b/Assets/Sprites/Zombie/bodyparts/right_art.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4b2c620f3b13e2f810d4f791f3934b065e1a1c63
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/right_art.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: affa80c0b66ae834884a2e9cadb8e159
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: d8840b448e424914cbcb6bf7afee839d
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/right_feet.png b/Assets/Sprites/Zombie/bodyparts/right_feet.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7859b065ad02593bda907425a37f0d0bb6762ba
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/right_feet.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/right_feet.png.meta b/Assets/Sprites/Zombie/bodyparts/right_feet.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4291b75dc7efbb889226015b0a1466b2c6681633
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/right_feet.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 74ad733a535afde4fab6d97c5eb00d65
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 7206452ce7055334a9beebcef56dc156
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/right_leg.png b/Assets/Sprites/Zombie/bodyparts/right_leg.png
new file mode 100644
index 0000000000000000000000000000000000000000..a170bca4d9810314edb0adbe9ab3aef268b1233d
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/right_leg.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/right_leg.png.meta b/Assets/Sprites/Zombie/bodyparts/right_leg.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e14b6bfeb4e0d3e0a2b87f8cdb126f12d414f240
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/right_leg.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: a41d318e6018f4141acdadc56150da05
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 13a3e5d33268268438186189c343abf4
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/right_leg_down.png b/Assets/Sprites/Zombie/bodyparts/right_leg_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca37d67eb918dea37623be7b138a2415bf7915fd
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/right_leg_down.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/right_leg_down.png.meta b/Assets/Sprites/Zombie/bodyparts/right_leg_down.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5b3168c0af49bc09d86eeaba07f883ba98e3ca0f
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/right_leg_down.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c0a24bc32a7602840bbcb1b7734c6c52
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: fa5c0165e986b8f4e989053109abd1d0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/right_sholder.png b/Assets/Sprites/Zombie/bodyparts/right_sholder.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f45a12d55984e11e0589c1833c2b44917d8dca5
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/right_sholder.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/right_sholder.png.meta b/Assets/Sprites/Zombie/bodyparts/right_sholder.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..31be589521994207641c8ab4ede49f1128468178
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/right_sholder.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: cd32ad063d2797f49b3e1fca9f474a62
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 2b3144e9bb4dfc14bb680d741c134204
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva1.png b/Assets/Sprites/Zombie/bodyparts/saliva1.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4294d6f18fd6b66aacd64de2d04d7e93bc8eb53
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/saliva1.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva1.png.meta b/Assets/Sprites/Zombie/bodyparts/saliva1.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..214ccb7eb536a9bef4a60266226c288d8a660eeb
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/saliva1.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 7434eb8b119e46f4b8900335693070cf
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 58155c8d66e342843b75203eb3c04ae2
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva2.png b/Assets/Sprites/Zombie/bodyparts/saliva2.png
new file mode 100644
index 0000000000000000000000000000000000000000..be991fee4da92cda0fe4aead82aecc2824700acd
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/saliva2.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva2.png.meta b/Assets/Sprites/Zombie/bodyparts/saliva2.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..750e9ba6ef03fec04a4c3f9845b095b76a816c0e
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/saliva2.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c5171a7976b3acf4aaf43335af2563d6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 6841dde9a1f9a8c4fb1ea2e3f6a523e7
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva3.png b/Assets/Sprites/Zombie/bodyparts/saliva3.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8045fd5c8a39faa17d121ffc4438465b2a73984
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/saliva3.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva3.png.meta b/Assets/Sprites/Zombie/bodyparts/saliva3.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f3c4f32ebe85cae18398a01468e4fc89843fc294
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/saliva3.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: d687414a82ecb7848910b9d5291aa65a
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 7dac32b60735cc3468d06bea1e0e867c
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva4.png b/Assets/Sprites/Zombie/bodyparts/saliva4.png
new file mode 100644
index 0000000000000000000000000000000000000000..8dda62cad3dcb3742f0acb1b44ff97da0da713b0
Binary files /dev/null and b/Assets/Sprites/Zombie/bodyparts/saliva4.png differ
diff --git a/Assets/Sprites/Zombie/bodyparts/saliva4.png.meta b/Assets/Sprites/Zombie/bodyparts/saliva4.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93432d34d7c0d5be27605e6e5e7ef31668b5fc60
--- /dev/null
+++ b/Assets/Sprites/Zombie/bodyparts/saliva4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 1e1802206d6c74c429a23a13c0caa93a
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: eac04fae238cb26468acd28a6136d564
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson-Example.meta b/Assets/UnityLitJson-Example.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dd04f4eaeb51a640487e298a9d1592b9bb4e3c93
--- /dev/null
+++ b/Assets/UnityLitJson-Example.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5e5f024ae514f244794f912640f364b5
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson-Example/JsonExample.cs b/Assets/UnityLitJson-Example/JsonExample.cs
new file mode 100644
index 0000000000000000000000000000000000000000..51f4d2d3819a30301d2e543be8020433e12e2ce1
--- /dev/null
+++ b/Assets/UnityLitJson-Example/JsonExample.cs
@@ -0,0 +1,137 @@
+using UnityEngine;
+using System.Collections;
+
+using LitJson;
+
+public class JsonExample : MonoBehaviour {
+	
+	public class ExampleSerializedClass {
+
+		// Value Types
+
+		public int myInt = 42;
+		public string myString = "The quick brown fox jumped over the lazy dog.";
+		public float myFloat = 3.14159f;
+		public bool myBool = false;
+
+		// Other supported value types:
+		// uint, decimal, double, long,
+		// ulong, byte, sbyte, short, ushort
+
+		// Unity3D Types
+
+		public Vector2 myVector2 = Vector2.one;
+		public Vector3 myVector3 = Vector3.one * 3.14159f;
+		public Vector4 myVector4 = Vector4.one * 6.28318f;
+		public Quaternion myQuaternion = Quaternion.identity;
+
+		public Color myColor = Color.red;
+		public Color32 myColor32 = new Color32(85,127,255,255);
+
+		public Bounds myBounds = new Bounds(Vector3.zero,Vector3.one);
+		public Rect myRect = new Rect(10,10,25,25);
+		public RectOffset myRectOffset = new RectOffset(5,10,15,20);
+
+		public int[] myIntArray = new int[]{ 2, 4, 6, 8, 10 };
+
+		[JsonIgnore]
+		public Transform myIgnoredTransform; // This object will be ignored by the json engine.
+
+		public ExampleSerializedClass(){ }
+
+	}
+
+	// Notice how some values have been changed.
+	const string savedJsonString = @"{
+		""myInt"" : 42,
+		""myString"" : ""This value has changed!"",
+		""myFloat""  : 6.28318,
+		""myBool""   : true,
+		""myVector2"" : {
+			""x"" : 8.0,
+			""y"" : 8.0
+		},
+		""myVector3"" : {
+			""x"" : 3.1415901184082,
+			""y"" : 3.1415901184082,
+			""z"" : 3.1415901184082
+		},
+		""myVector4"" : {
+			""x"" : 6.28318023681641,
+			""y"" : 6.28318023681641,
+			""z"" : 6.28318023681641,
+			""w"" : 6.28318023681641
+		},
+		""myQuaternion"" : {
+			""x"" : 1.0,
+			""y"" : 1.0,
+			""z"" : 1.0,
+			""w"" : 1.0
+		},
+		""myColor""      : {
+			""r"" : 0.0,
+			""g"" : 0.0,
+			""b"" : 0.0,
+			""a"" : 0.0
+		},
+		""myColor32""    : {
+			""r"" : 85,
+			""g"" : 127,
+			""b"" : 255,
+			""a"" : 0
+		},
+		""myBounds""     : {
+			""center"" : {
+				""x"" : 0.0,
+				""y"" : 0.0,
+				""z"" : 0.0
+			},
+			""size""   : {
+				""x"" : 1.0,
+				""y"" : 1.0,
+				""z"" : 1.0
+			}
+		},
+		""myRect""       : {
+			""x"" : 10.0,
+			""y"" : 10.0,
+			""width"" : 25.0,
+			""height"" : 25.0
+		},
+		""myRectOffset"" : {
+			""top"" : 15,
+			""left"" : 5,
+			""bottom"" : 20,
+			""right""  : 10
+		},
+		""myIntArray""   : [
+			   12,
+			   14,
+			   16,
+			   18,
+			   20
+			   ]
+	}";
+
+	void Start () {
+
+		ExampleSerializedClass serializedClass = new ExampleSerializedClass();
+
+		JsonWriter writer = new JsonWriter();
+		writer.PrettyPrint = true;
+
+		JsonMapper.ToJson(serializedClass,writer);
+
+		string json = writer.ToString();
+		Debug.Log(json);
+
+		// If you don't need a JsonWriter, use this.
+		//string json = JsonMapper.ToJson(exampleClass);
+
+		ExampleSerializedClass deserializedClass = JsonMapper.ToObject<ExampleSerializedClass>(savedJsonString);
+
+		Debug.Log(deserializedClass.myString);
+
+	}
+
+}
diff --git a/Assets/UnityLitJson-Example/JsonExample.cs.meta b/Assets/UnityLitJson-Example/JsonExample.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b83f89ef5b7c8750e81daa4c24d66b1935c1c9ff
--- /dev/null
+++ b/Assets/UnityLitJson-Example/JsonExample.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0937814b88ba29d4296309e83528dedc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson-Example/JsonExample.unity b/Assets/UnityLitJson-Example/JsonExample.unity
new file mode 100644
index 0000000000000000000000000000000000000000..7d9f28d492cfffddd5ada8cb0afe661979e7cc5c
--- /dev/null
+++ b/Assets/UnityLitJson-Example/JsonExample.unity
@@ -0,0 +1,194 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+SceneSettings:
+  m_ObjectHideFlags: 0
+  m_PVSData: 
+  m_PVSObjectsArray: []
+  m_PVSPortalsArray: []
+  m_OcclusionBakeSettings:
+    smallestOccluder: 5
+    smallestHole: .25
+    backfaceThreshold: 100
+--- !u!104 &2
+RenderSettings:
+  m_Fog: 0
+  m_FogColor: {r: .5, g: .5, b: .5, a: 1}
+  m_FogMode: 3
+  m_FogDensity: .00999999978
+  m_LinearFogStart: 0
+  m_LinearFogEnd: 300
+  m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1}
+  m_SkyboxMaterial: {fileID: 0}
+  m_HaloStrength: .5
+  m_FlareStrength: 1
+  m_FlareFadeSpeed: 3
+  m_HaloTexture: {fileID: 0}
+  m_SpotCookie: {fileID: 0}
+  m_ObjectHideFlags: 0
+--- !u!127 &3
+LevelGameManager:
+  m_ObjectHideFlags: 0
+--- !u!157 &4
+LightmapSettings:
+  m_ObjectHideFlags: 0
+  m_LightProbes: {fileID: 0}
+  m_Lightmaps: []
+  m_LightmapsMode: 1
+  m_BakedColorSpace: 0
+  m_UseDualLightmapsInForward: 0
+  m_LightmapEditorSettings:
+    m_Resolution: 50
+    m_LastUsedResolution: 0
+    m_TextureWidth: 1024
+    m_TextureHeight: 1024
+    m_BounceBoost: 1
+    m_BounceIntensity: 1
+    m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1}
+    m_SkyLightIntensity: 0
+    m_Quality: 0
+    m_Bounces: 1
+    m_FinalGatherRays: 1000
+    m_FinalGatherContrastThreshold: .0500000007
+    m_FinalGatherGradientThreshold: 0
+    m_FinalGatherInterpolationPoints: 15
+    m_AOAmount: 0
+    m_AOMaxDistance: .100000001
+    m_AOContrast: 1
+    m_LODSurfaceMappingDistance: 1
+    m_Padding: 0
+    m_TextureCompression: 0
+    m_LockAtlas: 0
+--- !u!196 &5
+NavMeshSettings:
+  m_ObjectHideFlags: 0
+  m_BuildSettings:
+    agentRadius: .5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: .400000006
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    accuratePlacement: 0
+    minRegionArea: 2
+    widthInaccuracy: 16.666666
+    heightInaccuracy: 10
+  m_NavMesh: {fileID: 0}
+--- !u!1 &546433385
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 546433387}
+  - 114: {fileID: 546433386}
+  m_Layer: 0
+  m_Name: JsonExample
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &546433386
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 546433385}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0937814b88ba29d4296309e83528dedc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &546433387
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 546433385}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+--- !u!1 &1949177483
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 4: {fileID: 1949177489}
+  - 20: {fileID: 1949177488}
+  - 92: {fileID: 1949177487}
+  - 124: {fileID: 1949177486}
+  - 81: {fileID: 1949177485}
+  m_Layer: 0
+  m_Name: Main Camera
+  m_TagString: MainCamera
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!81 &1949177485
+AudioListener:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1949177483}
+  m_Enabled: 1
+--- !u!124 &1949177486
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1949177483}
+  m_Enabled: 1
+--- !u!92 &1949177487
+Behaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1949177483}
+  m_Enabled: 1
+--- !u!20 &1949177488
+Camera:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1949177483}
+  m_Enabled: 1
+  serializedVersion: 2
+  m_ClearFlags: 1
+  m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438}
+  m_NormalizedViewPortRect:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  near clip plane: .300000012
+  far clip plane: 1000
+  field of view: 60
+  orthographic: 0
+  orthographic size: 5
+  m_Depth: -1
+  m_CullingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+  m_RenderingPath: -1
+  m_TargetTexture: {fileID: 0}
+  m_HDR: 0
+  m_OcclusionCulling: 1
+--- !u!4 &1949177489
+Transform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 1949177483}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 1, z: -10}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
diff --git a/Assets/UnityLitJson-Example/JsonExample.unity.meta b/Assets/UnityLitJson-Example/JsonExample.unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5a981a03958b170fb30a142b1ee4c0b155442084
--- /dev/null
+++ b/Assets/UnityLitJson-Example/JsonExample.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 12b4de6fcc752004480f2dbaeacda3d8
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson.meta b/Assets/UnityLitJson.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b3f11394a170e693686ae0038207bce9d77be3f6
--- /dev/null
+++ b/Assets/UnityLitJson.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2ad252fddebabb0499524e3c1692bd22
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/COPYING b/Assets/UnityLitJson/COPYING
new file mode 100644
index 0000000000000000000000000000000000000000..44544b8bce4f0f739861d7b9a75a003ed1c58137
--- /dev/null
+++ b/Assets/UnityLitJson/COPYING
@@ -0,0 +1,31 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
+
+Thank you for reading this notice. Following the tradition of other public
+domain projects, here's a blessing:
+
+  May you find forgiveness for yourself and forgive others.
+  May you experience and share the gift of unconditional love.
+  May you see light, wherever the illusion of darkness appears.
diff --git a/Assets/UnityLitJson/COPYING.meta b/Assets/UnityLitJson/COPYING.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eb0cf830abb0db1fd650c065be4a0fac83f58d3f
--- /dev/null
+++ b/Assets/UnityLitJson/COPYING.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6831d8d7395cfec4f89225e63aaf0f5a
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/Extensions.cs b/Assets/UnityLitJson/Extensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5a0e785670cb1bdea2da85cdc4647f74304393ee
--- /dev/null
+++ b/Assets/UnityLitJson/Extensions.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections;
+
+namespace LitJson.Extensions {
+
+	public static class Extensions {
+
+		public static void WriteProperty(this JsonWriter w,string name,long value){
+			w.WritePropertyName(name);
+			w.Write(value);
+		}
+		
+		public static void WriteProperty(this JsonWriter w,string name,string value){
+			w.WritePropertyName(name);
+			w.Write(value);
+		}
+		
+		public static void WriteProperty(this JsonWriter w,string name,bool value){
+			w.WritePropertyName(name);
+			w.Write(value);
+		}
+		
+		public static void WriteProperty(this JsonWriter w,string name,double value){
+			w.WritePropertyName(name);
+			w.Write(value);
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/Assets/UnityLitJson/Extensions.cs.meta b/Assets/UnityLitJson/Extensions.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8d570b93fd3dcee7b3bd4a0a34a0746e4924fec1
--- /dev/null
+++ b/Assets/UnityLitJson/Extensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6be651f1bb41d5d4f87732a4cabd701c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/IJsonWrapper.cs b/Assets/UnityLitJson/IJsonWrapper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9a032b54fffe8d88026c47966765564a77e08b92
--- /dev/null
+++ b/Assets/UnityLitJson/IJsonWrapper.cs
@@ -0,0 +1,54 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace LitJson {
+
+/// <summary>
+/// This enum contains the possible types a JSON value can have.
+/// </summary>
+public enum JsonType {
+	None,
+	Object,
+	Array,
+	String,
+	Natural,
+	Real,
+	Boolean
+}
+
+/// <summary>
+/// Interface that represents a type capable of handling all kinds of JSON data.
+/// This is mainly used when mapping objects through JsonMapper, and it's implemented by JsonData.
+/// </summary>
+public interface IJsonWrapper : IList, IOrderedDictionary {
+	bool IsObject { get; }
+	bool IsArray { get; }
+	bool IsString { get; }
+	bool IsNatural { get; }
+	bool IsReal { get; }
+	bool IsBoolean { get; }
+
+	JsonType GetJsonType();
+	string GetString();
+	long GetNatural();
+	double GetReal();
+	bool GetBoolean();
+
+	void SetJsonType(JsonType type);
+	void SetString(string val);
+	void SetNatural(long val);
+	void SetReal(double val);
+	void SetBoolean(bool val);
+
+	string ToJson();
+	void ToJson(JsonWriter writer);
+}
+
+}
diff --git a/Assets/UnityLitJson/IJsonWrapper.cs.meta b/Assets/UnityLitJson/IJsonWrapper.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9037f90436cd76da4e23fb9afd5d8c7a47838f1c
--- /dev/null
+++ b/Assets/UnityLitJson/IJsonWrapper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ec554b127cc81864eb43277b92f9e1e7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonAttribute.cs b/Assets/UnityLitJson/JsonAttribute.cs
new file mode 100644
index 0000000000000000000000000000000000000000..568ff69dd73296c7e13dc4b8f2c176b3b96f07ed
--- /dev/null
+++ b/Assets/UnityLitJson/JsonAttribute.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+
+namespace LitJson {
+
+[Flags]
+public enum JsonIgnoreWhen {
+	Never = 0,
+	Serializing = 1,
+	Deserializing = 2
+}
+
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+public class JsonIgnore : Attribute {
+	public JsonIgnoreWhen Usage { get; private set; }
+
+	public JsonIgnore() {
+		Usage = JsonIgnoreWhen.Serializing | JsonIgnoreWhen.Deserializing;
+	}
+
+	public JsonIgnore(JsonIgnoreWhen usage) {
+		Usage = usage;
+	}
+}
+
+[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true)]
+public class JsonIgnoreMember : Attribute {
+	public HashSet<string> Members { get; private set; }
+
+	public JsonIgnoreMember(params string[] members) : this((ICollection<string>)members) {
+	}
+
+	public JsonIgnoreMember(ICollection<string> members) {
+		Members = new HashSet<string>(members);
+	}
+}
+
+/// <summary>
+/// Attribute to be placed on non-public fields or properties to include them in serialization.
+/// </summary>
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+public class JsonInclude : Attribute {
+}
+
+[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+public class JsonAlias : Attribute {
+	public string Alias { get; private set; }
+	public bool AcceptOriginal { get; private set; }
+
+	public JsonAlias(string aliasName, bool acceptOriginalName = false) {
+		Alias = aliasName;
+		AcceptOriginal = acceptOriginalName;
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonAttribute.cs.meta b/Assets/UnityLitJson/JsonAttribute.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f32a4bb8a255a7839f8e48f6577c8157764c5410
--- /dev/null
+++ b/Assets/UnityLitJson/JsonAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09c4ef2aac2cee840b8f392902d0418d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonData.cs b/Assets/UnityLitJson/JsonData.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b996f914a42a7e82cf55672ae91279ddc79e9c6b
--- /dev/null
+++ b/Assets/UnityLitJson/JsonData.cs
@@ -0,0 +1,894 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code. For more details, see
+ * the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.IO;
+
+namespace LitJson {
+
+/// <summary>
+/// Generic type to hold JSON data (objects, arrays, and so on).
+/// This isthe default type returned by JsonMapper.ToObject().
+/// </summary>
+public class JsonData : IJsonWrapper, IEquatable<JsonData> {
+	private object val;
+	private string json;
+	private JsonType type;
+
+	// Used to implement the IOrderedDictionary interface
+	private IList<KeyValuePair<string, JsonData>> list;
+
+	#region JsonData Properties
+
+	public int Count {
+		get { return EnsureCollection().Count; }
+	}
+
+	#endregion
+
+	#region IJsonWrapper Properties
+
+	public bool IsArray {
+		get { return type == JsonType.Array; }
+	}
+
+	public bool IsBoolean {
+		get { return type == JsonType.Boolean; }
+	}
+
+	public bool IsReal {
+		get { return type == JsonType.Real; }
+	}
+
+	public bool IsNatural {
+		get { return type == JsonType.Natural; }
+	}
+
+	public bool IsObject {
+		get { return type == JsonType.Object; }
+	}
+
+	public bool IsString {
+		get { return type == JsonType.String; }
+	}
+
+	public ICollection<string> Keys {
+		get {
+			EnsureDictionary();
+			return GetObject().Keys;
+		}
+	}
+	#endregion
+
+	#region ICollection Properties
+
+	int ICollection.Count {
+		get { return Count; }
+	}
+
+	bool ICollection.IsSynchronized {
+		get { return EnsureCollection().IsSynchronized; }
+	}
+
+	object ICollection.SyncRoot {
+		get { return EnsureCollection().SyncRoot; }
+	}
+
+	#endregion
+
+	#region IDictionary Properties
+
+	bool IDictionary.IsFixedSize {
+		get { return EnsureDictionary().IsFixedSize; }
+	}
+
+	bool IDictionary.IsReadOnly {
+		get { return EnsureDictionary().IsReadOnly; }
+	}
+
+	ICollection IDictionary.Keys {
+		get {
+			EnsureDictionary();
+			IList<string> keys = new List<string>();
+			foreach (KeyValuePair<string, JsonData> entry in list) {
+				keys.Add(entry.Key);
+			}
+			return (ICollection)keys;
+		}
+	}
+
+	ICollection IDictionary.Values {
+		get {
+			EnsureDictionary();
+			IList<JsonData> values = new List<JsonData>();
+			foreach (KeyValuePair<string, JsonData> entry in list) {
+				values.Add(entry.Value);
+			}
+			return (ICollection)values;
+		}
+	}
+
+	#endregion
+
+	#region IList Properties
+
+	bool IList.IsFixedSize {
+		get { return EnsureList().IsFixedSize; }
+	}
+
+	bool IList.IsReadOnly {
+		get { return EnsureList().IsReadOnly; }
+	}
+
+	#endregion
+
+	#region IDictionary Indexer
+
+	object IDictionary.this[object key] {
+		get { return EnsureDictionary()[key]; }
+		set {
+			if (!(key is string)) {
+				throw new ArgumentException("The key has to be a string");
+			}
+			JsonData data = ToJsonData(value);
+			this[(string)key] = data;
+		}
+	}
+
+	#endregion
+
+	#region IOrderedDictionary Indexer
+
+	object IOrderedDictionary.this[int idx] {
+		get {
+			EnsureDictionary();
+			return list[idx].Value;
+		}
+		set {
+			EnsureDictionary();
+			JsonData data = ToJsonData(value);
+			KeyValuePair<string, JsonData> old = list[idx];
+			GetObject()[old.Key] = data;
+			KeyValuePair<string, JsonData> entry = new KeyValuePair<string, JsonData>(old.Key, data);
+			list[idx] = entry;
+		}
+	}
+
+	#endregion
+
+	#region IList Indexer
+
+	object IList.this[int index] {
+		get { return EnsureList()[index]; }
+		set {
+			EnsureList();
+			JsonData data = ToJsonData(value);
+			this[index] = data;
+		}
+	}
+
+	#endregion
+
+	#region Public Indexers
+
+	public JsonData this[string name] {
+		get {
+			EnsureDictionary();
+			return GetObject()[name];
+		}
+		set {
+			EnsureDictionary();
+			KeyValuePair<string, JsonData> entry = new KeyValuePair<string, JsonData>(name, value);
+			if (GetObject().ContainsKey(name)) {
+				for (int i = 0; i < list.Count; i++) {
+					if (list[i].Key == name) {
+						list[i] = entry;
+						break;
+					}
+				}
+			} else {
+				list.Add(entry);
+			}
+			GetObject()[name] = value;
+			json = null;
+		}
+	}
+
+	public JsonData this[int index] {
+		get {
+			EnsureCollection();
+			if (type == JsonType.Array) {
+				return GetArray()[index];
+			}
+			return list[index].Value;
+		}
+		set {
+			EnsureCollection();
+			if (type == JsonType.Array) {
+				GetArray()[index] = value;
+			} else {
+				KeyValuePair<string, JsonData> old = list[index];
+				KeyValuePair<string, JsonData> entry = new KeyValuePair<string, JsonData>(old.Key, value);
+				list[index] = entry;
+				GetObject()[old.Key] = value;
+			}
+			json = null;
+		}
+	}
+
+	#endregion
+
+	#region Constructors
+
+	public JsonData(bool boolean) {
+		type = JsonType.Boolean;
+		val = boolean;
+	}
+
+	public JsonData(double number) {
+		type = JsonType.Real;
+		val = number;
+	}
+
+	public JsonData(long number) {
+		type = JsonType.Natural;
+		val = number;
+	}
+
+	public JsonData(string str) {
+		type = JsonType.String;
+		val = str;
+	}
+
+	public JsonData(object obj) {
+		if (obj is bool) {
+			type = JsonType.Boolean;
+		}  else if (obj is double) {
+			type = JsonType.Real;
+		} else if (obj is long) {
+			type = JsonType.Natural;
+		} else if (obj is string) {
+			type = JsonType.String;
+		} else if (obj is sbyte) {
+			type = JsonType.Natural;
+			obj = (long)(sbyte)obj;
+		} else if (obj is byte) {
+			type = JsonType.Natural;
+			obj = (long)(byte)obj;
+		} else if (obj is short) {
+			type = JsonType.Natural;
+			obj = (long)(short)obj;
+		} else if (obj is ushort) {
+			type = JsonType.Natural;
+			obj = (long)(ushort)obj;
+		} else if (obj is int) {
+			type = JsonType.Natural;
+			obj = (long)(int)obj;
+		} else if (obj is uint) {
+			type = JsonType.Natural;
+			obj = (long)(uint)obj;
+		} else if (obj is ulong) {
+			type = JsonType.Natural;
+			obj = (long)(ulong)obj;
+		} else if (obj is float) {
+			type = JsonType.Real;
+			obj = (double)(float)obj;
+		} else if (obj is decimal) {
+			type = JsonType.Real;
+			obj = (double)(decimal)obj;
+		} else {
+			throw new ArgumentException ("Unable to wrap "+obj+" of type "+(obj == null ? null : obj.GetType())+" with JsonData");
+		}
+		val = obj;
+	}
+
+	public JsonData() {
+	}
+
+	public JsonData(sbyte number) : this((long)number) {
+	}
+
+	public JsonData(byte number) : this((long)number) {
+	}
+
+	public JsonData(short number) : this((long)number) {
+	}
+
+	public JsonData(ushort number) : this((long)number) {
+	}
+
+	public JsonData(int number) : this((long)number) {
+	}
+
+	public JsonData(uint number) : this((long)number) {
+	}
+
+	public JsonData(ulong number) : this((long)number) {
+	}
+
+	public JsonData(float number) : this((double)number) {
+	}
+
+	public JsonData(decimal number) : this((double)number) {
+	}
+
+	#endregion
+
+	#region Implicit Conversions
+
+	// Implicit cast operations should not loose precision.
+	// As such, types not directly supported (unsigned numbers, decimal, etc.) cannot be implicitly cast from.
+
+	public static implicit operator JsonData(bool data) {
+		return new JsonData(data);
+	}
+
+	public static implicit operator JsonData(double data) {
+		return new JsonData(data);
+	}
+
+	public static implicit operator JsonData(long data) {
+		return new JsonData(data);
+	}
+
+	public static implicit operator JsonData(string data) {
+		return new JsonData(data);
+	}
+
+	#endregion
+
+	#region Explicit Conversions
+
+	// Explicit cast operations can loose precision.
+	// As such, types not normally supported can still be cast to.
+
+	public static explicit operator bool(JsonData data) {
+		if (data.IsBoolean) {
+			return data.GetBoolean();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a boolean");
+	}
+
+	public static explicit operator float(JsonData data) {
+		if (data.IsReal) {
+			return (float)data.GetReal();
+		}
+		if (data.IsNatural) {
+			return (float)data.GetNatural();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator double(JsonData data) {
+		if (data.IsReal) {
+			return data.GetReal();
+		}
+		if (data.IsNatural) {
+			return (double)data.GetNatural();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator decimal(JsonData data) {
+		if (data.IsReal) {
+			return (decimal)data.GetReal();
+		}
+		if (data.IsNatural) {
+			return (decimal)data.GetNatural();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator sbyte(JsonData data) {
+		if (data.IsNatural) {
+			return (sbyte)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (sbyte)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator byte(JsonData data) {
+		if (data.IsNatural) {
+			return (byte)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (byte)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator short(JsonData data) {
+		if (data.IsNatural) {
+			return (short)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (short)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator ushort(JsonData data) {
+		if (data.IsNatural) {
+			return (ushort)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (ushort)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator int(JsonData data) {
+		if (data.IsNatural) {
+			return (int)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (int)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator uint(JsonData data) {
+		if (data.IsNatural) {
+			return (uint)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (uint)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator long(JsonData data) {
+		if (data.IsNatural) {
+			return data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (long)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator ulong(JsonData data) {
+		if (data.IsNatural) {
+			return (ulong)data.GetNatural();
+		}
+		if (data.IsReal) {
+			return (ulong)data.GetReal();
+		}
+		throw new InvalidCastException("Instance of JsonData doesn't hold a real or natural number");
+	}
+
+	public static explicit operator string(JsonData data) {
+		return data.val == null ? null : data.val.ToString();
+	}
+
+	#endregion
+
+	#region ICollection Methods
+
+	void ICollection.CopyTo(Array array, int index) {
+		EnsureCollection().CopyTo(array, index);
+	}
+
+	#endregion
+
+	#region IDictionary Methods
+
+	void IDictionary.Add(object key, object value) {
+		JsonData data = ToJsonData(value);
+		EnsureDictionary().Add(key, data);
+		KeyValuePair<string, JsonData> entry = new KeyValuePair<string, JsonData>((string)key, data);
+		list.Add(entry);
+		json = null;
+	}
+
+	void IDictionary.Clear() {
+		EnsureDictionary().Clear();
+		list.Clear();
+		json = null;
+	}
+
+	bool IDictionary.Contains(object key) {
+		return EnsureDictionary().Contains(key);
+	}
+
+	IDictionaryEnumerator IDictionary.GetEnumerator() {
+		return ((IOrderedDictionary)this).GetEnumerator();
+	}
+
+	void IDictionary.Remove(object key) {
+		EnsureDictionary().Remove(key);
+		for (int i = 0; i < list.Count; i++) {
+			if (list[i].Key == (string)key) {
+				list.RemoveAt(i);
+				break;
+			}
+		}
+		json = null;
+	}
+
+	#endregion
+
+	#region IEnumerable Methods
+
+	IEnumerator IEnumerable.GetEnumerator() {
+		return EnsureCollection().GetEnumerator();
+	}
+
+	#endregion
+
+	#region IJsonWrapper Methods
+
+	public bool GetBoolean() {
+		if (IsBoolean) {
+			return (bool)val;
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold a boolean");
+	}
+
+	public double GetReal() {
+		if (IsReal) {
+			return (double)val;
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold a real number");
+	}
+
+	public long GetNatural() {
+		if (IsNatural) {
+			try {
+				return (long)val;
+			} catch {
+				throw new InvalidCastException("expected long but got "+val.GetType()+" from "+val);
+			}
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold a natural number");
+	}
+
+	public string GetString() {
+		if (IsString) {
+			return (string)val;
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold a string");
+	}
+
+	private IDictionary<string, JsonData> GetObject() {
+		if (IsObject) {
+			return (IDictionary<string, JsonData>)val;
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold an object");
+	}
+
+	private IList<JsonData> GetArray() {
+		if (IsArray) {
+			return (IList<JsonData>)val;
+		}
+		throw new InvalidOperationException("JsonData instance doesn't hold an array");
+	}
+
+	public void SetBoolean(bool val) {
+		type = JsonType.Boolean;
+		this.val = val;
+		json = null;
+	}
+
+	public void SetReal(double val) {
+		type = JsonType.Real;
+		this.val = val;
+		json = null;
+	}
+
+	public void SetNatural(long val) {
+		type = JsonType.Natural;
+		this.val = val;
+		json = null;
+	}
+
+	public void SetString(string val) {
+		type = JsonType.String;
+		this.val = val;
+		json = null;
+	}
+
+	void IJsonWrapper.ToJson(JsonWriter writer) {
+		ToJson(writer);
+	}
+
+	#endregion
+
+	#region IList Methods
+
+	int IList.Add(object value) {
+		return Add(value);
+	}
+
+	void IList.Clear() {
+		EnsureList().Clear();
+		json = null;
+	}
+
+	bool IList.Contains(object value) {
+		return EnsureList().Contains(value);
+	}
+
+	int IList.IndexOf(object value) {
+		return EnsureList().IndexOf(value);
+	}
+
+	void IList.Insert(int index, object value) {
+		EnsureList().Insert(index, value);
+		json = null;
+	}
+
+	void IList.Remove(object value) {
+		EnsureList().Remove(value);
+		json = null;
+	}
+
+	void IList.RemoveAt(int index) {
+		EnsureList().RemoveAt(index);
+		json = null;
+	}
+
+	#endregion
+
+	#region IOrderedDictionary Methods
+
+	IDictionaryEnumerator IOrderedDictionary.GetEnumerator() {
+		EnsureDictionary();
+		return new OrderedDictionaryEnumerator(list.GetEnumerator());
+	}
+
+	void IOrderedDictionary.Insert(int idx, object key, object value) {
+		string property = (string)key;
+		JsonData data = ToJsonData(value);
+		this[property] = data;
+		KeyValuePair<string, JsonData> entry = new KeyValuePair<string, JsonData>(property, data);
+		list.Insert(idx, entry);
+	}
+
+	void IOrderedDictionary.RemoveAt(int idx) {
+		EnsureDictionary();
+		GetObject().Remove(list[idx].Key);
+		list.RemoveAt(idx);
+	}
+
+	#endregion
+
+	#region Private Methods
+
+	private ICollection EnsureCollection() {
+		if (IsArray || IsObject) {
+			return (ICollection)val;
+		}
+		throw new InvalidOperationException("The JsonData instance has to be initialized first");
+	}
+
+	private IDictionary EnsureDictionary() {
+		if (IsObject) {
+			return (IDictionary)val;
+		}
+		if (type != JsonType.None) {
+			throw new InvalidOperationException("Instance of JsonData is not a dictionary");
+		}
+		type = JsonType.Object;
+		val = new Dictionary<string, JsonData>();
+		list = new List<KeyValuePair<string, JsonData>>();
+		return (IDictionary)val;
+	}
+
+	private IList EnsureList() {
+		if (IsArray) {
+			return (IList)val;
+		}
+		if (type != JsonType.None) {
+			throw new InvalidOperationException("Instance of JsonData is not a list");
+		}
+		type = JsonType.Array;
+		val = new List<JsonData>();
+		return (IList)val;
+	}
+
+	private JsonData ToJsonData(object obj) {
+		if (obj == null) {
+			return null;
+		}
+		if (obj is JsonData) {
+			return (JsonData)obj;
+		}
+		return new JsonData(obj);
+	}
+
+	private static void WriteJson(IJsonWrapper obj, JsonWriter writer) {
+		if (obj == null) {
+			writer.Write(null);
+		} else if (obj.IsString) {
+			writer.Write(obj.GetString());
+		} else if (obj.IsBoolean) {
+			writer.Write(obj.GetBoolean());
+		} else if (obj.IsReal) {
+			writer.Write(obj.GetReal());
+		} else if (obj.IsNatural) {
+			writer.Write(obj.GetNatural());
+		} else if (obj.IsArray) {
+			writer.WriteArrayStart();
+			foreach (object elem in (IList)obj) {
+				WriteJson((JsonData)elem, writer);
+			}
+			writer.WriteArrayEnd();
+		} else if (obj.IsObject) {
+			writer.WriteObjectStart();
+			foreach (DictionaryEntry entry in ((IDictionary)obj)) {
+				writer.WritePropertyName((string)entry.Key);
+				WriteJson((JsonData)entry.Value, writer);
+			}
+			writer.WriteObjectEnd();
+		}
+	}
+
+	#endregion
+
+	public int Add(object value) {
+		JsonData data = ToJsonData(value);
+		json = null;
+		return EnsureList().Add(data);
+	}
+
+	public void Clear() {
+		if (IsObject) {
+			((IDictionary)this).Clear();
+		} else if (IsArray) {
+			((IList)this).Clear();
+		}
+	}
+
+	public bool Equals(JsonData data) {
+		return Equals((object)data);
+	}
+
+	public override bool Equals(object obj) {
+		if (obj == null) {
+			return false;
+		}
+		if (!(obj is JsonData)) {
+			return false;
+		}
+		JsonData data = (JsonData)obj;
+		if (type != data.type) {
+			return false;
+		}
+		switch (type) {
+		case JsonType.None:
+			return true;
+		case JsonType.Object:
+			return GetObject().Equals(data.GetObject());
+		case JsonType.Array:
+			return GetArray().Equals(data.GetArray());
+		case JsonType.String:
+			return GetString().Equals(data.GetString());
+		case JsonType.Natural:
+			return GetNatural().Equals(data.GetNatural());
+		case JsonType.Real:
+			return GetReal().Equals(data.GetReal());
+		case JsonType.Boolean:
+			return GetBoolean().Equals(data.GetBoolean());
+		}
+		return false;
+	}
+
+	public override int GetHashCode() {
+		if (val == null) {
+			return 0;
+		}
+		return val.GetHashCode();
+	}
+
+	public JsonType GetJsonType() {
+		return type;
+	}
+
+	public void SetJsonType(JsonType type) {
+		if (this.type == type) {
+			return;
+		}
+		switch (type) {
+		case JsonType.None:
+			break;
+		case JsonType.Object:
+			val = new Dictionary<string, JsonData>();
+			list = new List<KeyValuePair<string, JsonData>>();
+			break;
+		case JsonType.Array:
+			val = new List<JsonData>();
+			break;
+		case JsonType.String:
+			val = default(string);
+			break;
+		case JsonType.Natural:
+			val = default(long);
+			break;
+		case JsonType.Real:
+			val = default(double);
+			break;
+		case JsonType.Boolean:
+			val = default(bool);
+			break;
+		}
+		this.type = type;
+	}
+
+	public string ToJson() {
+		if (json != null) {
+			return json;
+		}
+		StringWriter sw = new StringWriter();
+		JsonWriter writer = new JsonWriter(sw);
+		writer.Validate = false;
+		WriteJson(this, writer);
+		json = sw.ToString();
+		return json;
+	}
+
+	public void ToJson(JsonWriter writer) {
+		bool old = writer.Validate;
+		writer.Validate = false;
+		WriteJson(this, writer);
+		writer.Validate = old;
+	}
+
+	public override string ToString() {
+		switch (type) {
+		case JsonType.Array:
+			return "JsonData array";
+		case JsonType.Object:
+			return "JsonData object";
+		case JsonType.None:
+			return "Uninitialized JsonData";
+		}
+		return val == null ? "null" : val.ToString();
+	}
+}
+
+internal class OrderedDictionaryEnumerator : IDictionaryEnumerator {
+	private IEnumerator<KeyValuePair<string, JsonData>> enumerator;
+
+	public object Current {
+		get { return Entry; }
+	}
+
+	public DictionaryEntry Entry {
+		get {
+			KeyValuePair<string, JsonData> curr = enumerator.Current;
+			return new DictionaryEntry(curr.Key, curr.Value);
+		}
+	}
+
+	public object Key {
+		get { return enumerator.Current.Key; }
+	}
+
+	public object Value {
+		get { return enumerator.Current.Value; }
+	}
+
+	public OrderedDictionaryEnumerator(IEnumerator<KeyValuePair<string, JsonData>> enumerator) {
+		this.enumerator = enumerator;
+	}
+
+	public bool MoveNext() {
+		return enumerator.MoveNext();
+	}
+
+	public void Reset() {
+		enumerator.Reset();
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonData.cs.meta b/Assets/UnityLitJson/JsonData.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ddcd1c3db4cbb0903c921736e3d1edeb73f5e51f
--- /dev/null
+++ b/Assets/UnityLitJson/JsonData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5e0d7b2c5d854094d9eba3fe19988b8c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonException.cs b/Assets/UnityLitJson/JsonException.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8eddae867d6fe2e335e0cabcc335317defcb5d2e
--- /dev/null
+++ b/Assets/UnityLitJson/JsonException.cs
@@ -0,0 +1,32 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+
+namespace LitJson {
+
+	/// <summary>
+	/// Base class throwed by LitJSON when a parsing error occurs.
+	/// </summary>
+	public class JsonException : Exception {
+
+		public JsonException() : base() {}
+
+		internal JsonException(ParserToken token) : base(string.Format("Invalid token '{0}' in input string", token)){ }
+
+		internal JsonException(ParserToken token, Exception inner) : base(string.Format("Invalid token '{0}' in input string", token), inner){ }
+
+		internal JsonException(int c) : base(string.Format("Invalid character '{0}' in input string", (char)c)){ }
+		
+		internal JsonException(int c, Exception inner) : base(string.Format("Invalid character '{0}' in input string", (char)c), inner){ }
+		
+		public JsonException(string message) : base(message){ }
+
+		public JsonException(string message, Exception inner) : base(message, inner){ }
+	}
+
+}
diff --git a/Assets/UnityLitJson/JsonException.cs.meta b/Assets/UnityLitJson/JsonException.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..41fb92e1ea2ee10f12355dffc8cb452b3c91443d
--- /dev/null
+++ b/Assets/UnityLitJson/JsonException.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9c65e5da26babc34ba3eba3c0bd58c3d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonMapper.cs b/Assets/UnityLitJson/JsonMapper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..24d0ef0024de88e37d657521feb0ff6fc0b3a3bc
--- /dev/null
+++ b/Assets/UnityLitJson/JsonMapper.cs
@@ -0,0 +1,882 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Reflection;
+using System.Linq;
+
+namespace LitJson {
+
+internal struct PropertyMetadata {
+	public Type Type { get; set; }
+	public MemberInfo Info { get; set; }
+	public JsonIgnoreWhen Ignore { get; set; }
+	public string Alias { get; set; }
+	public bool IsField { get; set; }
+	public bool Include { get; set; }
+}
+
+internal struct ArrayMetadata {
+	public bool IsArray { get; set; }
+	public bool IsList { get; set; }
+
+	private Type elemType;
+	public Type ElementType {
+		get {
+			if (elemType == null) {
+				elemType = typeof(JsonData);
+			}
+			return elemType;
+		}
+		set {
+			elemType = value;
+		}
+	}
+}
+
+internal struct ObjectMetadata {
+	public IDictionary<string, PropertyMetadata> Properties { get; set; }
+	public bool IsDictionary { get; set; }
+
+	private Type elemType;
+	public Type ElementType {
+		get {
+			if (elemType == null) {
+				elemType = typeof(JsonData);
+			}
+			return elemType;
+		}
+		set {
+			elemType = value;
+		}
+	}
+}
+
+internal delegate void ExporterFunc(object obj, JsonWriter writer);
+public delegate void ExporterFunc<T>(T obj, JsonWriter writer);
+
+internal delegate object ImporterFunc(object input);
+public delegate TValue ImporterFunc<TJson, TValue>(TJson input);
+
+internal delegate object FactoryFunc();
+public delegate T FactoryFunc<T>();
+
+public delegate IJsonWrapper WrapperFactory();
+
+/// <summary>
+/// JSON to .Net object and object to JSON conversions.
+/// </summary>
+public class JsonMapper {
+	private static readonly int maxNestingDepth;
+	private static readonly IFormatProvider datetimeFormat;
+
+	private static readonly IDictionary<Type, ExporterFunc> baseExportTable;
+	private static readonly IDictionary<Type, ExporterFunc> customExportTable;
+
+	private static readonly IDictionary<Type, IDictionary<Type, ImporterFunc>> baseImportTable;
+	private static readonly IDictionary<Type, IDictionary<Type, ImporterFunc>> customImportTable;
+
+	private static readonly IDictionary<Type, FactoryFunc> customFactoryTable;
+
+	private static readonly IDictionary<Type, ArrayMetadata> arrayMetadata;
+
+	private static readonly IDictionary<Type, IDictionary<Type, MethodInfo>> convOps;
+
+	private static readonly IDictionary<Type, ObjectMetadata> objectMetadata;
+
+	static JsonMapper() {
+		maxNestingDepth = 100;
+		datetimeFormat = DateTimeFormatInfo.InvariantInfo;
+
+		arrayMetadata = new Dictionary<Type, ArrayMetadata>();
+		objectMetadata = new Dictionary<Type, ObjectMetadata>();
+		convOps = new Dictionary<Type, IDictionary<Type, MethodInfo>>();
+
+		baseExportTable = new Dictionary<Type, ExporterFunc>();
+		customExportTable = new Dictionary<Type, ExporterFunc>();
+
+		baseImportTable = new Dictionary<Type, IDictionary<Type, ImporterFunc>>();
+		customImportTable = new Dictionary<Type, IDictionary<Type, ImporterFunc>>();
+
+		customFactoryTable = new Dictionary<Type, FactoryFunc>();
+
+		RegisterBaseExporters();
+		RegisterBaseImporters();
+	}
+
+	private static ArrayMetadata AddArrayMetadata(Type type) {
+		if (arrayMetadata.ContainsKey(type)) {
+			return arrayMetadata[type];
+		}
+		ArrayMetadata data = new ArrayMetadata();
+		data.IsArray = type.IsArray;
+		if (type.GetInterface("System.Collections.IList") != null) {
+			data.IsList = true;
+		}
+		foreach (PropertyInfo pinfo in type.GetProperties()) {
+			if (pinfo.Name != "Item") {
+				continue;
+			}
+			ParameterInfo[] parameters = pinfo.GetIndexParameters();
+			if (parameters.Length != 1) {
+				continue;
+			}
+			if (parameters[0].ParameterType == typeof(int)) {
+				data.ElementType = pinfo.PropertyType;
+			}
+		}
+		arrayMetadata[type] = data;
+		return data;
+	}
+
+	private static ObjectMetadata AddObjectMetadata(Type type) {
+		if (objectMetadata.ContainsKey(type)) {
+			return objectMetadata[type];
+		}
+		ObjectMetadata data = new ObjectMetadata();
+		if (type.GetInterface("System.Collections.IDictionary") != null) {
+			data.IsDictionary = true;
+		}
+		data.Properties = new Dictionary<string, PropertyMetadata>();
+		HashSet<string> ignoredMembers = new HashSet<string>();
+		object[] memberAttrs = type.GetCustomAttributes(typeof(JsonIgnoreMember), true);
+		foreach (JsonIgnoreMember memberAttr in memberAttrs) {
+			ignoredMembers.UnionWith(memberAttr.Members);
+		}
+		// Get all kinds of declared properties
+		BindingFlags pflags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
+		foreach (PropertyInfo pinfo in type.GetProperties(pflags)) {
+			if (pinfo.Name == "Item") {
+				ParameterInfo[] parameters = pinfo.GetIndexParameters();
+				if (parameters.Length != 1) {
+					continue;
+				}
+				if (parameters[0].ParameterType == typeof(string)) {
+					data.ElementType = pinfo.PropertyType;
+				}
+				continue;
+			}
+			// Include properties automatically that have at least one public accessor
+			bool autoInclude =
+				(pinfo.GetGetMethod() != null && pinfo.GetGetMethod().IsPublic) ||
+				(pinfo.GetSetMethod() != null && pinfo.GetSetMethod().IsPublic);
+			// If neither accessor is public and we don't have a [JsonInclude] attribute, skip it
+			if (!autoInclude && pinfo.GetCustomAttributes(typeof(JsonInclude), true).Count() == 0) {
+				continue;
+			}
+			PropertyMetadata pdata = new PropertyMetadata();
+			pdata.Info = pinfo;
+			pdata.Type = pinfo.PropertyType;
+			object[] ignoreAttrs = pinfo.GetCustomAttributes(typeof(JsonIgnore), true).ToArray();
+			if (ignoreAttrs.Length > 0) {
+				pdata.Ignore = ((JsonIgnore)ignoreAttrs[0]).Usage;
+			} else if (ignoredMembers.Contains(pinfo.Name)) {
+				pdata.Ignore = JsonIgnoreWhen.Serializing | JsonIgnoreWhen.Deserializing;
+			}
+			object[] aliasAttrs = pinfo.GetCustomAttributes(typeof(JsonAlias), true).ToArray();
+			if (aliasAttrs.Length > 0) {
+				JsonAlias aliasAttr = (JsonAlias)aliasAttrs[0];
+				if (aliasAttr.Alias == pinfo.Name) {
+					throw new JsonException(string.Format("Alias name '{0}' must be different from the property it represents for type '{1}'", pinfo.Name, type));
+				}
+				if (data.Properties.ContainsKey(aliasAttr.Alias)) {
+					throw new JsonException(string.Format("'{0}' already contains the property or alias name '{1}'", type, aliasAttr.Alias));
+				}
+				pdata.Alias = aliasAttr.Alias;
+				if (aliasAttr.AcceptOriginal) {
+					data.Properties.Add(pinfo.Name, pdata);
+				}
+			}
+			if (pdata.Alias != null) {
+				data.Properties.Add(pdata.Alias, pdata);
+			} else {
+				if (data.Properties.ContainsKey(pinfo.Name)) {
+					throw new JsonException(string.Format("'{0}' already contains the property or alias name '{1}'", type, pinfo.Name));
+				}
+				data.Properties.Add(pinfo.Name, pdata);
+			}
+		}
+		// Get all kinds of declared fields
+		BindingFlags fflags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
+		foreach (FieldInfo finfo in type.GetFields(fflags)) {
+			// If the field isn't public and doesn't have an [Include] attribute, skip it
+			if (!finfo.IsPublic && finfo.GetCustomAttributes(typeof(JsonInclude), true).Count() == 0) {
+				continue;
+			}
+			PropertyMetadata pdata = new PropertyMetadata();
+			pdata.Info = finfo;
+			pdata.IsField = true;
+			pdata.Type = finfo.FieldType;
+			object[] ignoreAttrs = finfo.GetCustomAttributes(typeof(JsonIgnore), true).ToArray();
+			if (ignoreAttrs.Length > 0) {
+				pdata.Ignore = ((JsonIgnore)ignoreAttrs[0]).Usage;
+			} else if (ignoredMembers.Contains(finfo.Name)) {
+				pdata.Ignore = JsonIgnoreWhen.Serializing | JsonIgnoreWhen.Deserializing;
+			}
+			object[] aliasAttrs = finfo.GetCustomAttributes(typeof(JsonAlias), true).ToArray();
+			if (aliasAttrs.Length > 0) {
+				JsonAlias aliasAttr = (JsonAlias)aliasAttrs[0];
+				if (aliasAttr.Alias == finfo.Name) {
+					throw new JsonException(string.Format("Alias name '{0}' must be different from the field it represents for type '{1}'", finfo.Name, type));
+				}
+				if (data.Properties.ContainsKey(aliasAttr.Alias)) {
+					throw new JsonException(string.Format("'{0}' already contains the field or alias name '{1}'", type, aliasAttr.Alias));
+				}
+				pdata.Alias = aliasAttr.Alias;
+				if (aliasAttr.AcceptOriginal) {
+					data.Properties.Add(finfo.Name, pdata);
+				}
+			}
+			if (pdata.Alias != null) {
+				data.Properties.Add(pdata.Alias, pdata);
+			} else {
+				if (data.Properties.ContainsKey(finfo.Name)) {
+					throw new JsonException(string.Format("'{0}' already contains the field or alias name '{1}'", type, finfo.Name));
+				}
+				data.Properties.Add(finfo.Name, pdata);
+			}
+		}
+		objectMetadata.Add(type, data);
+		return data;
+	}
+
+	private static object CreateInstance(Type type) {
+		FactoryFunc factory;
+		if (customFactoryTable.TryGetValue(type, out factory)) {
+			return factory();
+		}
+		// construct the new instance with the default constructor (if present), handles structs as well
+		BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
+		ConstructorInfo constructor = type.GetConstructor(flags, null, new Type[0], null);
+		if (constructor != null) {
+			constructor.Invoke(null);   
+		}
+		return Activator.CreateInstance(type);
+	}
+
+	private static MethodInfo GetConvOp(Type t1, Type t2) {
+		if (!convOps.ContainsKey(t1)) {
+			convOps.Add(t1, new Dictionary<Type, MethodInfo>());
+		}
+		if (convOps[t1].ContainsKey(t2)) {
+			return convOps[t1][t2];
+		}
+		MethodInfo op = t1.GetMethod("op_Implicit", new Type[]{t2});
+		convOps[t1][t2] = op;
+		return op;
+	}
+
+	private static ImporterFunc GetImporter(Type jsonType, Type valueType) {
+		if (customImportTable.ContainsKey(jsonType) &&
+			customImportTable[jsonType].ContainsKey(valueType)) {
+
+			return customImportTable[jsonType][valueType];
+		}
+		if (baseImportTable.ContainsKey(jsonType) &&
+			baseImportTable[jsonType].ContainsKey(valueType)) {
+
+			return baseImportTable[jsonType][valueType];
+		}
+		return null;
+	}
+
+	private static ExporterFunc GetExporter(Type valueType) {
+		if (customExportTable.ContainsKey(valueType)) {
+			return customExportTable[valueType];
+		}
+		if (baseExportTable.ContainsKey(valueType)) {
+			return baseExportTable[valueType];
+		}
+		return null;
+	}
+
+	private static object ReadValue(Type instType, JsonReader reader) {
+		reader.Read();
+		if (reader.Token == JsonToken.ArrayEnd) {
+			return null;
+		}
+		Type underlyingType = Nullable.GetUnderlyingType(instType);
+		Type valueType = underlyingType ?? instType;
+		if (reader.Token == JsonToken.Null) {
+			#if JSON_WINRT || (UNITY_METRO && !UNITY_EDITOR)
+			/* IsClass is made a getter here as a comparability
+			patch for WinRT build targets, see Platform.cs */
+			if (instType.IsClass() || underlyingType != null) {
+			#else
+			if (instType.IsClass || underlyingType != null) {
+			#endif
+				return null;
+			}
+			throw new JsonException(string.Format("Can't assign null to an instance of type {0}", instType));
+		}
+		if (reader.Token == JsonToken.Real ||
+			reader.Token == JsonToken.Natural ||
+			reader.Token == JsonToken.String ||
+			reader.Token == JsonToken.Boolean) {
+
+			Type jsonType = reader.Value.GetType();
+			if (valueType.IsAssignableFrom(jsonType)) {
+				return reader.Value;
+			}
+			// Try to find a custom or base importer
+			ImporterFunc importer = GetImporter(jsonType, valueType);
+			if (importer != null) {
+				return importer(reader.Value);
+			}
+			// Maybe it's an enum
+			#if JSON_WINRT || (UNITY_METRO && !UNITY_EDITOR)
+			/* IsClass is made a getter here as a comparability
+			patch for WinRT build targets, see Platform.cs */
+			if (valueType.IsEnum()) {
+			#else
+			if (valueType.IsEnum) {
+			#endif
+				return Enum.ToObject(valueType, reader.Value);
+			}
+			// Try using an implicit conversion operator
+			MethodInfo convOp = GetConvOp(valueType, jsonType);
+			if (convOp != null) {
+				return convOp.Invoke(null, new object[]{reader.Value});
+			}
+			// No luck
+			throw new JsonException(string.Format("Can't assign value '{0}' (type {1}) to type {2}", reader.Value, jsonType, instType));
+		}
+		object instance = null;
+		if (reader.Token == JsonToken.ArrayStart) {
+			// If there's a custom importer that fits, use it
+			ImporterFunc importer = GetImporter(typeof(JsonData), instType);
+			if (importer != null) {
+				instType = typeof(JsonData);
+			}
+			AddArrayMetadata(instType);
+			ArrayMetadata tdata = arrayMetadata[instType];
+			if (!tdata.IsArray && !tdata.IsList) {
+				throw new JsonException(string.Format("Type {0} can't act as an array", instType));
+			}
+			IList list;
+			Type elemType;
+			if (!tdata.IsArray) {
+				list = (IList)CreateInstance(instType);
+				elemType = tdata.ElementType;
+			} else {
+				//list = new ArrayList();
+				list = new List<object>();
+				elemType = instType.GetElementType();
+			}
+			while (true) {
+				object item = ReadValue(elemType, reader);
+				if (item == null && reader.Token == JsonToken.ArrayEnd) {
+					break;
+				}
+				list.Add(item);
+			}
+			if (tdata.IsArray) {
+				int n = list.Count;
+				instance = Array.CreateInstance(elemType, n);
+				for (int i = 0; i < n; i++) {
+					((Array)instance).SetValue (list[i], i);
+				}
+			} else {
+				instance = list;
+			}
+			if (importer != null) {
+				instance = importer(instance);
+			}
+		} else if (reader.Token == JsonToken.ObjectStart) {
+			bool done = false;
+			string property = null;
+			reader.Read();
+			if (reader.Token == JsonToken.ObjectEnd) {
+				done = true;
+			} else {
+				property = (string)reader.Value;
+				if (reader.TypeHinting && property == reader.HintTypeName) {
+					reader.Read();
+					string typeName = (string)reader.Value;
+					reader.Read();
+					if ((string)reader.Value == reader.HintValueName) {
+						valueType = Type.GetType(typeName);
+						object value = ReadValue(valueType, reader);
+						reader.Read();
+						if (reader.Token != JsonToken.ObjectEnd) {
+							throw new JsonException(string.Format("Invalid type hinting object, has too many properties: {0}...", reader.Token));
+						}
+						return value;
+					} else {
+						throw new JsonException(string.Format("Expected \"{0}\" property for type hinting but instead got \"{1}\"", reader.HintValueName, reader.Value));
+					}
+				}
+			}
+			// If there's a custom importer that fits, use to create a JsonData type instead.
+			// Once the object is deserialzied, it will be invoked to create the actual converted object.
+			ImporterFunc importer = GetImporter(typeof(JsonData), valueType);
+			if (importer != null) {
+				valueType = typeof(JsonData);
+			}
+			ObjectMetadata tdata = AddObjectMetadata(valueType);
+			instance = CreateInstance(valueType);
+			bool firstRun = true;
+			while (!done) {
+				if (firstRun) {
+					firstRun = false;
+				} else {
+					reader.Read();
+					if (reader.Token == JsonToken.ObjectEnd) {
+						break;   
+					}
+					property = (string)reader.Value;
+				}
+				PropertyMetadata pdata;
+				if (tdata.Properties.TryGetValue(property, out pdata)) {
+					// Don't deserialize a field or property that has a JsonIgnore attribute with deserialization usage.
+					if ((pdata.Ignore & JsonIgnoreWhen.Deserializing) > 0) {
+						ReadSkip(reader);
+						continue;
+					}
+					if (pdata.IsField) {
+						((FieldInfo)pdata.Info).SetValue(instance, ReadValue(pdata.Type, reader));
+					} else {
+						PropertyInfo pinfo = (PropertyInfo)pdata.Info;
+						if (pinfo.CanWrite) {
+							pinfo.SetValue(instance, ReadValue(pdata.Type, reader), null);
+						} else {
+							ReadValue(pdata.Type, reader);
+						}
+					}
+				} else {
+					if (!tdata.IsDictionary) {
+						if (!reader.SkipNonMembers) {
+							throw new JsonException(string.Format("The type {0} doesn't have the property '{1}'", instType, property));
+						} else {
+							ReadSkip(reader);
+							continue;
+						}
+					}
+					((IDictionary)instance).Add(property, ReadValue(tdata.ElementType, reader));
+				}
+			}
+			if (importer != null) {
+				instance = importer(instance);
+			}
+		}
+		return instance;
+	}
+
+	private static IJsonWrapper ReadValue(WrapperFactory factory, JsonReader reader) {
+		reader.Read();
+		if (reader.Token == JsonToken.ArrayEnd ||
+			reader.Token == JsonToken.Null) {
+
+			return null;
+		}
+		IJsonWrapper instance = factory();
+		if (reader.Token == JsonToken.String) {
+			instance.SetString((string)reader.Value);
+			return instance;
+		}
+		if (reader.Token == JsonToken.Real) {
+			instance.SetReal((double)reader.Value);
+			return instance;
+		}
+		if (reader.Token == JsonToken.Natural) {
+			instance.SetNatural((long)reader.Value);
+			return instance;
+		}
+		if (reader.Token == JsonToken.Boolean) {
+			instance.SetBoolean((bool)reader.Value);
+			return instance;
+		}
+		if (reader.Token == JsonToken.ArrayStart) {
+			instance.SetJsonType(JsonType.Array);
+			while (true) {
+				IJsonWrapper item = ReadValue(factory, reader);
+				if (item == null && reader.Token == JsonToken.ArrayEnd) {
+					break;
+				}
+				((IList)instance).Add(item);
+			}
+		} else if (reader.Token == JsonToken.ObjectStart) {
+			instance.SetJsonType(JsonType.Object);
+			while (true) {
+				reader.Read();
+				if (reader.Token == JsonToken.ObjectEnd) {
+					break;
+				}
+				string property = (string)reader.Value;
+				((IDictionary)instance)[property] = ReadValue(factory, reader);
+			}
+		}
+		return instance;
+	}
+
+	private static void ReadSkip(JsonReader reader) {
+		ToWrapper(delegate {
+			return new JsonMockWrapper();
+		}, reader);
+	}
+
+	private static void RegisterBaseExporters() {
+		baseExportTable[typeof(sbyte)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((sbyte)obj));
+		};
+		baseExportTable[typeof(byte)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((byte)obj));
+		};
+		baseExportTable[typeof(char)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToString((char)obj));
+		};
+		baseExportTable[typeof(short)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((short)obj));
+		};
+		baseExportTable[typeof(ushort)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((ushort)obj));
+		};
+		baseExportTable[typeof(int)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((int)obj));
+		};
+		baseExportTable[typeof(uint)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToInt64((uint)obj));
+		};
+		baseExportTable[typeof(ulong)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToUInt64((ulong)obj));
+		};
+		baseExportTable[typeof(float)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToDouble((float)obj));
+		};
+		baseExportTable[typeof(decimal)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToDecimal((decimal)obj));
+		};
+		baseExportTable[typeof(DateTime)] = delegate(object obj, JsonWriter writer) {
+			writer.Write(Convert.ToString((DateTime)obj, datetimeFormat));
+		};
+	}
+
+	private static void RegisterBaseImporters() {
+		RegisterImporter(baseImportTable, typeof(long), typeof(sbyte), delegate(object input) {
+			return Convert.ToSByte((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(byte), delegate(object input) {
+			return Convert.ToByte((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(short), delegate(object input) {
+			return Convert.ToInt16((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(ushort), delegate(object input) {
+			return Convert.ToUInt16((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(int), delegate(object input) {
+			return Convert.ToInt32((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(uint), delegate(object input) {
+			return Convert.ToUInt32((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(ulong), delegate(object input) {
+			return Convert.ToUInt64((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(float), delegate(object input) {
+			return Convert.ToSingle((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(double), delegate(object input) {
+			return Convert.ToDouble((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(long), typeof(decimal), delegate(object input) {
+			return Convert.ToDecimal((long)input);
+		});
+		RegisterImporter(baseImportTable, typeof(double), typeof(float), delegate(object input) {
+			return Convert.ToSingle((double)input);
+		});
+		RegisterImporter(baseImportTable, typeof(double), typeof(decimal), delegate(object input) {
+			return Convert.ToDecimal((double)input);
+		});
+		RegisterImporter(baseImportTable, typeof(string), typeof(char), delegate(object input) {
+			return Convert.ToChar((string)input);
+		});
+		RegisterImporter(baseImportTable, typeof(string), typeof(DateTime), delegate(object input) {
+			return Convert.ToDateTime((string)input, datetimeFormat);
+		});
+	}
+
+	private static void RegisterImporter(IDictionary<Type, IDictionary<Type, ImporterFunc>> table, Type jsonType, Type valueType, ImporterFunc importer) {
+		if (!table.ContainsKey(jsonType)) {
+			table.Add(jsonType, new Dictionary<Type, ImporterFunc>());
+		}
+		table[jsonType][valueType] = importer;
+	}
+
+	private static void WriteValue(object obj, JsonWriter writer, bool privateWriter, int depth) {
+		if (depth > maxNestingDepth) {
+			throw new JsonException(string.Format("Max allowed object depth reached while trying to export from type {0}", obj.GetType()));
+		}
+		if (obj == null) {
+			writer.Write(null);
+			return;
+		}
+		if (obj is IJsonWrapper) {
+			if (privateWriter) {
+				writer.TextWriter.Write(((IJsonWrapper)obj).ToJson());
+			} else {
+				((IJsonWrapper)obj).ToJson(writer);
+			}
+			return;
+		}
+		if (obj is string) {
+			writer.Write((string)obj);
+			return;
+		}
+		if (obj is double) {
+			writer.Write((double)obj);
+			return;
+		}
+		if (obj is long) {
+			writer.Write((long)obj);
+			return;
+		}
+		if (obj is bool) {
+			writer.Write((bool)obj);
+			return;
+		}
+		if (obj is Array) {
+			writer.WriteArrayStart();
+			Array arr = (Array)obj;
+			Type elemType = arr.GetType().GetElementType();
+			foreach (object elem in arr) {
+				// if the collection contains polymorphic elements, we need to include type information for deserialization
+				if (writer.TypeHinting && elem != null & elem.GetType() != elemType) {
+					writer.WriteObjectStart();
+					writer.WritePropertyName(writer.HintTypeName);
+					writer.Write(elem.GetType().FullName);
+					writer.WritePropertyName(writer.HintValueName);
+					WriteValue(elem, writer, privateWriter, depth + 1);
+					writer.WriteObjectEnd();
+				} else {
+					WriteValue(elem, writer, privateWriter, depth + 1);    
+				}
+			}
+			writer.WriteArrayEnd();
+			return;
+		}
+		if (obj is IList) {
+			writer.WriteArrayStart();
+			IList list = (IList)obj;
+			// collection might be non-generic type like Arraylist
+			Type elemType = typeof(object);
+			if (list.GetType().GetGenericArguments().Length > 0) {
+				// collection is a generic type like List<T>
+				elemType = list.GetType().GetGenericArguments()[0];
+			}
+			foreach (object elem in list) {
+				// if the collection contains polymorphic elements, we need to include type information for deserialization
+				if (writer.TypeHinting && elem != null && elem.GetType() != elemType) {
+					writer.WriteObjectStart();
+					writer.WritePropertyName(writer.HintTypeName);
+					writer.Write(elem.GetType().AssemblyQualifiedName);
+					writer.WritePropertyName(writer.HintValueName);
+					WriteValue(elem, writer, privateWriter, depth + 1);
+					writer.WriteObjectEnd();
+				} else {
+					WriteValue(elem, writer, privateWriter, depth + 1);    
+				}
+			}
+			writer.WriteArrayEnd();
+			return;
+		}
+		if (obj is IDictionary) {
+			writer.WriteObjectStart();
+			IDictionary dict = (IDictionary)obj;
+			// collection might be non-generic type like Hashtable
+			Type elemType = typeof(object);
+			if (dict.GetType().GetGenericArguments().Length > 1) {
+				// collection is a generic type like Dictionary<T, V>
+				elemType = dict.GetType().GetGenericArguments()[1];
+			}
+			foreach (DictionaryEntry entry in dict) {
+				writer.WritePropertyName((string)entry.Key);
+				// if the collection contains polymorphic elements, we need to include type information for deserialization
+				if (writer.TypeHinting && entry.Value != null && entry.Value.GetType() != elemType) {
+					writer.WriteObjectStart();
+					writer.WritePropertyName(writer.HintTypeName);
+					writer.Write(entry.Value.GetType().AssemblyQualifiedName);
+					writer.WritePropertyName(writer.HintValueName);
+					WriteValue(entry.Value, writer, privateWriter, depth + 1);
+					writer.WriteObjectEnd();
+				} else {
+					WriteValue(entry.Value, writer, privateWriter, depth + 1);
+				}
+			}
+			writer.WriteObjectEnd();
+			return;
+		}
+		Type objType = obj.GetType();
+		// Try a base or custom importer if one exists
+		ExporterFunc exporter = GetExporter(objType);
+		if (exporter != null) {
+			exporter(obj, writer);
+			return;
+		}
+		// Last option, let's see if it's an enum
+		if (obj is Enum) {
+			Type enumType = Enum.GetUnderlyingType(objType);
+			if (enumType == typeof(long)) {
+				writer.Write((long)obj);
+			} else {
+				ExporterFunc enumConverter = GetExporter(enumType);
+				if (enumConverter != null) {
+					enumConverter(obj, writer);
+				}
+			}
+			return;
+		}
+		// Okay, it looks like the input should be exported as an object
+		ObjectMetadata tdata = AddObjectMetadata(objType);
+		writer.WriteObjectStart();
+		foreach (string property in tdata.Properties.Keys) {
+			PropertyMetadata pdata = tdata.Properties[property];
+			// Don't serialize soft aliases (which get added to ObjectMetadata.Properties twice).
+			if (pdata.Alias != null && property != pdata.Info.Name && tdata.Properties.ContainsKey(pdata.Info.Name)) {
+				continue;
+			}
+			// Don't serialize a field or property with the JsonIgnore attribute with serialization usage
+			if ((pdata.Ignore & JsonIgnoreWhen.Serializing) > 0) {
+				continue;
+			}
+			if (pdata.IsField) {
+				FieldInfo info = (FieldInfo)pdata.Info;
+				if (pdata.Alias != null) {
+					writer.WritePropertyName(pdata.Alias);
+				} else {
+					writer.WritePropertyName(info.Name);
+				}
+				object value = info.GetValue(obj);
+				if (writer.TypeHinting && value != null && info.FieldType != value.GetType()) {
+					// the object stored in the field might be a different type that what was declared, need type hinting
+					writer.WriteObjectStart();
+					writer.WritePropertyName(writer.HintTypeName);
+					writer.Write(value.GetType().AssemblyQualifiedName);
+					writer.WritePropertyName(writer.HintValueName);
+					WriteValue(value, writer, privateWriter, depth + 1);
+					writer.WriteObjectEnd();
+				} else {
+					WriteValue(value, writer, privateWriter, depth + 1);
+				}
+			}
+			else {
+				PropertyInfo info = (PropertyInfo)pdata.Info;
+				if (info.CanRead) {
+					if (pdata.Alias != null) {
+						writer.WritePropertyName(pdata.Alias);
+					} else {
+						writer.WritePropertyName(info.Name);
+					}
+					object value = info.GetValue(obj, null);
+					if (writer.TypeHinting && value != null && info.PropertyType != value.GetType()) {
+						// the object stored in the property might be a different type that what was declared, need type hinting
+						writer.WriteObjectStart();
+						writer.WritePropertyName(writer.HintTypeName);
+						writer.Write(value.GetType().AssemblyQualifiedName);
+						writer.WritePropertyName(writer.HintValueName);
+						WriteValue(value, writer, privateWriter, depth + 1);
+						writer.WriteObjectEnd();
+					} else {
+						WriteValue(value, writer, privateWriter, depth + 1);
+					}
+				}
+			}
+		}
+		writer.WriteObjectEnd();
+	}
+
+	public static string ToJson(object obj) {
+		JsonWriter writer = new JsonWriter();
+		WriteValue(obj, writer, true, 0);
+		return writer.ToString();
+	}
+
+	public static void ToJson(object obj, JsonWriter writer) {
+		WriteValue(obj, writer, false, 0);
+	}
+
+	public static JsonData ToObject(JsonReader reader) {
+		return (JsonData)ToWrapper(delegate {
+			return new JsonData();
+		}, reader);
+	}
+
+	public static JsonData ToObject(TextReader reader) {
+		JsonReader jsonReader = new JsonReader(reader);
+		return (JsonData)ToWrapper(delegate {
+			return new JsonData();
+		}, jsonReader);
+	}
+
+	public static JsonData ToObject(string json) {
+		return (JsonData)ToWrapper(delegate {
+			return new JsonData();
+		}, json);
+	}
+
+	public static T ToObject<T>(JsonReader reader) {
+		return (T)ReadValue(typeof(T), reader);
+	}
+
+	public static T ToObject<T>(TextReader reader) {
+		JsonReader jsonReader = new JsonReader(reader);
+		return (T)ReadValue(typeof(T), jsonReader);
+	}
+
+	public static T ToObject<T>(string json) {
+		JsonReader reader = new JsonReader(json);
+		return (T)ReadValue(typeof(T), reader);
+	}
+
+	public static IJsonWrapper ToWrapper(WrapperFactory factory, JsonReader reader) {
+		return ReadValue(factory, reader);
+	}
+
+	public static IJsonWrapper ToWrapper(WrapperFactory factory, string json) {
+		JsonReader reader = new JsonReader(json);
+		return ReadValue(factory, reader);
+	}
+
+	public static void RegisterExporter<T>(ExporterFunc<T> exporter) {
+		ExporterFunc wrapper = delegate(object obj, JsonWriter writer) {
+			exporter((T)obj, writer);
+		};
+		customExportTable[typeof(T)] = wrapper;
+	}
+
+	public static void RegisterImporter<TJson, TValue>(ImporterFunc<TJson, TValue> importer) {
+		ImporterFunc wrapper = delegate(object input) {
+			return importer((TJson)input);
+		};
+		RegisterImporter(customImportTable, typeof(TJson), typeof(TValue), wrapper);
+	}
+
+	public static void RegisterFactory<T>(FactoryFunc<T> factory) {
+		FactoryFunc factoryWrapper = delegate {
+			return factory();
+		};
+		customFactoryTable[typeof(T)] = factoryWrapper;
+	}
+
+	public static void UnregisterFactories() {
+		customFactoryTable.Clear();
+	}
+
+	public static void UnregisterExporters() {
+		customExportTable.Clear();
+	}
+
+	public static void UnregisterImporters() {
+		customImportTable.Clear();
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonMapper.cs.meta b/Assets/UnityLitJson/JsonMapper.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b56ec69a860d5811eb1f288bb5b36ab2a87b870
--- /dev/null
+++ b/Assets/UnityLitJson/JsonMapper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ae5439391e8c5c648bdb94f2ef5b3773
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonMockWrapper.cs b/Assets/UnityLitJson/JsonMockWrapper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..79be1d75fabc024e10612b956652696ed5a722e9
--- /dev/null
+++ b/Assets/UnityLitJson/JsonMockWrapper.cs
@@ -0,0 +1,95 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Specialized;
+
+namespace LitJson {
+
+/// <summary>
+/// Mock object implementing IJsonWrapper, to facilitate actions like skipping data more efficiently.
+/// </summary>
+public class JsonMockWrapper : IJsonWrapper {
+	public bool IsArray { get { return false; } }
+	public bool IsBoolean { get { return false; } }
+	public bool IsReal { get { return false; } }
+	public bool IsNatural { get { return false; } }
+	public bool IsObject { get { return false; } }
+	public bool IsString { get { return false; } }
+
+	public bool GetBoolean() { return false; }
+	public double GetReal() { return 0.0; }
+	public long GetNatural() { return 0; }
+	public JsonType GetJsonType() { return JsonType.None; }
+	public string GetString() { return ""; }
+
+	public void SetBoolean(bool val) {}
+	public void SetReal(double val) {}
+	public void SetNatural(long val) {}
+	public void SetJsonType(JsonType type) {}
+	public void SetString(string val) {}
+
+	public string ToJson() { return ""; }
+	public void ToJson(JsonWriter writer) {}
+
+	bool IList.IsFixedSize { get { return true; } }
+	bool IList.IsReadOnly { get { return true; } }
+
+	object IList.this[int index] {
+		get { return null; }
+		set {}
+	}
+
+	int IList.Add(object value) { return 0; }
+	void IList.Clear() {}
+	bool IList.Contains(object value) { return false; }
+	int IList.IndexOf(object value) { return -1; }
+	void IList.Insert(int i, object v) {}
+	void IList.Remove(object value) {}
+	void IList.RemoveAt(int index) {}
+
+	int ICollection.Count { get { return 0; } }
+	bool ICollection.IsSynchronized { get { return false; } }
+	object ICollection.SyncRoot { get { return null; } }
+
+	void ICollection.CopyTo(Array array, int index) {}
+
+	IEnumerator IEnumerable.GetEnumerator() { return null; }
+
+	bool IDictionary.IsFixedSize { get { return true; } }
+	bool IDictionary.IsReadOnly { get { return true; } }
+
+	ICollection IDictionary.Keys { get { return null; } }
+	ICollection IDictionary.Values { get { return null; } }
+
+	object IDictionary.this[object key] {
+		get { return null; }
+		set {}
+	}
+
+	void IDictionary.Add(object k, object v) {}
+	void IDictionary.Clear() {}
+	bool IDictionary.Contains(object key) { return false; }
+	void IDictionary.Remove(object key) {}
+
+	IDictionaryEnumerator IDictionary.GetEnumerator() { return null; }
+
+	object IOrderedDictionary.this[int idx] {
+		get { return null; }
+		set {}
+	}
+
+	IDictionaryEnumerator IOrderedDictionary.GetEnumerator() {
+		return null;
+	}
+
+	void IOrderedDictionary.Insert(int i, object k, object v) {}
+	void IOrderedDictionary.RemoveAt(int i) {}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonMockWrapper.cs.meta b/Assets/UnityLitJson/JsonMockWrapper.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1af2f846a071531db0d6401372bb7b41c22996a0
--- /dev/null
+++ b/Assets/UnityLitJson/JsonMockWrapper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4621db9acc07de14eb1055cc6bfd5897
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonReader.cs b/Assets/UnityLitJson/JsonReader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eaf1a3e5bd3ecf7a104939aed2893d6b025da53c
--- /dev/null
+++ b/Assets/UnityLitJson/JsonReader.cs
@@ -0,0 +1,390 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace LitJson {
+
+public enum JsonToken {
+	None,
+	Null,
+
+	ObjectStart,
+	PropertyName,
+	ObjectEnd,
+
+	ArrayStart,
+	ArrayEnd,
+
+	Real,
+	Natural,
+
+	String,
+
+	Boolean
+}
+
+/// <summary>
+/// Stream-like access to JSON text.
+/// </summary>
+public class JsonReader {
+	private static readonly IDictionary<int, IDictionary<int, int[]>> parseTable;
+
+	private Stack<int> automationStack;
+	private Lexer lexer;
+	private TextReader reader;
+	private int currentInput, currentSymbol;
+	private bool parserInString, parserReturn;
+	private bool readStarted, readerIsOwned;
+
+	public bool AllowComments {
+		get { return lexer.AllowComments; }
+		set { lexer.AllowComments = value; }
+	}
+
+	public bool AllowSingleQuotedStrings {
+		get { return lexer.AllowSingleQuotedStrings; }
+		set { lexer.AllowSingleQuotedStrings = value; }
+	}
+
+	public bool SkipNonMembers { get; set; }
+	public bool TypeHinting { get; set; }
+	public string HintTypeName { get; set; }
+	public string HintValueName { get; set; }
+
+	public bool EndOfInput { get; private set; }
+	public bool EndOfJson { get; private set; }
+	public JsonToken Token { get; private set; }
+	public object Value { get; private set; }
+
+	public JsonReader(string json) : this(new StringReader(json), true) {
+	}
+
+	public JsonReader(TextReader reader) : this(reader, false) {
+	}
+
+	private JsonReader(TextReader reader, bool owned) {
+		if (reader == null) {
+			throw new ArgumentNullException("reader");
+		}
+		parserInString = false;
+		parserReturn = false;
+
+		readStarted = false;
+		automationStack = new Stack<int>();
+		automationStack.Push((int)ParserToken.End);
+		automationStack.Push((int)ParserToken.Text);
+
+		lexer = new Lexer(reader);
+
+		EndOfInput = false;
+		EndOfJson = false;
+
+		SkipNonMembers = true;
+
+		this.reader = reader;
+		readerIsOwned = owned;
+
+		TypeHinting = false;
+		HintTypeName = "__type__";
+		HintValueName = "__value__";
+	}
+
+	static JsonReader() {
+		// Populate parse table
+		// See section A.2. of the manual for details
+		parseTable = new Dictionary<int, IDictionary<int, int[]>>();
+
+		TableAddRow(ParserToken.Array);
+		TableAddCol(ParserToken.Array, '[',
+					 '[',
+					 (int)ParserToken.ArrayPrime);
+
+		TableAddRow(ParserToken.ArrayPrime);
+		TableAddCol(ParserToken.ArrayPrime, '"',
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, '[',
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, ']',
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, '{',
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, (int)ParserToken.Number,
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, (int)ParserToken.True,
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, (int)ParserToken.False,
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddCol(ParserToken.ArrayPrime, (int)ParserToken.Null,
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest,
+					 ']');
+
+		TableAddRow(ParserToken.Object);
+		TableAddCol(ParserToken.Object, '{',
+					 '{',
+					 (int)ParserToken.ObjectPrime);
+
+		TableAddRow(ParserToken.ObjectPrime);
+		TableAddCol(ParserToken.ObjectPrime, '"',
+					 (int)ParserToken.Pair,
+					 (int)ParserToken.PairRest,
+					 '}');
+
+		TableAddCol(ParserToken.ObjectPrime, '}',
+					 '}');
+
+		TableAddRow(ParserToken.Pair);
+		TableAddCol(ParserToken.Pair, '"',
+					 (int)ParserToken.String,
+					 ':',
+					 (int)ParserToken.Value);
+
+		TableAddRow(ParserToken.PairRest);
+		TableAddCol(ParserToken.PairRest, ',',
+					 ',',
+					 (int)ParserToken.Pair,
+					 (int)ParserToken.PairRest);
+
+		TableAddCol(ParserToken.PairRest, '}',
+					 (int)ParserToken.Epsilon);
+
+		TableAddRow(ParserToken.String);
+		TableAddCol(ParserToken.String, '"',
+					 '"',
+					 (int)ParserToken.CharSeq,
+					 '"');
+
+		TableAddRow(ParserToken.Text);
+		TableAddCol(ParserToken.Text, '[',
+					 (int)ParserToken.Array);
+		TableAddCol(ParserToken.Text, '{',
+					 (int)ParserToken.Object);
+
+		TableAddRow(ParserToken.Value);
+		TableAddCol(ParserToken.Value, '"',
+					 (int)ParserToken.String);
+		TableAddCol(ParserToken.Value, '[',
+					 (int)ParserToken.Array);
+		TableAddCol(ParserToken.Value, '{',
+					 (int)ParserToken.Object);
+		TableAddCol(ParserToken.Value, (int)ParserToken.Number,
+					 (int)ParserToken.Number);
+		TableAddCol(ParserToken.Value, (int)ParserToken.True,
+					 (int)ParserToken.True);
+		TableAddCol(ParserToken.Value, (int)ParserToken.False,
+					 (int)ParserToken.False);
+		TableAddCol(ParserToken.Value, (int)ParserToken.Null,
+					 (int)ParserToken.Null);
+
+		TableAddRow(ParserToken.ValueRest);
+		TableAddCol(ParserToken.ValueRest, ',',
+					 ',',
+					 (int)ParserToken.Value,
+					 (int)ParserToken.ValueRest);
+
+		TableAddCol(ParserToken.ValueRest, ']',
+					 (int)ParserToken.Epsilon);
+	}
+
+	private static void TableAddCol(ParserToken row, int col, params int[] symbols) {
+		parseTable[(int)row].Add(col, symbols);
+	}
+
+	private static void TableAddRow(ParserToken rule) {
+		parseTable.Add((int)rule, new Dictionary<int, int[]>());
+	}
+
+	private void ProcessNumber(string number) {
+		if (number.IndexOf('.') != -1 ||
+			number.IndexOf('e') != -1 ||
+			number.IndexOf('E') != -1) {
+
+			double real;
+			if (double.TryParse (number, out real)) {
+				Token = JsonToken.Real;
+				Value = real;
+				return;
+			}
+		}
+		long natural;
+		if (long.TryParse (number, out natural)) {
+			Token = JsonToken.Natural;
+			Value = natural;
+			return;
+		}
+		ulong unsignednatural;
+		if (ulong.TryParse(number, out unsignednatural)) {
+			Token = JsonToken.Natural;
+			Value = unsignednatural;
+			return;
+		}
+		decimal decimalreal;
+		if (Decimal.TryParse(number, out decimalreal)) {
+			Token = JsonToken.Real;
+			Value = decimalreal;
+
+			return;
+		}
+		// Shouldn't happen, but just in case, return something
+		Token = JsonToken.Natural;
+		Value = 0;
+
+		throw new JsonException(string.Format("Failed to parse number '{0}'", number));
+	}
+
+	private void ProcessSymbol() {
+		if (currentSymbol == '[')  {
+			Token = JsonToken.ArrayStart;
+			parserReturn = true;
+		} else if (currentSymbol == ']')  {
+			Token = JsonToken.ArrayEnd;
+			parserReturn = true;
+		} else if (currentSymbol == '{')  {
+			Token = JsonToken.ObjectStart;
+			parserReturn = true;
+		} else if (currentSymbol == '}')  {
+			Token = JsonToken.ObjectEnd;
+			parserReturn = true;
+		} else if (currentSymbol == '"')  {
+			if (parserInString) {
+				parserInString = false;
+				parserReturn = true;
+			} else {
+				if (Token == JsonToken.None) {
+					Token = JsonToken.String;
+				}
+				parserInString = true;
+			}
+		} else if (currentSymbol == (int)ParserToken.CharSeq) {
+			Value = lexer.StringValue;
+		} else if (currentSymbol == (int)ParserToken.False)  {
+			Token = JsonToken.Boolean;
+			Value = false;
+			parserReturn = true;
+		} else if (currentSymbol == (int)ParserToken.Null)  {
+			Token = JsonToken.Null;
+			parserReturn = true;
+		} else if (currentSymbol == (int)ParserToken.Number)  {
+			ProcessNumber (lexer.StringValue);
+			parserReturn = true;
+		} else if (currentSymbol == (int)ParserToken.Pair)  {
+			Token = JsonToken.PropertyName;
+		} else if (currentSymbol == (int)ParserToken.True)  {
+			Token = JsonToken.Boolean;
+			Value = true;
+			parserReturn = true;
+		}
+	}
+
+	private bool ReadToken() {
+		if (EndOfInput) {
+			return false;
+		}
+		lexer.NextToken();
+		if (lexer.EndOfInput) {
+			Close();
+			return false;
+		}
+		currentInput = lexer.Token;
+		return true;
+	}
+
+	public void Close() {
+		if (EndOfInput) {
+			return;
+		}
+		EndOfInput = true;
+		EndOfJson  = true;
+		if (readerIsOwned) {
+			reader.Close();
+		}
+		reader = null;
+	}
+
+	public bool Read() {
+		if (EndOfInput) {
+			return false;
+		}
+		if (EndOfJson) {
+			EndOfJson = false;
+			automationStack.Clear();
+			automationStack.Push((int)ParserToken.End);
+			automationStack.Push((int)ParserToken.Text);
+		}
+		parserInString = false;
+		parserReturn = false;
+
+		Token = JsonToken.None;
+		Value = null;
+
+		if (!readStarted) {
+			readStarted = true;
+			if (!ReadToken()) {
+				return false;
+			}
+		}
+		int[] entrySymbols;
+		while (true) {
+			if (parserReturn) {
+				if (automationStack.Peek() == (int)ParserToken.End) {
+					EndOfJson = true;
+				}
+				return true;
+			}
+			currentSymbol = automationStack.Pop();
+			ProcessSymbol();
+			if (currentSymbol == currentInput) {
+				if (!ReadToken()) {
+					if (automationStack.Peek() != (int)ParserToken.End) {
+						throw new JsonException("Input doesn't evaluate to proper JSON text");
+					}
+					if (parserReturn) {
+						return true;
+					}
+					return false;
+				}
+				continue;
+			}
+			try {
+				entrySymbols = parseTable[currentSymbol][currentInput];
+			} catch (KeyNotFoundException e) {
+				throw new JsonException((ParserToken)currentInput, e);
+			}
+			if (entrySymbols[0] == (int)ParserToken.Epsilon) {
+				continue;
+			}
+			for (int i = entrySymbols.Length - 1; i >= 0; i--) {
+				automationStack.Push(entrySymbols[i]);
+			}
+		}
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonReader.cs.meta b/Assets/UnityLitJson/JsonReader.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fe5f033058a886d0833fc834488513dfe75c2a21
--- /dev/null
+++ b/Assets/UnityLitJson/JsonReader.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5e8273be325e1c8498a813de2885162a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/JsonWriter.cs b/Assets/UnityLitJson/JsonWriter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e60aa8900ecd5c06511442095a22c5f7795f038e
--- /dev/null
+++ b/Assets/UnityLitJson/JsonWriter.cs
@@ -0,0 +1,356 @@
+#region Header
+/*
+* The authors disclaim copyright to this source code.
+* For more details, see the COPYING file included with this distribution.
+*/
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace LitJson {
+
+internal enum Condition {
+	InArray,
+	InObject,
+	NotAProperty,
+	Property,
+	Value
+}
+
+internal class WriterContext {
+	public int Count, Padding;
+	public bool InArray, InObject;
+	public bool ExpectingValue;
+}
+
+/// <summary>
+/// Stream-like facility to output JSON text.
+/// </summary>
+public class JsonWriter {
+	private static readonly NumberFormatInfo numberFormat;
+
+	private WriterContext context;
+	private Stack<WriterContext> ctxStack;
+	private bool hasReachedEnd;
+	private char[] hexSeq;
+	private int indentation, indentValue;
+	private StringBuilder stringBuilder;
+
+	public int IndentValue {
+		get { return indentValue; }
+		set {
+			indentation = (indentation / indentValue) * value;
+			indentValue = value;
+		}
+	}
+
+	public bool PrettyPrint { get; set; }
+	public bool Validate { get; set; }
+	public bool TypeHinting { get; set; }
+	public string HintTypeName { get; set; }
+	public string HintValueName { get; set; }
+
+	public TextWriter TextWriter { get; private set; }
+
+	static JsonWriter() {
+		numberFormat = NumberFormatInfo.InvariantInfo;
+	}
+
+	public JsonWriter() {
+		stringBuilder = new StringBuilder();
+		TextWriter = new StringWriter(stringBuilder);
+		Init();
+	}
+
+	public JsonWriter(StringBuilder sb) : this(new StringWriter(sb)) {
+	}
+
+	public JsonWriter(TextWriter writer) {
+		if (writer == null) {
+			throw new ArgumentNullException("writer");
+		}
+		this.TextWriter = writer;
+		Init();
+	}
+
+	private void DoValidation(Condition cond) {
+		if (!context.ExpectingValue) {
+			context.Count++;
+		}
+		if (!Validate) {
+			return;
+		}
+		if (hasReachedEnd) {
+			throw new JsonException("A complete JSON symbol has already been written");
+		}
+		switch (cond) {
+		case Condition.InArray:
+			if (!context.InArray) {
+				throw new JsonException("Can't close an array here");
+			}
+			break;
+		case Condition.InObject:
+			if (!context.InObject || context.ExpectingValue) {
+				throw new JsonException("Can't close an object here");
+			}
+			break;
+		case Condition.NotAProperty:
+			if (context.InObject && !context.ExpectingValue) {
+				throw new JsonException("Expected a property in obj? "+context.InObject+" expect val? "+context.ExpectingValue+" <"+stringBuilder.ToString()+">");
+			}
+			break;
+
+		case Condition.Property:
+			if (!context.InObject || context.ExpectingValue) {
+				throw new JsonException("Can't add a property here");
+			}
+			break;
+		case Condition.Value:
+			if (!context.InArray &&
+			   (!context.InObject || !context.ExpectingValue)) {
+				throw new JsonException("Can't add a value here");
+			}
+			break;
+		}
+	}
+
+	private void Init() {
+		hasReachedEnd = false;
+		hexSeq = new char[4];
+		indentation = 0;
+		indentValue = 4;
+		PrettyPrint = false;
+		Validate = true;
+
+		TypeHinting = false;
+		HintTypeName = "__type__";
+		HintValueName = "__value__";
+
+		ctxStack = new Stack<WriterContext>();
+		context = new WriterContext();
+		ctxStack.Push(context);
+	}
+
+	private static void IntToHex(int n, char[] hex) {
+		int num;
+		for (int i = 0; i < 4; i++) {
+			num = n % 16;
+			if (num < 10) {
+				hex[3 - i] = (char) ('0' + num);
+			} else {
+				hex[3 - i] = (char) ('A' + (num - 10));
+			}
+			n >>= 4;
+		}
+	}
+
+	private void Indent() {
+		if (PrettyPrint) {
+			indentation += indentValue;
+		}
+	}
+
+	private void Put(string str) {
+		if (PrettyPrint && !context.ExpectingValue) {
+			for (int i = 0; i < indentation; i++) {
+				TextWriter.Write(' ');
+			}
+		}
+		TextWriter.Write(str);
+	}
+
+	private void PutNewline(bool addComma = true) {
+		if (addComma && !context.ExpectingValue && context.Count > 1) {
+			TextWriter.Write(',');
+		}
+		if (PrettyPrint && !context.ExpectingValue) {
+			TextWriter.Write(Environment.NewLine);
+		}
+	}
+
+	private void PutString(string str) {
+		Put(string.Empty);
+		TextWriter.Write('"');
+		int n = str.Length;
+		for (int i = 0; i < n; i++) {
+			switch (str[i]) {
+			case '\n':
+				TextWriter.Write("\\n");
+				continue;
+			case '\r':
+				TextWriter.Write("\\r");
+				continue;
+			case '\t':
+				TextWriter.Write("\\t");
+				continue;
+			case '"':
+			case '\\':
+				TextWriter.Write('\\');
+				TextWriter.Write(str[i]);
+				continue;
+			case '\f':
+				TextWriter.Write("\\f");
+				continue;
+			case '\b':
+				TextWriter.Write("\\b");
+				continue;
+			}
+			if ((int)str[i] >= 32 && (int)str[i] <= 126) {
+				TextWriter.Write(str[i]);
+				continue;
+			}
+			// Default, turn into a \uXXXX sequence
+			IntToHex ((int)str[i], hexSeq);
+			TextWriter.Write("\\u");
+			TextWriter.Write(hexSeq);
+		}
+		TextWriter.Write('"');
+	}
+
+	private void Unindent() {
+		if (PrettyPrint) {
+			indentation -= indentValue;
+		}
+	}
+
+	public override string ToString() {
+		if (stringBuilder == null) {
+			return string.Empty;
+		}
+		return stringBuilder.ToString();
+	}
+
+	public void Reset() {
+		hasReachedEnd = false;
+
+		ctxStack.Clear();
+		context = new WriterContext();
+		ctxStack.Push(context);
+
+		if (stringBuilder != null) {
+			stringBuilder.Remove(0, stringBuilder.Length);
+		}
+	}
+
+	public void Write(bool boolean) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		Put(boolean ? "true" : "false");
+		context.ExpectingValue = false;
+	}
+
+	public void Write(double number) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		string str = number.ToString("R", numberFormat);
+		Put(str);
+		if (str.IndexOf('.') == -1 && str.IndexOf('E') == -1) {
+			TextWriter.Write(".0");
+		}
+		context.ExpectingValue = false;
+	}
+
+	public void Write(decimal number) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		Put(Convert.ToString(number, numberFormat));
+		context.ExpectingValue = false;
+	}
+
+	public void Write(long number) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		Put(Convert.ToString(number, numberFormat));
+		context.ExpectingValue = false;
+	}
+
+	public void Write(ulong number) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		Put(Convert.ToString(number, numberFormat));
+		context.ExpectingValue = false;
+	}
+
+	public void Write(string str) {
+		DoValidation(Condition.Value);
+		PutNewline();
+		if (str == null) {
+			Put("null");
+		} else {
+			PutString(str);
+		}
+		context.ExpectingValue = false;
+	}
+
+	public void WriteArrayEnd() {
+		DoValidation(Condition.InArray);
+		PutNewline(false);
+		ctxStack.Pop();
+		if (ctxStack.Count == 1) {
+			hasReachedEnd = true;
+		} else {
+			context = ctxStack.Peek();
+			context.ExpectingValue = false;
+		}
+		Unindent();
+		Put("]");
+	}
+
+	public void WriteArrayStart() {
+		DoValidation(Condition.NotAProperty);
+		PutNewline();
+		Put("[");
+		context = new WriterContext ();
+		context.InArray = true;
+		ctxStack.Push (context);
+		Indent();
+	}
+
+	public void WriteObjectEnd() {
+		DoValidation(Condition.InObject);
+		PutNewline(false);
+		ctxStack.Pop();
+		if (ctxStack.Count == 1) {
+			hasReachedEnd = true;
+		} else {
+			context = ctxStack.Peek();
+			context.ExpectingValue = false;
+		}
+		Unindent();
+		Put("}");
+	}
+
+	public void WriteObjectStart() {
+		DoValidation(Condition.NotAProperty);
+		PutNewline();
+		Put("{");
+		context = new WriterContext();
+		context.InObject = true;
+		ctxStack.Push(context);
+		Indent();
+	}
+
+	public void WritePropertyName(string name) {
+		DoValidation(Condition.Property);
+		PutNewline();
+		PutString(name);
+		if (PrettyPrint) {
+			if (name.Length > context.Padding) {
+				context.Padding = name.Length;
+			}
+			for (int i = context.Padding - name.Length; i >= 0; i--) {
+				TextWriter.Write(' ');
+			}
+			TextWriter.Write(": ");
+		} else {
+			TextWriter.Write(':');
+		}
+		context.ExpectingValue = true;
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/JsonWriter.cs.meta b/Assets/UnityLitJson/JsonWriter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7b1f660fc4eb59e964a75d97573cf97aa1444ae0
--- /dev/null
+++ b/Assets/UnityLitJson/JsonWriter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f6a734d3807597b46a96aa216412b846
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/Lexer.cs b/Assets/UnityLitJson/Lexer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4174c48aa6deaa6bcccb6917c690a2d581b23ce2
--- /dev/null
+++ b/Assets/UnityLitJson/Lexer.cs
@@ -0,0 +1,727 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace LitJson {
+
+internal class FsmContext {
+	public Lexer L;
+	public bool Return;
+	public int NextState, StateStack;
+}
+
+/// <summary>
+/// JSON lexer implementation based on a finite state machine.
+/// </summary>
+internal class Lexer {
+	private delegate bool StateHandler (FsmContext ctx);
+
+	private static int[] returnTable;
+	private static StateHandler[] handlerTable;
+
+	private int inputBuffer, inputChar, state, unichar;
+	private FsmContext context;
+	private TextReader reader;
+	private StringBuilder stringBuffer;
+
+	public bool AllowComments { get; set; }
+	public bool AllowSingleQuotedStrings { get; set; }
+
+	public bool EndOfInput { get; private set; }
+	public int Token { get; private set; }
+	public string StringValue { get; private set; }
+
+	static Lexer() {
+		PopulateFsmTables();
+	}
+
+	public Lexer(TextReader reader) {
+		AllowComments = true;
+		AllowSingleQuotedStrings = true;
+
+		inputBuffer = 0;
+		stringBuffer = new StringBuilder(128);
+		state = 1;
+		EndOfInput = false;
+		this.reader = reader;
+
+		context = new FsmContext();
+		context.L = this;
+	}
+
+	private static int HexValue(int digit) {
+		switch (digit) {
+		case 'a':
+		case 'A':
+			return 10;
+		case 'b':
+		case 'B':
+			return 11;
+		case 'c':
+		case 'C':
+			return 12;
+		case 'd':
+		case 'D':
+			return 13;
+		case 'e':
+		case 'E':
+			return 14;
+		case 'f':
+		case 'F':
+			return 15;
+		default:
+			return digit - '0';
+		}
+	}
+
+	private static void PopulateFsmTables() {
+		// See section A.1. of the manual for details of the finite state machine.
+		handlerTable = new StateHandler[28] {
+			State1,
+			State2,
+			State3,
+			State4,
+			State5,
+			State6,
+			State7,
+			State8,
+			State9,
+			State10,
+			State11,
+			State12,
+			State13,
+			State14,
+			State15,
+			State16,
+			State17,
+			State18,
+			State19,
+			State20,
+			State21,
+			State22,
+			State23,
+			State24,
+			State25,
+			State26,
+			State27,
+			State28
+		};
+
+		returnTable = new int[28] {
+			(int)ParserToken.Char,
+			0,
+			(int)ParserToken.Number,
+			(int)ParserToken.Number,
+			0,
+			(int)ParserToken.Number,
+			0,
+			(int)ParserToken.Number,
+			0,
+			0,
+			(int)ParserToken.True,
+			0,
+			0,
+			0,
+			(int)ParserToken.False,
+			0,
+			0,
+			(int)ParserToken.Null,
+			(int)ParserToken.CharSeq,
+			(int)ParserToken.Char,
+			0,
+			0,
+			(int)ParserToken.CharSeq,
+			(int)ParserToken.Char,
+			0,
+			0,
+			0,
+			0
+		};
+	}
+
+	private static char ProcessEscChar (int escChar) {
+		switch (escChar) {
+		case '"':
+		case '\'':
+		case '\\':
+		case '/':
+			return Convert.ToChar(escChar);
+		case 'n':
+			return '\n';
+		case 't':
+			return '\t';
+		case 'r':
+			return '\r';
+		case 'b':
+			return '\b';
+		case 'f':
+			return '\f';
+		default:
+			// Unreachable
+			return '?';
+		}
+	}
+
+	private static bool State1(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar == ' ' ||
+				ctx.L.inputChar >= '\t' && ctx.L.inputChar <= '\r') {
+				continue;
+			}
+			if (ctx.L.inputChar >= '1' && ctx.L.inputChar <= '9') {
+				ctx.L.stringBuffer.Append ((char) ctx.L.inputChar);
+				ctx.NextState = 3;
+				return true;
+			}
+			switch (ctx.L.inputChar) {
+			case '"':
+				ctx.NextState = 19;
+				ctx.Return = true;
+				return true;
+			case ',':
+			case ':':
+			case '[':
+			case ']':
+			case '{':
+			case '}':
+				ctx.NextState = 1;
+				ctx.Return = true;
+				return true;
+			case '-':
+				ctx.L.stringBuffer.Append ((char) ctx.L.inputChar);
+				ctx.NextState = 2;
+				return true;
+			case '0':
+				ctx.L.stringBuffer.Append ((char) ctx.L.inputChar);
+				ctx.NextState = 4;
+				return true;
+			case 'f':
+				ctx.NextState = 12;
+				return true;
+			case 'n':
+				ctx.NextState = 16;
+				return true;
+			case 't':
+				ctx.NextState = 9;
+				return true;
+			case '\'':
+				if (!ctx.L.AllowSingleQuotedStrings) {
+					return false;
+				}
+				ctx.L.inputChar = '"';
+				ctx.NextState = 23;
+				ctx.Return = true;
+				return true;
+			case '/':
+				if (!ctx.L.AllowComments) {
+					return false;
+				}
+				ctx.NextState = 25;
+				return true;
+			default:
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private static bool State2(FsmContext ctx) {
+		ctx.L.GetChar();
+		if (ctx.L.inputChar >= '1' && ctx.L.inputChar <= '9') {
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 3;
+			return true;
+		}
+		switch (ctx.L.inputChar) {
+		case '0':
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 4;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State3(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9') {
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				continue;
+			}
+			if (ctx.L.inputChar == ' ' ||
+				ctx.L.inputChar >= '\t' && ctx.L.inputChar <= '\r') {
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			}
+			switch (ctx.L.inputChar) {
+			case ',':
+			case ']':
+			case '}':
+				ctx.L.UngetChar();
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			case '.':
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				ctx.NextState = 5;
+				return true;
+			case 'e':
+			case 'E':
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				ctx.NextState = 7;
+				return true;
+			default:
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private static bool State4(FsmContext ctx) {
+		ctx.L.GetChar ();
+		if (ctx.L.inputChar == ' ' ||
+			ctx.L.inputChar >= '\t' && ctx.L.inputChar <= '\r') {
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		}
+		switch (ctx.L.inputChar) {
+		case ',':
+		case ']':
+		case '}':
+			ctx.L.UngetChar ();
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		case '.':
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 5;
+			return true;
+		case 'e':
+		case 'E':
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 7;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State5(FsmContext ctx) {
+		ctx.L.GetChar();
+		if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9') {
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 6;
+			return true;
+		}
+		return false;
+	}
+
+	private static bool State6(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9') {
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				continue;
+			}
+			if (ctx.L.inputChar == ' ' ||
+				ctx.L.inputChar >= '\t' && ctx.L.inputChar <= '\r') {
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			}
+			switch (ctx.L.inputChar) {
+			case ',':
+			case ']':
+			case '}':
+				ctx.L.UngetChar();
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			case 'e':
+			case 'E':
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				ctx.NextState = 7;
+				return true;
+			default:
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private static bool State7(FsmContext ctx) {
+		ctx.L.GetChar();
+		if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9') {
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 8;
+			return true;
+		}
+		switch (ctx.L.inputChar) {
+		case '+':
+		case '-':
+			ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+			ctx.NextState = 8;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State8(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9') {
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				continue;
+			}
+			if (ctx.L.inputChar == ' ' ||
+				ctx.L.inputChar >= '\t' && ctx.L.inputChar <= '\r') {
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			}
+			switch (ctx.L.inputChar) {
+			case ',':
+			case ']':
+			case '}':
+				ctx.L.UngetChar();
+				ctx.Return = true;
+				ctx.NextState = 1;
+				return true;
+			default:
+				return false;
+			}
+		}
+		return true;
+	}
+
+	private static bool State9(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'r':
+			ctx.NextState = 10;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State10(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'u':
+			ctx.NextState = 11;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State11(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'e':
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State12(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'a':
+			ctx.NextState = 13;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State13(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'l':
+			ctx.NextState = 14;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State14(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 's':
+			ctx.NextState = 15;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State15(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'e':
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State16(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'u':
+			ctx.NextState = 17;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State17(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'l':
+			ctx.NextState = 18;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State18(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'l':
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State19(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			switch (ctx.L.inputChar) {
+			case '"':
+				ctx.L.UngetChar ();
+				ctx.Return = true;
+				ctx.NextState = 20;
+				return true;
+			case '\\':
+				ctx.StateStack = 19;
+				ctx.NextState = 21;
+				return true;
+			default:
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				continue;
+			}
+		}
+		return true;
+	}
+
+	private static bool State20(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case '"':
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State21(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case 'u':
+			ctx.NextState = 22;
+			return true;
+		case '"':
+		case '\'':
+		case '/':
+		case '\\':
+		case 'b':
+		case 'f':
+		case 'n':
+		case 'r':
+		case 't':
+			ctx.L.stringBuffer.Append(ProcessEscChar(ctx.L.inputChar));
+			ctx.NextState = ctx.StateStack;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State22(FsmContext ctx) {
+		int counter = 0;
+		int mult = 4096;
+		ctx.L.unichar = 0;
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar >= '0' && ctx.L.inputChar <= '9' ||
+				ctx.L.inputChar >= 'A' && ctx.L.inputChar <= 'F' ||
+				ctx.L.inputChar >= 'a' && ctx.L.inputChar <= 'f') {
+
+				ctx.L.unichar += HexValue (ctx.L.inputChar) * mult;
+				counter++;
+				mult /= 16;
+				if (counter == 4) {
+					ctx.L.stringBuffer.Append(Convert.ToChar(ctx.L.unichar));
+					ctx.NextState = ctx.StateStack;
+					return true;
+				}
+				continue;
+			}
+			return false;
+		}
+		return true;
+	}
+
+	private static bool State23(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			switch (ctx.L.inputChar) {
+			case '\'':
+				ctx.L.UngetChar();
+				ctx.Return = true;
+				ctx.NextState = 24;
+				return true;
+			case '\\':
+				ctx.StateStack = 23;
+				ctx.NextState = 21;
+				return true;
+			default:
+				ctx.L.stringBuffer.Append((char)ctx.L.inputChar);
+				continue;
+			}
+		}
+		return true;
+	}
+
+	private static bool State24(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case '\'':
+			ctx.L.inputChar = '"';
+			ctx.Return = true;
+			ctx.NextState = 1;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State25(FsmContext ctx) {
+		ctx.L.GetChar();
+		switch (ctx.L.inputChar) {
+		case '*':
+			ctx.NextState = 27;
+			return true;
+		case '/':
+			ctx.NextState = 26;
+			return true;
+		default:
+			return false;
+		}
+	}
+
+	private static bool State26(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar == '\n') {
+				ctx.NextState = 1;
+				return true;
+			}
+		}
+		return true;
+	}
+
+	private static bool State27(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar == '*') {
+				ctx.NextState = 28;
+				return true;
+			}
+		}
+		return true;
+	}
+
+	private static bool State28(FsmContext ctx) {
+		while (ctx.L.GetChar()) {
+			if (ctx.L.inputChar == '*') {
+				continue;
+			}
+			if (ctx.L.inputChar == '/') {
+				ctx.NextState = 1;
+				return true;
+			}
+			ctx.NextState = 27;
+			return true;
+		}
+		return true;
+	}
+
+	private bool GetChar() {
+		if ((inputChar = NextChar()) != -1) {
+			return true;
+		}
+		EndOfInput = true;
+		return false;
+	}
+
+	private int NextChar() {
+		if (inputBuffer != 0) {
+			int tmp = inputBuffer;
+			inputBuffer = 0;
+			return tmp;
+		}
+		return reader.Read();
+	}
+
+	public bool NextToken() {
+		StateHandler handler;
+		context.Return = false;
+		while (true) {
+			handler = handlerTable[state - 1];
+			if (!handler(context)) {
+				throw new JsonException(inputChar);
+			}
+			if (EndOfInput) {
+				return false;
+			}
+			if (context.Return) {
+				StringValue = stringBuffer.ToString();
+				stringBuffer.Remove(0, stringBuffer.Length);
+				Token = returnTable[state - 1];
+				if (Token == (int)ParserToken.Char) {
+					Token = inputChar;
+				}
+				state = context.NextState;
+				return true;
+			}
+			state = context.NextState;
+		}
+	}
+
+	private void UngetChar() {
+		inputBuffer = inputChar;
+	}
+}
+
+}
diff --git a/Assets/UnityLitJson/Lexer.cs.meta b/Assets/UnityLitJson/Lexer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f4dfb0951a8c0672564b0ff3a479a428f21c1a33
--- /dev/null
+++ b/Assets/UnityLitJson/Lexer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4c723433a8625204aaa024123e366b23
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/ParserToken.cs b/Assets/UnityLitJson/ParserToken.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4ea0fd0e9fcbbff82eb2560d21ba455b05652717
--- /dev/null
+++ b/Assets/UnityLitJson/ParserToken.cs
@@ -0,0 +1,40 @@
+#region Header
+/*
+ * The authors disclaim copyright to this source code.
+ * For more details, see the COPYING file included with this distribution.
+ */
+#endregion
+
+namespace LitJson {
+
+/// <summary>
+/// Internal representation of the tokens used by the lexer and the parser.
+/// </summary>
+internal enum ParserToken {
+	// Lexer tokens (see section A.1.1. of the manual)
+	None = System.Char.MaxValue + 1,
+	Number,
+	True,
+	False,
+	Null,
+	CharSeq,
+	// Single char
+	Char,
+	// Parser Rules (see section A.2.1 of the manual)
+	Text,
+	Object,
+	ObjectPrime,
+	Pair,
+	PairRest,
+	Array,
+	ArrayPrime,
+	Value,
+	ValueRest,
+	String,
+	// End of input
+	End,
+	// The empty rule
+	Epsilon
+}
+
+}
diff --git a/Assets/UnityLitJson/ParserToken.cs.meta b/Assets/UnityLitJson/ParserToken.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5f978379b96f8a3ae477b476e0318867fc2a2cda
--- /dev/null
+++ b/Assets/UnityLitJson/ParserToken.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc0b7609730dd4b42a66795ed8cd098c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/Platform.cs b/Assets/UnityLitJson/Platform.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f949658a54ff9ebf79ee8aca5e63c01efdae0616
--- /dev/null
+++ b/Assets/UnityLitJson/Platform.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Linq;
+using System.IO;
+
+#if JSON_WINRT || (UNITY_METRO && !UNITY_EDITOR)
+namespace LitJson {
+
+	public interface IOrderedDictionary : IDictionary, ICollection, IEnumerable {
+		object this [int index] {
+			get;
+			set;
+		}
+		new IDictionaryEnumerator GetEnumerator ();
+		void Insert (int index, object key, object value);
+		void RemoveAt (int index);
+	}
+	
+	public static class Platform {
+
+		public static Type GetInterface(this Type _type,string name){
+			foreach(Type t in _type.GetTypeInfo().ImplementedInterfaces){
+				if(t.Name == name){
+					return t;
+				}
+			}
+			return null;
+		}
+
+		public static FieldInfo[] GetFields(this Type _type){
+			return _type.GetTypeInfo().DeclaredFields.ToArray();
+		}
+
+		// No way to patch BindingFlags...
+		public static FieldInfo[] GetFields(this Type _type,BindingFlags flags){
+			return _type.GetTypeInfo().DeclaredFields.ToArray();
+		}
+
+		public static PropertyInfo[] GetProperties(this Type _type){
+			return _type.GetTypeInfo().DeclaredProperties.ToArray();
+		}
+
+		// No way to patch BindingFlags...
+		public static PropertyInfo[] GetProperties(this Type _type,BindingFlags flags){
+			return _type.GetTypeInfo().DeclaredProperties.ToArray();
+		}
+
+		public static MethodInfo GetMethod(this Type _type,string name, Type[] types){
+			return _type.GetRuntimeMethod(name,types);
+		}
+		
+		public static bool IsAssignableFrom(this Type _type,Type other){
+			return _type.GetTypeInfo().IsAssignableFrom(other.GetTypeInfo());
+		}
+
+		public static Type[] GetGenericArguments(this Type _type){
+			return _type.GetTypeInfo().GenericTypeArguments;
+		}
+		
+		public static object[] GetCustomAttributes(this Type _type, Type attributeType, bool inherit){
+			return _type.GetTypeInfo().GetCustomAttributes(attributeType,inherit).ToArray();
+		}
+		
+		public static ConstructorInfo GetConstructor(this Type _type, BindingFlags bindingAttr, object binder, Type[] types, object[] modifiers){
+			return _type.GetTypeInfo().DeclaredConstructors.Where(c=>c.GetParameters().Count() == 0).Select(c=>c).FirstOrDefault();
+		}
+
+		// Replace with extention properties if they are ever added to .net
+		public static bool IsClass(this Type _type){
+			return _type.GetTypeInfo().IsClass;
+		}
+		
+		// Replace with extention properties if they are ever added to .net
+		public static bool IsEnum(this Type _type){
+			return _type.GetTypeInfo().IsEnum;
+		}
+
+		public static MethodInfo GetGetMethod(this PropertyInfo property ){
+			return property.GetMethod;
+		}
+		
+		public static MethodInfo GetSetMethod(this PropertyInfo property ){
+			return property.SetMethod;
+		}
+
+		public static void Close(this TextReader _reader){
+			_reader.Dispose();
+		}
+		
+	}
+}
+#endif
diff --git a/Assets/UnityLitJson/Platform.cs.meta b/Assets/UnityLitJson/Platform.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fb91db0bb2463c481af17211fe5f64ecceaa1544
--- /dev/null
+++ b/Assets/UnityLitJson/Platform.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0ac756ba18b879e4eada0a3fb160e9f5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/Unity.meta b/Assets/UnityLitJson/Unity.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f5929452595b1f5e94c4b1c059132fa501327fa9
--- /dev/null
+++ b/Assets/UnityLitJson/Unity.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8d2b16f5c68d9f84b8ae48b6cfca65bb
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/UnityLitJson/Unity/UnityTypeBindings.cs b/Assets/UnityLitJson/Unity/UnityTypeBindings.cs
new file mode 100644
index 0000000000000000000000000000000000000000..097afe9d133b4ab27c52a8ce71736cd729998d4f
--- /dev/null
+++ b/Assets/UnityLitJson/Unity/UnityTypeBindings.cs
@@ -0,0 +1,143 @@
+#if !JSON_STANDALONE
+
+using UnityEngine;
+using System;
+using System.Collections;
+
+using LitJson.Extensions;
+
+namespace LitJson {
+
+	#if UNITY_EDITOR
+	[UnityEditor.InitializeOnLoad]
+	#endif
+	public static class UnityTypeBindings {
+
+		static bool registerd;
+
+		static UnityTypeBindings(){
+			Register();
+		}
+
+		public static void Register(){
+
+			if(registerd) return;
+			registerd = true;
+
+			// If you seralize using WriteProperty()
+			// LitJson will attempt to bind property
+			// names to class members instead of using
+			// an importer.
+
+			// -- Type
+			JsonMapper.RegisterExporter<Type>((v,w) => {
+				w.Write(v.FullName);
+			});
+			
+			JsonMapper.RegisterImporter<string,Type>((s) => {
+				return Type.GetType(s);
+			});
+
+			// -- Vector2
+			Action<Vector2,JsonWriter> writeVector2 = (v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("x",v.x);
+				w.WriteProperty("y",v.y);
+				w.WriteObjectEnd();
+			};
+
+			JsonMapper.RegisterExporter<Vector2>((v,w) => {
+				writeVector2(v,w);
+			});
+
+			// -- Vector3
+			Action<Vector3,JsonWriter> writeVector3 = (v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("x",v.x);
+				w.WriteProperty("y",v.y);
+				w.WriteProperty("z",v.z);
+				w.WriteObjectEnd();
+			};
+
+			JsonMapper.RegisterExporter<Vector3>((v,w) => {
+				writeVector3(v,w);
+			});
+
+			// -- Vector4
+			JsonMapper.RegisterExporter<Vector4>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("x",v.x);
+				w.WriteProperty("y",v.y);
+				w.WriteProperty("z",v.z);
+				w.WriteProperty("w",v.w);
+				w.WriteObjectEnd();
+			});
+
+			// -- Quaternion
+			JsonMapper.RegisterExporter<Quaternion>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("x",v.x);
+				w.WriteProperty("y",v.y);
+				w.WriteProperty("z",v.z);
+				w.WriteProperty("w",v.w);
+				w.WriteObjectEnd();
+			});
+
+			// -- Color
+			JsonMapper.RegisterExporter<Color>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("r",v.r);
+				w.WriteProperty("g",v.g);
+				w.WriteProperty("b",v.b);
+				w.WriteProperty("a",v.a);
+				w.WriteObjectEnd();
+			});
+
+			// -- Color32
+			JsonMapper.RegisterExporter<Color32>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("r",v.r);
+				w.WriteProperty("g",v.g);
+				w.WriteProperty("b",v.b);
+				w.WriteProperty("a",v.a);
+				w.WriteObjectEnd();
+			});
+
+			// -- Bounds
+			JsonMapper.RegisterExporter<Bounds>((v,w) => {
+				w.WriteObjectStart();
+
+				w.WritePropertyName("center");
+				writeVector3(v.center,w);
+
+				w.WritePropertyName("size");
+				writeVector3(v.size,w);
+
+				w.WriteObjectEnd();
+			});
+
+			// -- Rect
+			JsonMapper.RegisterExporter<Rect>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("x",v.x);
+				w.WriteProperty("y",v.y);
+				w.WriteProperty("width",v.width);
+				w.WriteProperty("height",v.height);
+				w.WriteObjectEnd();
+			});
+
+			// -- RectOffset
+			JsonMapper.RegisterExporter<RectOffset>((v,w) => {
+				w.WriteObjectStart();
+				w.WriteProperty("top",v.top);
+				w.WriteProperty("left",v.left);
+				w.WriteProperty("bottom",v.bottom);
+				w.WriteProperty("right",v.right);
+				w.WriteObjectEnd();
+			});
+
+		}
+
+	}
+}
+#endif
diff --git a/Assets/UnityLitJson/Unity/UnityTypeBindings.cs.meta b/Assets/UnityLitJson/Unity/UnityTypeBindings.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8b3de6b60ee7506b89d36bb77816e2fc9ce183c9
--- /dev/null
+++ b/Assets/UnityLitJson/Unity/UnityTypeBindings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f824eec467fc3144f933a361b0f7e574
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Zombie.anim b/Assets/Zombie.anim
new file mode 100644
index 0000000000000000000000000000000000000000..c550b373b503b6c9f61458a6ec8e84a382d18259
--- /dev/null
+++ b/Assets/Zombie.anim
@@ -0,0 +1,83 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Zombie
+  serializedVersion: 6
+  m_Legacy: 0
+  m_Compressed: 0
+  m_UseHighQualityCurve: 1
+  m_RotationCurves: []
+  m_CompressedRotationCurves: []
+  m_EulerCurves: []
+  m_PositionCurves: []
+  m_ScaleCurves: []
+  m_FloatCurves: []
+  m_PPtrCurves:
+  - curve:
+    - time: 0
+      value: {fileID: 21300000, guid: fb94a85578dd49141ac3d93064efaa3e, type: 3}
+    - time: 0.083333336
+      value: {fileID: 21300000, guid: e488e518fc6c5f444807ac34142c4ec7, type: 3}
+    - time: 0.16666667
+      value: {fileID: 21300000, guid: 21f21f8522e7b5c4dae06e5fde95b624, type: 3}
+    - time: 0.25
+      value: {fileID: 21300000, guid: c87efcf4926654c46a58be747da2f490, type: 3}
+    - time: 0.33333334
+      value: {fileID: 21300000, guid: e45ba03774084ee4a899cbfd8f4b24da, type: 3}
+    - time: 0.41666666
+      value: {fileID: 21300000, guid: 5533086cc69e03d4ab837de104b62517, type: 3}
+    attribute: m_Sprite
+    path: 
+    classID: 212
+    script: {fileID: 0}
+  m_SampleRate: 12
+  m_WrapMode: 0
+  m_Bounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 0, y: 0, z: 0}
+  m_ClipBindingConstant:
+    genericBindings:
+    - serializedVersion: 2
+      path: 0
+      attribute: 0
+      script: {fileID: 0}
+      typeID: 212
+      customType: 23
+      isPPtrCurve: 1
+    pptrCurveMapping:
+    - {fileID: 21300000, guid: fb94a85578dd49141ac3d93064efaa3e, type: 3}
+    - {fileID: 21300000, guid: e488e518fc6c5f444807ac34142c4ec7, type: 3}
+    - {fileID: 21300000, guid: 21f21f8522e7b5c4dae06e5fde95b624, type: 3}
+    - {fileID: 21300000, guid: c87efcf4926654c46a58be747da2f490, type: 3}
+    - {fileID: 21300000, guid: e45ba03774084ee4a899cbfd8f4b24da, type: 3}
+    - {fileID: 21300000, guid: 5533086cc69e03d4ab837de104b62517, type: 3}
+  m_AnimationClipSettings:
+    serializedVersion: 2
+    m_AdditiveReferencePoseClip: {fileID: 0}
+    m_AdditiveReferencePoseTime: 0
+    m_StartTime: 0
+    m_StopTime: 0.5
+    m_OrientationOffsetY: 0
+    m_Level: 0
+    m_CycleOffset: 0
+    m_HasAdditiveReferencePose: 0
+    m_LoopTime: 1
+    m_LoopBlend: 0
+    m_LoopBlendOrientation: 0
+    m_LoopBlendPositionY: 0
+    m_LoopBlendPositionXZ: 0
+    m_KeepOriginalOrientation: 0
+    m_KeepOriginalPositionY: 1
+    m_KeepOriginalPositionXZ: 0
+    m_HeightFromFeet: 0
+    m_Mirror: 0
+  m_EditorCurves: []
+  m_EulerEditorCurves: []
+  m_HasGenericRootTransform: 0
+  m_HasMotionFloatCurves: 0
+  m_Events: []
diff --git a/Assets/Zombie.anim.meta b/Assets/Zombie.anim.meta
new file mode 100644
index 0000000000000000000000000000000000000000..23c8aacd020eec5149eea4066ad66e9ed5b31b12
--- /dev/null
+++ b/Assets/Zombie.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eaf83a90ec8170e4b84ae200a7110562
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 7400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Zombie.prefab b/Assets/Zombie.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..f9b844c56ff985ebed12633303f46f95caebc6bb
--- /dev/null
+++ b/Assets/Zombie.prefab
@@ -0,0 +1,165 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &3579496645657424277
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3579496645657424280}
+  - component: {fileID: 3579496645657424283}
+  - component: {fileID: 3579496645657424282}
+  - component: {fileID: 3579496645657424286}
+  - component: {fileID: 3579496645657424281}
+  - component: {fileID: 3579496645657424287}
+  m_Layer: 0
+  m_Name: Zombie
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &3579496645657424280
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 1.15, y: 5.99, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &3579496645657424283
+SpriteRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_Enabled: 1
+  m_CastShadows: 0
+  m_ReceiveShadows: 0
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 0
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_Sprite: {fileID: 21300000, guid: fb94a85578dd49141ac3d93064efaa3e, type: 3}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_FlipX: 0
+  m_FlipY: 0
+  m_DrawMode: 0
+  m_Size: {x: 1.83, y: 3.78}
+  m_AdaptiveModeThreshold: 0.5
+  m_SpriteTileMode: 0
+  m_WasSpriteAssigned: 1
+  m_MaskInteraction: 0
+  m_SpriteSortPoint: 0
+--- !u!95 &3579496645657424282
+Animator:
+  serializedVersion: 3
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_Enabled: 1
+  m_Avatar: {fileID: 0}
+  m_Controller: {fileID: 9100000, guid: fba90a48c6ca8704fb35a3bbcb6c6d8e, type: 2}
+  m_CullingMode: 0
+  m_UpdateMode: 0
+  m_ApplyRootMotion: 0
+  m_LinearVelocityBlending: 0
+  m_WarningMessage: 
+  m_HasTransformHierarchy: 1
+  m_AllowConstantClipSamplingOptimization: 1
+  m_KeepAnimatorControllerStateOnDisable: 0
+--- !u!50 &3579496645657424286
+Rigidbody2D:
+  serializedVersion: 4
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_BodyType: 0
+  m_Simulated: 1
+  m_UseFullKinematicContacts: 0
+  m_UseAutoMass: 1
+  m_Mass: 7.56
+  m_LinearDrag: 0
+  m_AngularDrag: 0
+  m_GravityScale: 1
+  m_Material: {fileID: 0}
+  m_Interpolate: 0
+  m_SleepingMode: 1
+  m_CollisionDetection: 0
+  m_Constraints: 0
+--- !u!61 &3579496645657424281
+BoxCollider2D:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_Enabled: 1
+  m_Density: 1
+  m_Material: {fileID: 0}
+  m_IsTrigger: 0
+  m_UsedByEffector: 0
+  m_UsedByComposite: 0
+  m_Offset: {x: 0, y: 0}
+  m_SpriteTilingProperty:
+    border: {x: 0, y: 0, z: 0, w: 0}
+    pivot: {x: 0.5, y: 0.5}
+    oldSize: {x: 1.83, y: 3.78}
+    newSize: {x: 1.83, y: 3.78}
+    adaptiveTilingThreshold: 0.5
+    drawMode: 0
+    adaptiveTiling: 0
+  m_AutoTiling: 0
+  serializedVersion: 2
+  m_Size: {x: 2, y: 3.78}
+  m_EdgeRadius: 0
+--- !u!114 &3579496645657424287
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3579496645657424277}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 7f8ff36524f593545ac9ff925302a99c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  LerpConstant: 3
+  speed: 2
diff --git a/Assets/Zombie.prefab.meta b/Assets/Zombie.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b746fdba8730ced91a8724eb3058faeff6e8c67d
--- /dev/null
+++ b/Assets/Zombie.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 31109f647481a1b4ca46df2bdca9edeb
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Build/2D Shooter.exe b/Build/2D Shooter.exe
new file mode 100644
index 0000000000000000000000000000000000000000..9734836bfd859eb4eaf97e125bdf475d8c4dc570
Binary files /dev/null and b/Build/2D Shooter.exe differ
diff --git a/Build/2D Shooter_Data/Managed/Assembly-CSharp.dll b/Build/2D Shooter_Data/Managed/Assembly-CSharp.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b7f5f568d4c928b8229585f7c0eb2d130ed83189
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/Assembly-CSharp.dll differ
diff --git a/Build/2D Shooter_Data/Managed/Mono.Security.dll b/Build/2D Shooter_Data/Managed/Mono.Security.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ae935dd3c03c575b814142df411cf87ef76c4e41
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/Mono.Security.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.ComponentModel.Composition.dll b/Build/2D Shooter_Data/Managed/System.ComponentModel.Composition.dll
new file mode 100644
index 0000000000000000000000000000000000000000..fff314f52396203334396588e3727df08b62cb70
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.ComponentModel.Composition.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Configuration.dll b/Build/2D Shooter_Data/Managed/System.Configuration.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4154033a9ddeeb0688b8c45cd9ffe8bcd6f69ea2
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Configuration.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Core.dll b/Build/2D Shooter_Data/Managed/System.Core.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4b6267a0ad8839acc720b4b0cf189da2f7686c2a
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Core.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Data.dll b/Build/2D Shooter_Data/Managed/System.Data.dll
new file mode 100644
index 0000000000000000000000000000000000000000..0f2c0ec4627271ccc6a566d5dfd312f5820a1739
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Data.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Diagnostics.StackTrace.dll b/Build/2D Shooter_Data/Managed/System.Diagnostics.StackTrace.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f517a4f634a340d7229816ac5a1afa71dce5331e
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Diagnostics.StackTrace.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Drawing.dll b/Build/2D Shooter_Data/Managed/System.Drawing.dll
new file mode 100644
index 0000000000000000000000000000000000000000..41b9a99b8f9004d3c0ddc43ee78d4289ec2e8ae7
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Drawing.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.EnterpriseServices.dll b/Build/2D Shooter_Data/Managed/System.EnterpriseServices.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cee1f28515a040b4edd7cec13b99b79263f7ae4e
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.EnterpriseServices.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Globalization.Extensions.dll b/Build/2D Shooter_Data/Managed/System.Globalization.Extensions.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c46ea47c2358fc1af5db8a8534eb65d7a6abc5d1
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Globalization.Extensions.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.IO.Compression.FileSystem.dll b/Build/2D Shooter_Data/Managed/System.IO.Compression.FileSystem.dll
new file mode 100644
index 0000000000000000000000000000000000000000..662167be574862bf38c2d089bf7def37efbd60be
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.IO.Compression.FileSystem.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.IO.Compression.dll b/Build/2D Shooter_Data/Managed/System.IO.Compression.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e81fcbd69533c29af010ccd68a26d33bb8eca1b2
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.IO.Compression.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Net.Http.dll b/Build/2D Shooter_Data/Managed/System.Net.Http.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c4472a7d7ae4651b595f91f6cde29d1d4cb59d41
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Net.Http.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Numerics.dll b/Build/2D Shooter_Data/Managed/System.Numerics.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9149abba5c5aa66035f62a7446bacfcd6c1fed08
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Numerics.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.Xml.dll b/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.Xml.dll
new file mode 100644
index 0000000000000000000000000000000000000000..5fe9cdf00c5facd13d7463e6c6f836a47e571291
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.Xml.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.dll b/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ebb3769babf960d062643b9bf94dd66735d154f6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Runtime.Serialization.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.ServiceModel.Internals.dll b/Build/2D Shooter_Data/Managed/System.ServiceModel.Internals.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d53cca1e5bbbc00e76ecde2d56c3e9f560b34fe7
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.ServiceModel.Internals.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Transactions.dll b/Build/2D Shooter_Data/Managed/System.Transactions.dll
new file mode 100644
index 0000000000000000000000000000000000000000..065d7577e2528beb57fed7392c51e17f5e670b29
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Transactions.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Xml.Linq.dll b/Build/2D Shooter_Data/Managed/System.Xml.Linq.dll
new file mode 100644
index 0000000000000000000000000000000000000000..aa4bc4844bef480326764b10aa51a9f709e5e154
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Xml.Linq.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Xml.XPath.XDocument.dll b/Build/2D Shooter_Data/Managed/System.Xml.XPath.XDocument.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7049c114328f5ec51f72e23c3077cba464599009
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Xml.XPath.XDocument.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.Xml.dll b/Build/2D Shooter_Data/Managed/System.Xml.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e2964e3dffb3facb0c150cdef5575d468296a856
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.Xml.dll differ
diff --git a/Build/2D Shooter_Data/Managed/System.dll b/Build/2D Shooter_Data/Managed/System.dll
new file mode 100644
index 0000000000000000000000000000000000000000..03e554ccf88fa7fc66e790651e68276dc0a2d2b8
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/System.dll differ
diff --git a/Build/2D Shooter_Data/Managed/Unity.Analytics.DataPrivacy.dll b/Build/2D Shooter_Data/Managed/Unity.Analytics.DataPrivacy.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9c0b919e185f08d6403e62e1c02c6b89d84f2146
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/Unity.Analytics.DataPrivacy.dll differ
diff --git a/Build/2D Shooter_Data/Managed/Unity.Analytics.StandardEvents.dll b/Build/2D Shooter_Data/Managed/Unity.Analytics.StandardEvents.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b8e7ea791e2a61daf289a0ba6ce50b93b10d0e47
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/Unity.Analytics.StandardEvents.dll differ
diff --git a/Build/2D Shooter_Data/Managed/Unity.TextMeshPro.dll b/Build/2D Shooter_Data/Managed/Unity.TextMeshPro.dll
new file mode 100644
index 0000000000000000000000000000000000000000..306e6790d6628aeb963e21476383a3f2f23c0d18
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/Unity.TextMeshPro.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.AIModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.AIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9aae0a0c9f78d5dff253c7b26ac0fb0a67568e6d
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.AIModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ARModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ARModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9963d2234bf5498d60a144a00004e4fe554eb2ae
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ARModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.AccessibilityModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.AccessibilityModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b928cba163ef699f3a6ac3869e8063dde88753be
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.AccessibilityModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.AnimationModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.AnimationModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ca211014674700e91383ec57580475ec513e8da6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.AnimationModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.AssetBundleModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.AssetBundleModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..bb9e09b7322265181fb799fa31ea78f5af4ed115
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.AssetBundleModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.AudioModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.AudioModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..95dad103ae7f8e7d29f4f127918207221913fb70
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.AudioModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.BaselibModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.BaselibModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c947b97652ddf92b4e21cadcd6bd31a99bc14205
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.BaselibModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ClothModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ClothModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..12924742d2f8c79ae2d70f8b3093fdca228df6ee
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ClothModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ClusterInputModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ClusterInputModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3449bd013e121bc65268faf984bd4798464504bd
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ClusterInputModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ClusterRendererModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ClusterRendererModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a64ac454afde774f7e5efaa322874138853ed8f5
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ClusterRendererModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.CoreModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.CoreModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..babc287c7a694a87da28e77e4668de4102096c4d
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.CoreModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.CrashReportingModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.CrashReportingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2cf7ec549a03163fafe2f57b24a6c56c8e3e946a
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.CrashReportingModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.DirectorModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.DirectorModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6bf71388fb9ef961c2463238d708e5fbea9cf19f
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.DirectorModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.FileSystemHttpModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.FileSystemHttpModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ad9c9a01641b447298559b7f1b8f9e60bf388809
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.FileSystemHttpModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.GameCenterModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.GameCenterModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d4e71729b1676e62a74019b7e7ee258c51b881e4
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.GameCenterModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.GridModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.GridModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d4ab8a804beb822ae188b8c0e662d4b3c3de601e
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.GridModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.HotReloadModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.HotReloadModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..0420a425622a4f78ae8eb35cb08515879f76f89a
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.HotReloadModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.IMGUIModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.IMGUIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..469d9aaae501f812cbdf72e7ff0623e7515d8e78
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.IMGUIModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ImageConversionModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ImageConversionModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..54629f7aa0aef0089a3156393fa2296042efcd50
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ImageConversionModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.InputModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.InputModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b9bf3fdb2a684d4b510902cb14336f2e917eb2f9
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.InputModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.JSONSerializeModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.JSONSerializeModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dbe606bfa9858d546af44c1c93c9e6561fc69acb
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.JSONSerializeModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.LocalizationModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.LocalizationModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..85d22b61fa3f35a07c1789b217bf4de2c3f6dbc6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.LocalizationModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.Networking.dll b/Build/2D Shooter_Data/Managed/UnityEngine.Networking.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e8d08e90447e61869d26c2809ee947d64abbbe40
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.Networking.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ParticleSystemModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ParticleSystemModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b80ba29d5a9fa51bd5ca7040ced913b730fa5c6e
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ParticleSystemModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.PerformanceReportingModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.PerformanceReportingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..39e261f85519027fc8154084365f4530335325c1
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.PerformanceReportingModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.Physics2DModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.Physics2DModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a4fc4b0b81c15478df8b2eba584f6220c2fb53a6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.Physics2DModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.PhysicsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.PhysicsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..bc73d6bbe0dd33c9bd6bab7b1d3f2a1c168ef703
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.PhysicsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ProfilerModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ProfilerModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..faa7b88fb16fd9eea150c085232caf3afe477e7b
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ProfilerModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.ScreenCaptureModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.ScreenCaptureModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d19fb01d3d031ea96017d47f608c6012f066554c
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.ScreenCaptureModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.SharedInternalsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.SharedInternalsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..147b2ba19629d2e13f4fb80790e2a1b2cf0e97a7
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.SharedInternalsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.SpatialTracking.dll b/Build/2D Shooter_Data/Managed/UnityEngine.SpatialTracking.dll
new file mode 100644
index 0000000000000000000000000000000000000000..434116d9b1c013fbe27f63fd45c4a96750977107
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.SpatialTracking.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.SpriteMaskModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.SpriteMaskModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..63fe37f3cbb348602377b9e613244c60266753f5
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.SpriteMaskModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.SpriteShapeModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.SpriteShapeModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..21388e7daeb1074614c781c782dd9f6bdaafe3bb
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.SpriteShapeModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.StreamingModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.StreamingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7af1e6095d88f6f1dbc08d779f855e60a279132
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.StreamingModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.StyleSheetsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.StyleSheetsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c782175752bd1c8bde83fa27d36b4cd3fd17b9c2
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.StyleSheetsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.SubstanceModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.SubstanceModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7879adee7fdfb46fa49f92369a5193ba455898a
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.SubstanceModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TLSModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TLSModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6ffbccd51a42570c1bd0db0dcc11ffd7071c19e3
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TLSModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TerrainModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TerrainModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b79ad007f7f44bd137d802bd59290864dee61d8e
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TerrainModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TerrainPhysicsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TerrainPhysicsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f3c956d8f3144396ef9036d8badcf76f5a6104e1
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TerrainPhysicsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TextCoreModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TextCoreModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dbcd8e1a6d9470a5a8293a6a112e117d73903750
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TextCoreModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TextRenderingModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TextRenderingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cc1eb8fe7cf1b2905aa364f2a0cf98016ca26770
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TextRenderingModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TilemapModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TilemapModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a3712ec9f5c38d307265ad972daaea7b72341f36
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TilemapModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.Timeline.dll b/Build/2D Shooter_Data/Managed/UnityEngine.Timeline.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a555e786397b7193040e8183f30d27c05893fe3a
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.Timeline.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.TimelineModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.TimelineModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2c57729e96719348e191285a0645519081dfacc9
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.TimelineModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UI.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UI.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dedad84745ae8ca5c9bbdc7bce33819ebf058e43
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UI.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UIElementsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UIElementsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dc54582340100d298c14254add02e3428bae5425
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UIElementsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UIModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d76fd3a47dd2cc945a8e203422344fbb9ee71cb4
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UIModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UNETModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UNETModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8282190b47a1e71b44bab1e22bd6ea6cf9bc0e43
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UNETModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UmbraModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UmbraModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..68ef7e8fabbb70b54d4cab53bc8cd631d73070bc
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UmbraModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityAnalyticsModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityAnalyticsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7f34e4d180348cfe9f0b1b18091d1e347a90748c
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityAnalyticsModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityConnectModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityConnectModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..966460882d4f9fd9c4987bfc5eddc51059ef7126
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityConnectModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityTestProtocolModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityTestProtocolModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..734ab318fa38be5fc9d93ed9f5f4b21bb52ce2e1
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityTestProtocolModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8a44ab43c4f966a509c51c9884b1f05de9b846ca
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7161cb5a5070df4b0fefe5409e20c3cbcd47caf
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..613a33793c5611bce593d9b073ebaec91edf4114
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d50377151e3d22472de76cad075874c84406cb64
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7bb4eeecabc806300d88898ed128d7ff955c3082
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.VFXModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.VFXModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..86df7facf8fee3a23d4b95efd46d9921f15e9b07
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.VFXModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.VRModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.VRModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6d345f66f7ea27450ec60884e2f3ce179bbed295
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.VRModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.VehiclesModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.VehiclesModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ba6f51fc2652b08bddb3d035fc89a3e475761f60
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.VehiclesModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.VideoModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.VideoModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..488b50853786e08df238adf6bbe066bdeec89f41
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.VideoModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.WindModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.WindModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d9158d4878d9af085542a332de5392120f1d46fb
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.WindModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.XRModule.dll b/Build/2D Shooter_Data/Managed/UnityEngine.XRModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a10519696c0c8027adcceeab92b2e06ae6170b90
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.XRModule.dll differ
diff --git a/Build/2D Shooter_Data/Managed/UnityEngine.dll b/Build/2D Shooter_Data/Managed/UnityEngine.dll
new file mode 100644
index 0000000000000000000000000000000000000000..fb3642978da5dc2f77f6c940dd15744cdd9209a6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/UnityEngine.dll differ
diff --git a/Build/2D Shooter_Data/Managed/mscorlib.dll b/Build/2D Shooter_Data/Managed/mscorlib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e29f404b7dcb5bc6884240651ef5073d3ecc74e5
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/mscorlib.dll differ
diff --git a/Build/2D Shooter_Data/Managed/netstandard.dll b/Build/2D Shooter_Data/Managed/netstandard.dll
new file mode 100644
index 0000000000000000000000000000000000000000..250cf817385cd5d2ea5cb8e72f00c5f5cab50ee6
Binary files /dev/null and b/Build/2D Shooter_Data/Managed/netstandard.dll differ
diff --git a/Build/2D Shooter_Data/Resources/unity default resources b/Build/2D Shooter_Data/Resources/unity default resources
new file mode 100644
index 0000000000000000000000000000000000000000..09c941767eb6d681407e9f1929aa7f1b0a5481cc
Binary files /dev/null and b/Build/2D Shooter_Data/Resources/unity default resources differ
diff --git a/Build/2D Shooter_Data/Resources/unity_builtin_extra b/Build/2D Shooter_Data/Resources/unity_builtin_extra
new file mode 100644
index 0000000000000000000000000000000000000000..1775866837af8b455626531a200a2bb9cd96b0fc
Binary files /dev/null and b/Build/2D Shooter_Data/Resources/unity_builtin_extra differ
diff --git a/Build/2D Shooter_Data/app.info b/Build/2D Shooter_Data/app.info
new file mode 100644
index 0000000000000000000000000000000000000000..105acc66aa747d574c41e98cbe52b9f356852359
--- /dev/null
+++ b/Build/2D Shooter_Data/app.info	
@@ -0,0 +1,2 @@
+DefaultCompany
+2D Shooter
\ No newline at end of file
diff --git a/Build/2D Shooter_Data/boot.config b/Build/2D Shooter_Data/boot.config
new file mode 100644
index 0000000000000000000000000000000000000000..6af17a9a79dbfac7a9846d1fe79f90c9bae9613d
--- /dev/null
+++ b/Build/2D Shooter_Data/boot.config	
@@ -0,0 +1,5 @@
+gfx-enable-native-gfx-jobs=
+wait-for-native-debugger=0
+scripting-runtime-version=latest
+vr-enabled=0
+hdr-display-enabled=0
diff --git a/Build/2D Shooter_Data/globalgamemanagers b/Build/2D Shooter_Data/globalgamemanagers
new file mode 100644
index 0000000000000000000000000000000000000000..f983ce476332234c3ba17bf4455ad28821183ba2
Binary files /dev/null and b/Build/2D Shooter_Data/globalgamemanagers differ
diff --git a/Build/2D Shooter_Data/globalgamemanagers.assets b/Build/2D Shooter_Data/globalgamemanagers.assets
new file mode 100644
index 0000000000000000000000000000000000000000..2fa6bcaaebf43edc1fedd6431d669ee61eadeb63
Binary files /dev/null and b/Build/2D Shooter_Data/globalgamemanagers.assets differ
diff --git a/Build/2D Shooter_Data/level0 b/Build/2D Shooter_Data/level0
new file mode 100644
index 0000000000000000000000000000000000000000..b720ab61bb3b36ac344df875c335147ddd0a6ac5
Binary files /dev/null and b/Build/2D Shooter_Data/level0 differ
diff --git a/Build/2D Shooter_Data/level1 b/Build/2D Shooter_Data/level1
new file mode 100644
index 0000000000000000000000000000000000000000..0716f406a0212f6ded19eb980a538f621dd1e274
Binary files /dev/null and b/Build/2D Shooter_Data/level1 differ
diff --git a/Build/2D Shooter_Data/level2 b/Build/2D Shooter_Data/level2
new file mode 100644
index 0000000000000000000000000000000000000000..e4dad68664c3d2112ca3f1dba0834e26e0901df9
Binary files /dev/null and b/Build/2D Shooter_Data/level2 differ
diff --git a/Build/2D Shooter_Data/sharedassets0.assets b/Build/2D Shooter_Data/sharedassets0.assets
new file mode 100644
index 0000000000000000000000000000000000000000..68aaa3a5b51f10599c40b587bdfe3138242c9f9f
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets0.assets differ
diff --git a/Build/2D Shooter_Data/sharedassets0.assets.resS b/Build/2D Shooter_Data/sharedassets0.assets.resS
new file mode 100644
index 0000000000000000000000000000000000000000..a6dc4cab96e56d295a8acebc8b0961c90d5038dd
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets0.assets.resS differ
diff --git a/Build/2D Shooter_Data/sharedassets1.assets b/Build/2D Shooter_Data/sharedassets1.assets
new file mode 100644
index 0000000000000000000000000000000000000000..1d477d1765c25e03058a14659ac1acad15de0032
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets1.assets differ
diff --git a/Build/2D Shooter_Data/sharedassets1.assets.resS b/Build/2D Shooter_Data/sharedassets1.assets.resS
new file mode 100644
index 0000000000000000000000000000000000000000..569b4570d7158cff3d13defc0bd65f461b21f3b3
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets1.assets.resS differ
diff --git a/Build/2D Shooter_Data/sharedassets1.resource b/Build/2D Shooter_Data/sharedassets1.resource
new file mode 100644
index 0000000000000000000000000000000000000000..0e7bddecf738be4c54a2cb0b86e765da2a77c48e
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets1.resource differ
diff --git a/Build/2D Shooter_Data/sharedassets2.assets b/Build/2D Shooter_Data/sharedassets2.assets
new file mode 100644
index 0000000000000000000000000000000000000000..b339b2e5853ea1c75e175496b65c8e16bdbf10d6
Binary files /dev/null and b/Build/2D Shooter_Data/sharedassets2.assets differ
diff --git a/Build/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll b/Build/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll
new file mode 100644
index 0000000000000000000000000000000000000000..52736cf3e5e44211e71ac75a0999f41bce2e2c39
Binary files /dev/null and b/Build/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll differ
diff --git a/Build/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll b/Build/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8086ffe90960af1d991d2c82b39da3ca3461928c
Binary files /dev/null and b/Build/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll differ
diff --git a/Build/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser b/Build/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser
new file mode 100644
index 0000000000000000000000000000000000000000..dcedf7f7333565268eb99488767618235e7d24f1
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser
@@ -0,0 +1,42 @@
+<!--
+    This file defines some of the browsers that Microsoft's implementation provides in
+    <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers\*.browser
+	
+	It is not derived from any file distributed with Microsoft's implementation.  Since
+	we can't distribute MS's browser files, we use browscap.ini to determine 
+	browser capabilities.  Then, if and only if the application contains App_Browser/*.browser
+	files and we are using .NET 2.0 or higher, we supplement the capabilities with the 
+	information in those files and the files in this directory.  The primary goal of this file
+	is provide browser definitions that might be referenced in App_Browser/*.browser files.
+-->
+<browsers>
+  <defaultBrowser id="Default">
+  </defaultBrowser>
+  <browser id="Default">
+    <identification>
+    	<userAgent match="." />
+    </identification>
+  </browser>
+  <browser id="IE6to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[6-9]" />
+      <capability name="browser" match="^(IE|AOL)$" />
+    </identification>
+  </browser>
+  <browser id="Opera8to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[8-9]" />
+      <capability name="browser" match="^Opera$" />
+    </identification>
+  </browser>
+  <browser id="Safari" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Safari$" />
+    </identification>
+  </browser>
+  <browser id="Mozilla" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Mozilla" />
+    </identification>
+  </browser>
+</browsers>
\ No newline at end of file
diff --git a/Build/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Build/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx
new file mode 100644
index 0000000000000000000000000000000000000000..f4d74bff7f5bca96ad3fc764e518b4d710854177
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx
@@ -0,0 +1,1901 @@
+<%--
+//
+// DefaultWsdlHelpGenerator.aspx: 
+//
+// Author:
+//   Lluis Sanchez Gual (lluis@ximian.com)
+//
+// (C) 2003 Ximian, Inc.  http://www.ximian.com
+//
+--%>
+
+<%@ Import Namespace="System.Collections" %>
+<%@ Import Namespace="System.Collections.Generic" %>
+<%@ Import Namespace="System.IO" %>
+<%@ Import Namespace="System.Xml.Serialization" %>
+<%@ Import Namespace="System.Xml" %>
+<%@ Import Namespace="System.Xml.Schema" %>
+<%@ Import Namespace="System.Web.Services" %>
+<%@ Import Namespace="System.Web.Services.Description" %>
+<%@ Import Namespace="System.Web.Services.Configuration" %>
+<%@ Import Namespace="System.Web.Configuration" %>
+<%@ Import Namespace="System" %>
+<%@ Import Namespace="System.Net" %>
+<%@ Import Namespace="System.Globalization" %>
+<%@ Import Namespace="System.Resources" %>
+<%@ Import Namespace="System.Diagnostics" %>
+<%@ Import Namespace="System.CodeDom" %>
+<%@ Import Namespace="System.CodeDom.Compiler" %>
+<%@ Import Namespace="Microsoft.CSharp" %>
+<%@ Import Namespace="Microsoft.VisualBasic" %>
+<%@ Import Namespace="System.Text" %>
+<%@ Import Namespace="System.Text.RegularExpressions" %>
+<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
+<%@ Assembly name="System.Web.Services" %>
+<%@ Page debug="true" %>
+
+<html>
+<script language="C#" runat="server">
+
+ServiceDescriptionCollection descriptions;
+XmlSchemas schemas;
+
+string WebServiceName;
+string WebServiceDescription;
+string PageName;
+
+string DefaultBinding;
+ArrayList ServiceProtocols;
+
+string CurrentOperationName;
+string CurrentOperationBinding;
+string OperationDocumentation;
+string CurrentOperationFormat;
+bool CurrentOperationSupportsTest;
+ArrayList InParams;
+ArrayList OutParams;
+string CurrentOperationProtocols;
+int CodeTextColumns = 95;
+BasicProfileViolationCollection ProfileViolations;
+
+void Page_Load(object sender, EventArgs e)
+{
+	descriptions = (ServiceDescriptionCollection) Context.Items["wsdls"];
+	schemas = (XmlSchemas) Context.Items["schemas"];
+
+	ServiceDescription desc = descriptions [0];
+	if (schemas.Count == 0) schemas = desc.Types.Schemas;
+	
+	Service service = desc.Services[0];
+	WebServiceName = service.Name;
+	if (desc.Bindings.Count == 0)
+		return;
+	
+	DefaultBinding = desc.Bindings[0].Name;
+	WebServiceDescription = service.Documentation;
+	if (WebServiceDescription == "" || WebServiceDescription == null)
+		WebServiceDescription = "Description has not been provided";
+	ServiceProtocols = FindServiceProtocols (null);
+	
+	CurrentOperationName = Request.QueryString["op"];
+	CurrentOperationBinding = Request.QueryString["bnd"];
+	if (CurrentOperationName != null) BuildOperationInfo ();
+
+	PageName = HttpUtility.UrlEncode (Path.GetFileName(Request.Path), Encoding.UTF8);
+
+	ArrayList list = new ArrayList ();
+	foreach (ServiceDescription sd in descriptions) {
+		foreach (Binding bin in sd.Bindings)
+			if (bin.Extensions.Find (typeof(SoapBinding)) != null) list.Add (bin);
+	}
+
+	BindingsRepeater.DataSource = list;
+	Page.DataBind();
+	
+	ProfileViolations = new BasicProfileViolationCollection ();
+	foreach (WsiProfilesElement claims in ((WebServicesSection) WebConfigurationManager.GetSection("system.web/webServices")).ConformanceWarnings)
+		if (claims.Name != WsiProfiles.None)
+			WebServicesInteroperability.CheckConformance (claims.Name, descriptions, ProfileViolations);
+}
+
+void BuildOperationInfo ()
+{
+	InParams = new ArrayList ();
+	OutParams = new ArrayList ();
+	
+	Port port = FindPort (CurrentOperationBinding, null);
+	Binding binding = descriptions.GetBinding (port.Binding);
+	
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	OperationDocumentation = oper.Documentation;
+	if (OperationDocumentation == null || OperationDocumentation == "")
+		OperationDocumentation = "No additional remarks";
+	
+	foreach (OperationMessage opm in oper.Messages)
+	{
+		if (opm is OperationInput)
+			BuildParameters (InParams, opm);
+		else if (opm is OperationOutput)
+			BuildParameters (OutParams, opm);
+	}
+	
+	// Protocols supported by the operation
+	CurrentOperationProtocols = "";
+	WebServiceProtocols testProtocols = 0;
+	ArrayList prots = FindServiceProtocols (CurrentOperationName);
+	for (int n=0; n<prots.Count; n++) {
+		string prot = (string) prots [n];
+		if (n != 0) CurrentOperationProtocols += ", ";
+		CurrentOperationProtocols += prot;
+		if (prot == "HttpGet")
+			testProtocols |= WebServiceProtocols.HttpGet;
+		else if (prot == "HttpPost") {
+			testProtocols |= WebServiceProtocols.HttpPost;
+			if (Context.Request.IsLocal)
+				testProtocols |= WebServiceProtocols.HttpPostLocalhost;
+		}
+	}
+	CurrentOperationSupportsTest = (WebServicesSection.Current.EnabledProtocols & testProtocols) != 0;
+
+	// Operation format
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	if (obin != null)
+		CurrentOperationFormat = GetOperationFormat (obin);
+
+	InputParamsRepeater.DataSource = InParams;
+	InputFormParamsRepeater.DataSource = InParams;
+	OutputParamsRepeater.DataSource = OutParams;
+}
+
+void BuildParameters (ArrayList list, OperationMessage opm)
+{
+	Message msg = descriptions.GetMessage (opm.Message);
+	if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+	{
+		MessagePart part = msg.Parts[0];
+		XmlSchemaComplexType ctype;
+		if (part.Element == XmlQualifiedName.Empty)
+		{
+			ctype = (XmlSchemaComplexType) schemas.Find (part.Type, typeof(XmlSchemaComplexType));
+		}
+		else
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+			ctype = (XmlSchemaComplexType) elem.SchemaType;
+		}
+		XmlSchemaSequence seq = ctype.Particle as XmlSchemaSequence;
+		if (seq == null) return;
+		
+		foreach (XmlSchemaObject ob in seq.Items)
+		{
+			Parameter p = new Parameter();
+			p.Description = "No additional remarks";
+			
+			if (ob is XmlSchemaElement)
+			{
+				XmlSchemaElement selem = GetRefElement ((XmlSchemaElement)ob);
+				p.Name = selem.Name;
+				p.Type = selem.SchemaTypeName.Name;
+			}
+			else
+			{
+				p.Name = "Unknown";
+				p.Type = "Unknown";
+			}
+			list.Add (p);
+		}
+	}
+	else
+	{
+		foreach (MessagePart part in msg.Parts)
+		{
+			Parameter p = new Parameter ();
+			p.Description = "No additional remarks";
+			p.Name = part.Name;
+			if (part.Element == XmlQualifiedName.Empty)
+				p.Type = part.Type.Name;
+			else
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+				p.Type = elem.SchemaTypeName.Name;
+			}
+			list.Add (p);
+		}
+	}
+}
+
+string GetOperationFormat (OperationBinding obin)
+{
+	string format = "";
+	SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+	if (sob != null) {
+		format = sob.Style.ToString ();
+		SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+		if (sbb != null)
+			format += " / " + sbb.Use;
+	}
+	return format;
+}
+
+XmlSchemaElement GetRefElement (XmlSchemaElement elem)
+{
+	if (!elem.RefName.IsEmpty)
+		return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+	else
+		return elem;
+}
+
+ArrayList FindServiceProtocols(string operName)
+{
+	ArrayList table = new ArrayList ();
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		string prot = null;
+		Binding bin = descriptions.GetBinding (port.Binding);
+		if (bin.Extensions.Find (typeof(SoapBinding)) != null)
+			prot = "Soap";
+		else 
+		{
+			HttpBinding hb = (HttpBinding) bin.Extensions.Find (typeof(HttpBinding));
+			if (hb != null && hb.Verb == "POST") prot = "HttpPost";
+			else if (hb != null && hb.Verb == "GET") prot = "HttpGet";
+		}
+		
+		if (prot != null && operName != null)
+		{
+			if (FindOperation (bin, operName) == null)
+				prot = null;
+		}
+
+		if (prot != null && !table.Contains (prot))
+			table.Add (prot);
+	}
+	return table;
+}
+
+Port FindPort (string portName, string protocol)
+{
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		if (portName == null)
+		{
+			Binding binding = descriptions.GetBinding (port.Binding);
+			if (GetProtocol (binding) == protocol) return port;
+		}
+		else if (port.Name == portName)
+			return port;
+	}
+	return null;
+}
+
+string GetProtocol (Binding binding)
+{
+	if (binding.Extensions.Find (typeof(SoapBinding)) != null) return "Soap";
+	HttpBinding hb = (HttpBinding) binding.Extensions.Find (typeof(HttpBinding));
+	if (hb == null) return "";
+	if (hb.Verb == "POST") return "HttpPost";
+	if (hb.Verb == "GET") return "HttpGet";
+	return "";
+}
+
+
+Operation FindOperation (PortType portType, string name)
+{
+	foreach (Operation oper in portType.Operations) {
+		if (oper.Messages.Input.Name != null) {
+			if (oper.Messages.Input.Name == name) return oper;
+		}
+		else
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+OperationBinding FindOperation (Binding binding, string name)
+{
+	foreach (OperationBinding oper in binding.Operations) {
+		if (oper.Input.Name != null) {
+			if (oper.Input.Name == name) return oper;
+		}
+		else 
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+string FormatBindingName (string name)
+{
+	if (name == DefaultBinding) return "Methods";
+	else return "Methods for binding<br>" + name;
+}
+
+string GetOpName (object op)
+{
+	OperationBinding ob = op as OperationBinding;
+	if (ob == null) return "";
+	if (ob.Input.Name != null) return ob.Input.Name;
+	else return ob.Name;
+}
+
+bool HasFormResult
+{
+	get { return Request.QueryString ["ext"] == "testform"; }
+}
+
+class NoCheckCertificatePolicy : ICertificatePolicy {
+	public bool CheckValidationResult (ServicePoint a, X509Certificate b, WebRequest c, int d)
+	{
+		return true;
+	}
+}
+
+string GetOrPost ()
+{
+	return (CurrentOperationProtocols.IndexOf ("HttpGet") >= 0) ? "GET" : "POST";
+}
+
+string GetQS ()
+{
+	bool fill = false;
+	string qs = "";
+	NameValueCollection query_string = Request.QueryString;
+	for (int n = 0; n < query_string.Count; n++) {
+		if (fill) {
+			if (qs != "") qs += "&";
+			qs += query_string.GetKey(n) + "=" + Server.UrlEncode (query_string [n]);
+		}
+		if (query_string.GetKey(n) == "ext") fill = true;
+	}
+
+	return qs;
+}
+
+string GetTestResultUrl ()
+{ 
+	if (!HasFormResult) return "";
+	
+	string location = null;
+	ServiceDescription desc = descriptions [0];
+	Service service = desc.Services[0];
+	foreach (Port port in service.Ports)
+		if (port.Name == CurrentOperationBinding)
+		{
+			SoapAddressBinding sbi = (SoapAddressBinding) port.Extensions.Find (typeof(SoapAddressBinding));
+			if (sbi != null)
+				location = sbi.Location;
+		}
+
+	if (location == null) 
+		return "Could not locate web service";
+	
+	return location + "/" + CurrentOperationName;
+}
+
+string GenerateOperationMessages (string protocol, bool generateInput)
+{
+	if (!IsOperationSupported (protocol)) return "";
+	
+	Port port;
+	if (protocol != "Soap") port = FindPort (null, protocol);
+	else port = FindPort (CurrentOperationBinding, null);
+	
+	Binding binding = descriptions.GetBinding (port.Binding);
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	HtmlSampleGenerator sg = new HtmlSampleGenerator (descriptions, schemas);
+	string txt = sg.GenerateMessage (port, obin, oper, protocol, generateInput);
+	if (protocol == "Soap") txt = WrapText (txt,CodeTextColumns);
+	txt = ColorizeXml (txt);
+	txt = txt.Replace ("@placeholder!","<span class='literal-placeholder'>");
+	txt = txt.Replace ("!placeholder@","</span>");
+	return txt;
+}
+
+bool IsOperationSupported (string protocol)
+{
+	if (CurrentPage != "op" || CurrentTab != "msg") return false;
+	if (protocol == "Soap") return true;
+
+	Port port = FindPort (null, protocol);
+	if (port == null) return false;
+	Binding binding = descriptions.GetBinding (port.Binding);
+	if (binding == null) return false;
+	return FindOperation (binding, CurrentOperationName) != null;
+}
+
+//
+// Proxy code generation
+//
+
+string GetProxyCode ()
+{
+	CodeNamespace codeNamespace = new CodeNamespace();
+	CodeCompileUnit codeUnit = new CodeCompileUnit();
+	
+	codeUnit.Namespaces.Add (codeNamespace);
+
+	ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
+	
+	foreach (ServiceDescription sd in descriptions)
+		importer.AddServiceDescription(sd, null, null);
+
+	foreach (XmlSchema sc in schemas)
+		importer.Schemas.Add (sc);
+
+	importer.Import(codeNamespace, codeUnit);
+
+	string langId = Request.QueryString ["lang"];
+	if (langId == null || langId == "") langId = "cs";
+	CodeDomProvider provider = GetProvider (langId);
+	ICodeGenerator generator = provider.CreateGenerator();
+	CodeGeneratorOptions options = new CodeGeneratorOptions();
+	
+	StringWriter sw = new StringWriter ();
+	generator.GenerateCodeFromCompileUnit(codeUnit, sw, options);
+
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), langId);
+}
+
+public string CurrentLanguage
+{
+	get {
+		string langId = Request.QueryString ["lang"];
+		if (langId == null || langId == "") langId = "cs";
+		return langId;
+	}
+}
+
+public string CurrentProxytName
+{
+	get {
+		string lan = CurrentLanguage == "cs" ? "C#" : "Visual Basic";
+		return lan + " Client Proxy";
+	}
+}
+
+private CodeDomProvider GetProvider(string langId)
+{
+	switch (langId.ToUpper())
+	{
+		case "CS": return new CSharpCodeProvider();
+		case "VB": return new VBCodeProvider();
+		default: return null;
+	}
+}
+
+//
+// Document generation
+//
+class UTF8StringWriter : StringWriter {
+	public override Encoding Encoding {
+		get { return Encoding.UTF8; }
+	}
+}
+
+string GenerateDocument ()
+{
+	UTF8StringWriter sw = new UTF8StringWriter ();
+	
+	if (CurrentDocType == "wsdl")
+		descriptions [CurrentDocInd].Write (sw);
+	else if (CurrentDocType == "schema")
+		schemas [CurrentDocInd].Write (sw);
+		
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), "xml");
+}
+
+public string CurrentDocType
+{
+	get { return Request.QueryString ["doctype"] != null ? Request.QueryString ["doctype"] : "wsdl"; }
+}
+
+public int CurrentDocInd
+{
+	get { return Request.QueryString ["docind"] != null ? int.Parse (Request.QueryString ["docind"]) : 0; }
+}
+
+public string CurrentDocumentName
+{
+	get {
+		if (CurrentDocType == "wsdl")
+			return "WSDL document for namespace \"" + descriptions [CurrentDocInd].TargetNamespace + "\"";
+		else
+			return "Xml Schema for namespace \"" + schemas [CurrentDocInd].TargetNamespace + "\"";
+	}
+}
+
+//
+// Pages and tabs
+//
+
+bool firstTab = true;
+ArrayList disabledTabs = new ArrayList ();
+
+string CurrentTab
+{
+	get { return Request.QueryString["tab"] != null ? Request.QueryString["tab"] : "main" ; }
+}
+
+string CurrentPage
+{
+	get { return Request.QueryString["page"] != null ? Request.QueryString["page"] : "main" ; }
+}
+
+void WriteTabs ()
+{
+	if (CurrentOperationName != null)
+	{
+		WriteTab ("main","Overview");
+		WriteTab ("test","Test Form");
+		WriteTab ("msg","Message Layout");
+	}
+}
+
+void WriteTab (string id, string label)
+{
+	if (!firstTab) Response.Write("&nbsp;|&nbsp;");
+	firstTab = false;
+	
+	string cname = CurrentTab == id ? "tabLabelOn" : "tabLabelOff";
+	Response.Write ("<a href='" + PageName + "?" + GetPageContext(null) + GetDataContext() + "tab=" + id + "' style='text-decoration:none'>");
+	Response.Write ("<span class='" + cname + "'>" + label + "</span>");
+	Response.Write ("</a>");
+}
+
+string GetTabContext (string pag, string tab)
+{
+	if (tab == null) tab = CurrentTab;
+	if (pag == null) pag = CurrentPage;
+	if (pag != CurrentPage) tab = "main";
+	return "page=" + pag + "&tab=" + tab + "&"; 
+}
+
+string GetPageContext (string pag)
+{
+	if (pag == null) pag = CurrentPage;
+	return "page=" + pag + "&"; 
+}
+
+class Tab
+{
+	public string Id;
+	public string Label;
+}
+
+//
+// Syntax coloring
+//
+
+static string keywords_cs =
+	"(\\babstract\\b|\\bevent\\b|\\bnew\\b|\\bstruct\\b|\\bas\\b|\\bexplicit\\b|\\bnull\\b|\\bswitch\\b|\\bbase\\b|\\bextern\\b|" +
+	"\\bobject\\b|\\bthis\\b|\\bbool\\b|\\bfalse\\b|\\boperator\\b|\\bthrow\\b|\\bbreak\\b|\\bfinally\\b|\\bout\\b|\\btrue\\b|" +
+	"\\bbyte\\b|\\bfixed\\b|\\boverride\\b|\\btry\\b|\\bcase\\b|\\bfloat\\b|\\bparams\\b|\\btypeof\\b|\\bcatch\\b|\\bfor\\b|" +
+	"\\bprivate\\b|\\buint\\b|\\bchar\\b|\\bforeach\\b|\\bprotected\\b|\\bulong\\b|\\bchecked\\b|\\bgoto\\b|\\bpublic\\b|" +
+	"\\bunchecked\\b|\\bclass\\b|\\bif\\b|\\breadonly\\b|\\bunsafe\\b|\\bconst\\b|\\bimplicit\\b|\\bref\\b|\\bushort\\b|" +
+	"\\bcontinue\\b|\\bin\\b|\\breturn\\b|\\busing\\b|\\bdecimal\\b|\\bint\\b|\\bsbyte\\b|\\bvirtual\\b|\\bdefault\\b|" +
+	"\\binterface\\b|\\bsealed\\b|\\bvolatile\\b|\\bdelegate\\b|\\binternal\\b|\\bshort\\b|\\bvoid\\b|\\bdo\\b|\\bis\\b|" +
+	"\\bsizeof\\b|\\bwhile\\b|\\bdouble\\b|\\block\\b|\\bstackalloc\\b|\\belse\\b|\\blong\\b|\\bstatic\\b|\\benum\\b|" +
+	"\\bnamespace\\b|\\bstring\\b)";
+
+static string keywords_vb =
+	"(\\bAddHandler\\b|\\bAddressOf\\b|\\bAlias\\b|\\bAnd\\b|\\bAndAlso\\b|\\bAnsi\\b|\\bAs\\b|\\bAssembly\\b|" +
+	"\\bAuto\\b|\\bBoolean\\b|\\bByRef\\b|\\bByte\\b|\\bByVal\\b|\\bCall\\b|\\bCase\\b|\\bCatch\\b|" +
+	"\\bCBool\\b|\\bCByte\\b|\\bCChar\\b|\\bCDate\\b|\\bCDec\\b|\\bCDbl\\b|\\bChar\\b|\\bCInt\\b|" +
+	"\\bClass\\b|\\bCLng\\b|\\bCObj\\b|\\bConst\\b|\\bCShort\\b|\\bCSng\\b|\\bCStr\\b|\\bCType\\b|" +
+	"\\bDate\\b|\\bDecimal\\b|\\bDeclare\\b|\\bDefault\\b|\\bDelegate\\b|\\bDim\\b|\\bDirectCast\\b|\\bDo\\b|" +
+	"\\bDouble\\b|\\bEach\\b|\\bElse\\b|\\bElseIf\\b|\\bEnd\\b|\\bEnum\\b|\\bErase\\b|\\bError\\b|" +
+	"\\bEvent\\b|\\bExit\\b|\\bFalse\\b|\\bFinally\\b|\\bFor\\b|\\bFriend\\b|\\bFunction\\b|\\bGet\\b|" +
+	"\\bGetType\\b|\\bGoSub\\b|\\bGoTo\\b|\\bHandles\\b|\\bIf\\b|\\bImplements\\b|\\bImports\\b|\\bIn\\b|" +
+	"\\bInherits\\b|\\bInteger\\b|\\bInterface\\b|\\bIs\\b|\\bLet\\b|\\bLib\\b|\\bLike\\b|\\bLong\\b|" +
+	"\\bLoop\\b|\\bMe\\b|\\bMod\\b|\\bModule\\b|\\bMustInherit\\b|\\bMustOverride\\b|\\bMyBase\\b|\\bMyClass\\b|" +
+	"\\bNamespace\\b|\\bNew\\b|\\bNext\\b|\\bNot\\b|\\bNothing\\b|\\bNotInheritable\\b|\\bNotOverridable\\b|\\bObject\\b|" +
+	"\\bOn\\b|\\bOption\\b|\\bOptional\\b|\\bOr\\b|\\bOrElse\\b|\\bOverloads\\b|\\bOverridable\\b|\\bOverrides\\b|" +
+	"\\bParamArray\\b|\\bPreserve\\b|\\bPrivate\\b|\\bProperty\\b|\\bProtected\\b|\\bPublic\\b|\\bRaiseEvent\\b|\\bReadOnly\\b|" +
+	"\\bReDim\\b|\\bREM\\b|\\bRemoveHandler\\b|\\bResume\\b|\\bReturn\\b|\\bSelect\\b|\\bSet\\b|\\bShadows\\b|" +
+	"\\bShared\\b|\\bShort\\b|\\bSingle\\b|\\bStatic\\b|\\bStep\\b|\\bStop\\b|\\bString\\b|\\bStructure\\b|" +
+	"\\bSub\\b|\\bSyncLock\\b|\\bThen\\b|\\bThrow\\b|\\bTo\\b|\\bTrue\\b|\\bTry\\b|\\bTypeOf\\b|" +
+	"\\bUnicode\\b|\\bUntil\\b|\\bVariant\\b|\\bWhen\\b|\\bWhile\\b|\\bWith\\b|\\bWithEvents\\b|\\bWriteOnly\\b|\\bXor\\b)";
+
+string Colorize (string text, string lang)
+{
+	if (lang == "xml") return ColorizeXml (text);
+	else if (lang == "cs") return ColorizeCs (text);
+	else if (lang == "vb") return ColorizeVb (text);
+	else return text;
+}
+
+string ColorizeXml (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	Regex re = new Regex ("\r\n|\r|\n");
+	text = re.Replace (text, "_br_");
+	
+	re = new Regex ("<\\s*(\\/?)\\s*([\\s\\S]*?)\\s*(\\/?)\\s*>");
+	text = re.Replace (text,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = new Regex ("\\{(\\w*):([\\s\\S]*?)\\}");
+	text = re.Replace (text,"<span style='color:$1'>$2</span>");
+
+	re = new Regex ("\"(.*?)\"");
+	text = re.Replace (text,"\"<span style='color:purple'>$1</span>\"");
+
+	
+	text = text.Replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("_br_", "<br>");
+	return text;
+}
+
+string ColorizeCs (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+
+	text = text.Replace ("<", "&lt;");
+	text = text.Replace (">", "&gt;");
+
+	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("//(((.(?!\"</span>))|\"(((?!\").)*)\"</span>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_cs);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	
+	return text;
+}
+
+string ColorizeVb (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	
+/*	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("'(((.(?!\"\\<\\/span\\>))|\"(((?!\").)*)\"\\<\\/span\\>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_vb);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+*/	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	return text;
+}
+
+//
+// Helper methods and classes
+//
+
+string GetDataContext ()
+{
+	return "op=" + CurrentOperationName + "&bnd=" + CurrentOperationBinding + "&";
+}
+
+string GetOptionSel (string v1, string v2)
+{
+	string op = "<option ";
+	if (v1 == v2) op += "selected ";
+	return op + "value='" + v1 + "'>";
+}
+
+string WrapText (string text, int maxChars)
+{
+	text =  text.Replace(" />","/>");
+	
+	string linspace = null;
+	int lincount = 0;
+	int breakpos = 0;
+	int linstart = 0;
+	bool inquotes = false;
+	char lastc = ' ';
+	string sublineIndent = "";
+	System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+	for (int n=0; n<text.Length; n++)
+	{
+		char c = text [n];
+		
+		if (c=='\r' || c=='\n' || n==text.Length-1)
+		{
+			sb.Append (linspace + sublineIndent + text.Substring (linstart, n-linstart+1));
+			linspace = null;
+			lincount = 0;
+			linstart = n+1;
+			breakpos = linstart;
+			sublineIndent = "";
+			lastc = c;
+			continue;
+		}
+		
+		if (lastc==',' || lastc=='(')
+		{
+			if (!inquotes) breakpos = n;
+		}
+		
+		if (lincount > maxChars && breakpos >= linstart)
+		{
+			if (linspace != null)
+				sb.Append (linspace + sublineIndent);
+			sb.Append (text.Substring (linstart, breakpos-linstart));
+			sb.Append ("\n");
+			sublineIndent = "     ";
+			lincount = linspace.Length + sublineIndent.Length + (n-breakpos);
+			linstart = breakpos;
+		}
+		
+		if (c==' ' || c=='\t')
+		{
+			if (!inquotes)
+				breakpos = n;
+		}
+		else if (c=='"')
+		{
+			inquotes = !inquotes;
+		}
+		else 
+			if (linspace == null) {
+				linspace = text.Substring (linstart, n-linstart);
+				linstart = n;
+			}
+
+		lincount++;
+		lastc = c;
+	}
+	return sb.ToString ();
+}
+
+class Parameter
+{
+	string name;
+	string type;
+	string description;
+
+	public string Name { get { return name; } set { name = value; } }
+	public string Type { get { return type; } set { type = value; } }
+	public string Description { get { return description; } set { description = value; } }
+}
+
+public class HtmlSampleGenerator: SampleGenerator
+{
+	public HtmlSampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+	: base (services, schemas)
+	{
+	}
+		
+	protected override string GetLiteral (string s)
+	{
+		return "@placeholder!" + s + "!placeholder@";
+	}
+}
+
+
+	public class SampleGenerator
+	{
+		protected ServiceDescriptionCollection descriptions;
+		protected XmlSchemas schemas;
+		XmlSchemaElement anyElement;
+		ArrayList queue;
+		SoapBindingUse currentUse;
+		XmlDocument document = new XmlDocument ();
+		
+		static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);
+		static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array","http://schemas.xmlsoap.org/soap/encoding/");
+		static readonly XmlQualifiedName arrayTypeRefName = new XmlQualifiedName ("arrayType","http://schemas.xmlsoap.org/soap/encoding/");
+		const string SoapEnvelopeNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
+		const string WsdlNamespace = "http://schemas.xmlsoap.org/wsdl/";
+		const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
+		
+		class EncodedType
+		{
+			public EncodedType (string ns, XmlSchemaElement elem) { Namespace = ns; Element = elem; }
+			public string Namespace;
+			public XmlSchemaElement Element;
+		}
+
+		public SampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+		{
+			descriptions = services;
+			this.schemas = schemas;
+			queue = new ArrayList ();
+		}
+		
+		public string GenerateMessage (Port port, OperationBinding obin, Operation oper, string protocol, bool generateInput)
+		{
+			OperationMessage msg = null;
+			foreach (OperationMessage opm in oper.Messages)
+			{
+				if (opm is OperationInput && generateInput) msg = opm;
+				else if (opm is OperationOutput && !generateInput) msg = opm;
+			}
+			if (msg == null) return null;
+			
+			switch (protocol) {
+				case "Soap": return GenerateHttpSoapMessage (port, obin, oper, msg);
+				case "HttpGet": return GenerateHttpGetMessage (port, obin, oper, msg);
+				case "HttpPost": return GenerateHttpPostMessage (port, obin, oper, msg);
+			}
+			return "Unknown protocol";
+		}
+		
+		public string GenerateHttpSoapMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				SoapAddressBinding sab = port.Extensions.Find (typeof(SoapAddressBinding)) as SoapAddressBinding;
+				SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+				req += "POST " + new Uri (sab.Location).AbsolutePath + "\n";
+				req += "SOAPAction: " + sob.SoapAction + "\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			}
+			
+			req += GenerateSoapMessage (obin, oper, msg);
+			return req;
+		}
+		
+		public string GenerateHttpGetMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location + "?" + BuildQueryString (msg);
+				req += "GET " + location + "\n";
+				req += "Host: " + GetLiteral ("string");
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			
+				MimeXmlBinding mxb = (MimeXmlBinding) obin.Output.Extensions.Find (typeof(MimeXmlBinding)) as MimeXmlBinding;
+				if (mxb == null) return req;
+				
+				Message message = descriptions.GetMessage (msg.Message);
+				XmlQualifiedName ename = null;
+				foreach (MessagePart part in message.Parts)
+					if (part.Name == mxb.Part) ename = part.Element;
+					
+				if (ename == null) return req + GetLiteral("string");
+				
+				StringWriter sw = new StringWriter ();
+				XmlTextWriter xtw = new XmlTextWriter (sw);
+				xtw.Formatting = Formatting.Indented;
+				currentUse = SoapBindingUse.Literal;
+				WriteRootElementSample (xtw, ename);
+				xtw.Close ();
+				req += sw.ToString ();
+			}
+			
+			return req;
+		}
+		
+		public string GenerateHttpPostMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location;
+				req += "POST " + location + "\n";
+				req += "Content-Type: application/x-www-form-urlencoded\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+				req += BuildQueryString (msg);
+			}
+			else return GenerateHttpGetMessage (port, obin, oper, msg);
+			
+			return req;
+		}
+		
+		string BuildQueryString (OperationMessage opm)
+		{
+			string s = "";
+			Message msg = descriptions.GetMessage (opm.Message);
+			foreach (MessagePart part in msg.Parts)
+			{
+				if (s.Length != 0) s += "&";
+				s += part.Name + "=" + GetLiteral (part.Type.Name);
+			}
+			return s;
+		}
+		
+		public string GenerateSoapMessage (OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			SoapBindingStyle style = (sob != null) ? sob.Style : SoapBindingStyle.Document;
+			
+			MessageBinding msgbin = (msg is OperationInput) ? (MessageBinding) obin.Input : (MessageBinding)obin.Output;
+			SoapBodyBinding sbb = msgbin.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+			SoapBindingUse bodyUse = (sbb != null) ? sbb.Use : SoapBindingUse.Literal;
+			
+			StringWriter sw = new StringWriter ();
+			XmlTextWriter xtw = new XmlTextWriter (sw);
+			xtw.Formatting = Formatting.Indented;
+			
+			xtw.WriteStartDocument ();
+			xtw.WriteStartElement ("soap", "Envelope", SoapEnvelopeNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsd", null, XmlSchema.Namespace);
+			
+			if (bodyUse == SoapBindingUse.Encoded) 
+			{
+				xtw.WriteAttributeString ("xmlns", "soapenc", null, SoapEncodingNamespace);
+				xtw.WriteAttributeString ("xmlns", "tns", null, msg.Message.Namespace);
+			}
+
+			// Serialize headers
+			
+			bool writtenHeader = false;
+			foreach (object ob in msgbin.Extensions)
+			{
+				SoapHeaderBinding hb = ob as SoapHeaderBinding;
+				if (hb == null) continue;
+				
+				if (!writtenHeader) {
+					xtw.WriteStartElement ("soap", "Header", SoapEnvelopeNamespace);
+					writtenHeader = true;
+				}
+				
+				WriteHeader (xtw, hb);
+			}
+			
+			if (writtenHeader)
+				xtw.WriteEndElement ();
+
+			// Serialize body
+			xtw.WriteStartElement ("soap", "Body", SoapEnvelopeNamespace);
+			
+			currentUse = bodyUse;
+			WriteBody (xtw, oper, msg, sbb, style);
+			
+			xtw.WriteEndElement ();
+			xtw.WriteEndElement ();
+			xtw.Close ();
+			return sw.ToString ();
+		}
+		
+		void WriteHeader (XmlTextWriter xtw, SoapHeaderBinding header)
+		{
+			Message msg = descriptions.GetMessage (header.Message);
+			if (msg == null) throw new InvalidOperationException ("Message " + header.Message + " not found");
+			MessagePart part = msg.Parts [header.Part];
+			if (part == null) throw new InvalidOperationException ("Message part " + header.Part + " not found in message " + header.Message);
+
+			currentUse = header.Use;
+			
+			if (currentUse == SoapBindingUse.Literal)
+				WriteRootElementSample (xtw, part.Element);
+			else
+				WriteTypeSample (xtw, part.Type);
+		}
+		
+		void WriteBody (XmlTextWriter xtw, Operation oper, OperationMessage opm, SoapBodyBinding sbb, SoapBindingStyle style)
+		{
+			Message msg = descriptions.GetMessage (opm.Message);
+			if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+			{
+				MessagePart part = msg.Parts[0];
+				if (part.Element == XmlQualifiedName.Empty)
+					WriteTypeSample (xtw, part.Type);
+				else
+					WriteRootElementSample (xtw, part.Element);
+			}
+			else
+			{
+				string elemName = oper.Name;
+				string ns = "";
+				if (opm is OperationOutput) elemName += "Response";
+				
+				if (style == SoapBindingStyle.Rpc) {
+					xtw.WriteStartElement (elemName, sbb.Namespace);
+					ns = sbb.Namespace;
+				}
+					
+				foreach (MessagePart part in msg.Parts)
+				{
+					if (part.Element == XmlQualifiedName.Empty)
+					{
+						XmlSchemaElement elem = new XmlSchemaElement ();
+						elem.SchemaTypeName = part.Type;
+						elem.Name = part.Name;
+						WriteElementSample (xtw, ns, elem);
+					}
+					else
+						WriteRootElementSample (xtw, part.Element);
+				}
+				
+				if (style == SoapBindingStyle.Rpc)
+					xtw.WriteEndElement ();
+			}
+			WriteQueuedTypeSamples (xtw);
+		}
+		
+		void WriteRootElementSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (qname, typeof(XmlSchemaElement));
+			if (elem == null) throw new InvalidOperationException ("Element not found: " + qname);
+			WriteElementSample (xtw, qname.Namespace, elem);
+		}
+
+		void WriteElementSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			bool sharedAnnType = false;
+			XmlQualifiedName root;
+			
+			if (!elem.RefName.IsEmpty) {
+				XmlSchemaElement refElem = FindRefElement (elem);
+				if (refElem == null) throw new InvalidOperationException ("Global element not found: " + elem.RefName);
+				root = elem.RefName;
+				elem = refElem;
+				sharedAnnType = true;
+			}
+			else
+				root = new XmlQualifiedName (elem.Name, ns);
+			
+			if (!elem.SchemaTypeName.IsEmpty)
+			{
+				XmlSchemaComplexType st = FindComplexTyype (elem.SchemaTypeName);
+				if (st != null) 
+					WriteComplexTypeSample (xtw, st, root);
+				else
+				{
+					xtw.WriteStartElement (root.Name, root.Namespace);
+					if (currentUse == SoapBindingUse.Encoded) 
+						xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, elem.SchemaTypeName));
+					xtw.WriteString (GetLiteral (FindBuiltInType (elem.SchemaTypeName)));
+					xtw.WriteEndElement ();
+				}
+			}
+			else if (elem.SchemaType == null)
+			{
+				xtw.WriteStartElement ("any");
+				xtw.WriteEndElement ();
+			}
+			else
+				WriteComplexTypeSample (xtw, (XmlSchemaComplexType) elem.SchemaType, root);
+		}
+		
+		void WriteTypeSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			if (ctype != null) {
+				WriteComplexTypeSample (xtw, ctype, qname);
+				return;
+			}
+			
+			XmlSchemaSimpleType stype = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (stype != null) {
+				WriteSimpleTypeSample (xtw, stype);
+				return;
+			}
+			
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+			throw new InvalidOperationException ("Type not found: " + qname);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName)
+		{
+			WriteComplexTypeSample (xtw, stype, rootName, -1);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName, int id)
+		{
+			string ns = rootName.Namespace;
+			
+			if (rootName.Name.IndexOf ("[]") != -1) rootName = arrayType;
+			
+			if (currentUse == SoapBindingUse.Encoded) {
+				string pref = xtw.LookupPrefix (rootName.Namespace);
+				if (pref == null) pref = "q1";
+				xtw.WriteStartElement (pref, rootName.Name, rootName.Namespace);
+				ns = "";
+			}
+			else
+				xtw.WriteStartElement (rootName.Name, rootName.Namespace);
+			
+			if (id != -1)
+			{
+				xtw.WriteAttributeString ("id", "id" + id);
+				if (rootName != arrayType)
+					xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, rootName));
+			}
+			
+			WriteComplexTypeAttributes (xtw, stype);
+			WriteComplexTypeElements (xtw, ns, stype);
+			
+			xtw.WriteEndElement ();
+		}
+		
+		void WriteComplexTypeAttributes (XmlTextWriter xtw, XmlSchemaComplexType stype)
+		{
+			WriteAttributes (xtw, stype.Attributes, stype.AnyAttribute);
+		}
+
+		Dictionary<XmlSchemaComplexType,int> recursed_types = new Dictionary<XmlSchemaComplexType,int> ();
+		void WriteComplexTypeElements (XmlTextWriter xtw, string ns, XmlSchemaComplexType stype)
+		{
+			int prev = 0;
+			if (recursed_types.ContainsKey (stype))
+				prev = recursed_types [stype];
+
+			if (prev > 1)
+				return;
+			recursed_types [stype] = ++prev;
+
+			if (stype.Particle != null)
+				WriteParticleComplexContent (xtw, ns, stype.Particle);
+			else
+			{
+				if (stype.ContentModel is XmlSchemaSimpleContent)
+					WriteSimpleContent (xtw, (XmlSchemaSimpleContent)stype.ContentModel);
+				else if (stype.ContentModel is XmlSchemaComplexContent)
+					WriteComplexContent (xtw, ns, (XmlSchemaComplexContent)stype.ContentModel);
+			}
+			prev = recursed_types [stype];
+			recursed_types [stype] = --prev;
+		}
+
+		void WriteAttributes (XmlTextWriter xtw, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat)
+		{
+			foreach (XmlSchemaObject at in atts)
+			{
+				if (at is XmlSchemaAttribute)
+				{
+					string ns;
+					XmlSchemaAttribute attr = (XmlSchemaAttribute)at;
+					XmlSchemaAttribute refAttr = attr;
+					
+					// refAttr.Form; TODO
+					
+					if (!attr.RefName.IsEmpty) {
+						refAttr = FindRefAttribute (attr.RefName);
+						if (refAttr == null) throw new InvalidOperationException ("Global attribute not found: " + attr.RefName);
+					}
+					
+					string val;
+					if (!refAttr.SchemaTypeName.IsEmpty) val = FindBuiltInType (refAttr.SchemaTypeName);
+					else val = FindBuiltInType ((XmlSchemaSimpleType) refAttr.SchemaType);
+					
+					xtw.WriteAttributeString (refAttr.Name, val);
+				}
+				else if (at is XmlSchemaAttributeGroupRef)
+				{
+					XmlSchemaAttributeGroupRef gref = (XmlSchemaAttributeGroupRef)at;
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					WriteAttributes (xtw, grp.Attributes, grp.AnyAttribute);
+				}
+			}
+			
+			if (anyat != null)
+				xtw.WriteAttributeString ("custom-attribute","value");
+		}
+		
+		void WriteParticleComplexContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle)
+		{
+			WriteParticleContent (xtw, ns, particle, false);
+		}
+		
+		void WriteParticleContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle, bool multiValue)
+		{
+			if (particle is XmlSchemaGroupRef)
+				particle = GetRefGroupParticle ((XmlSchemaGroupRef)particle);
+
+			if (particle.MaxOccurs > 1) multiValue = true;
+			
+			if (particle is XmlSchemaSequence) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaSequence)particle).Items, multiValue);
+			}
+			else if (particle is XmlSchemaChoice) {
+				if (((XmlSchemaChoice)particle).Items.Count == 1)
+					WriteSequenceContent (xtw, ns, ((XmlSchemaChoice)particle).Items, multiValue);
+				else
+					WriteChoiceContent (xtw, ns, (XmlSchemaChoice)particle, multiValue);
+			}
+			else if (particle is XmlSchemaAll) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaAll)particle).Items, multiValue);
+			}
+		}
+
+		void WriteSequenceContent (XmlTextWriter xtw, string ns, XmlSchemaObjectCollection items, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+		
+		void WriteContentItem (XmlTextWriter xtw, string ns, XmlSchemaObject item, bool multiValue)
+		{
+			if (item is XmlSchemaGroupRef)
+				item = GetRefGroupParticle ((XmlSchemaGroupRef)item);
+					
+			if (item is XmlSchemaElement)
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) item;
+				XmlSchemaElement refElem;
+				if (!elem.RefName.IsEmpty) refElem = FindRefElement (elem);
+				else refElem = elem;
+
+				int num = (elem.MaxOccurs == 1 && !multiValue) ? 1 : 2;
+				for (int n=0; n<num; n++)
+				{
+					if (currentUse == SoapBindingUse.Literal)
+						WriteElementSample (xtw, ns, refElem);
+					else
+						WriteRefTypeSample (xtw, ns, refElem);
+				}
+			}
+			else if (item is XmlSchemaAny)
+			{
+				xtw.WriteString (GetLiteral ("xml"));
+			}
+			else if (item is XmlSchemaParticle) {
+				WriteParticleContent (xtw, ns, (XmlSchemaParticle)item, multiValue);
+			}
+		}
+		
+		void WriteChoiceContent (XmlTextWriter xtw, string ns, XmlSchemaChoice choice, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in choice.Items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+
+		void WriteSimpleContent (XmlTextWriter xtw, XmlSchemaSimpleContent content)
+		{
+			XmlSchemaSimpleContentExtension ext = content.Content as XmlSchemaSimpleContentExtension;
+			if (ext != null)
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				
+			XmlQualifiedName qname = GetContentBaseType (content.Content);
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+		}
+
+		string FindBuiltInType (XmlQualifiedName qname)
+		{
+			if (qname.Namespace == XmlSchema.Namespace)
+				return qname.Name;
+
+			XmlSchemaComplexType ct = FindComplexTyype (qname);
+			if (ct != null)
+			{
+				XmlSchemaSimpleContent sc = ct.ContentModel as XmlSchemaSimpleContent;
+				if (sc == null) throw new InvalidOperationException ("Invalid schema");
+				return FindBuiltInType (GetContentBaseType (sc.Content));
+			}
+			
+			XmlSchemaSimpleType st = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (st != null)
+				return FindBuiltInType (st);
+
+			throw new InvalidOperationException ("Definition of type " + qname + " not found");
+		}
+
+		string FindBuiltInType (XmlSchemaSimpleType st)
+		{
+			if (st.Content is XmlSchemaSimpleTypeRestriction) {
+				return FindBuiltInType (GetContentBaseType (st.Content));
+			}
+			else if (st.Content is XmlSchemaSimpleTypeList) {
+				string s = FindBuiltInType (GetContentBaseType (st.Content));
+				return s + " " + s + " ...";
+			}
+			else if (st.Content is XmlSchemaSimpleTypeUnion)
+			{
+				//Check if all types of the union are equal. If not, then will use anyType.
+				XmlSchemaSimpleTypeUnion uni = (XmlSchemaSimpleTypeUnion) st.Content;
+				string utype = null;
+
+				// Anonymous types are unique
+				if (uni.BaseTypes.Count != 0 && uni.MemberTypes.Length != 0)
+					return "string";
+
+				foreach (XmlQualifiedName mt in uni.MemberTypes)
+				{
+					string qn = FindBuiltInType (mt);
+					if (utype != null && qn != utype) return "string";
+					else utype = qn;
+				}
+				return utype;
+			}
+			else
+				return "string";
+		}
+		
+
+		XmlQualifiedName GetContentBaseType (XmlSchemaObject ob)
+		{
+			if (ob is XmlSchemaSimpleContentExtension)
+				return ((XmlSchemaSimpleContentExtension)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleContentRestriction)
+				return ((XmlSchemaSimpleContentRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeRestriction)
+				return ((XmlSchemaSimpleTypeRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeList)
+				return ((XmlSchemaSimpleTypeList)ob).ItemTypeName;
+			else
+				return null;
+		}
+
+		void WriteComplexContent (XmlTextWriter xtw, string ns, XmlSchemaComplexContent content)
+		{
+			XmlQualifiedName qname;
+
+			XmlSchemaComplexContentExtension ext = content.Content as XmlSchemaComplexContentExtension;
+			if (ext != null) qname = ext.BaseTypeName;
+			else {
+				XmlSchemaComplexContentRestriction rest = (XmlSchemaComplexContentRestriction)content.Content;
+				qname = rest.BaseTypeName;
+				if (qname == arrayType) {
+					ParseArrayType (rest, out qname);
+					XmlSchemaElement elem = new XmlSchemaElement ();
+					elem.Name = "Item";
+					elem.SchemaTypeName = qname;
+					
+					xtw.WriteAttributeString ("arrayType", SoapEncodingNamespace, qname.Name + "[2]");
+					WriteContentItem (xtw, ns, elem, true);
+					return;
+				}
+			}
+			
+			// Add base map members to this map
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			WriteComplexTypeAttributes (xtw, ctype);
+			
+			if (ext != null) {
+				// Add the members of this map
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				if (ext.Particle != null)
+					WriteParticleComplexContent (xtw, ns, ext.Particle);
+			}
+			
+			WriteComplexTypeElements (xtw, ns, ctype);
+		}
+		
+		void ParseArrayType (XmlSchemaComplexContentRestriction rest, out XmlQualifiedName qtype)
+		{
+			XmlSchemaAttribute arrayTypeAt = FindArrayAttribute (rest.Attributes);
+			XmlAttribute[] uatts = arrayTypeAt.UnhandledAttributes;
+			if (uatts == null || uatts.Length == 0) throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			XmlAttribute xat = null;
+			foreach (XmlAttribute at in uatts)
+				if (at.LocalName == "arrayType" && at.NamespaceURI == WsdlNamespace)
+					{ xat = at; break; }
+			
+			if (xat == null) 
+				throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			string arrayType = xat.Value;
+			string type, ns;
+			int i = arrayType.LastIndexOf (":");
+			if (i == -1) ns = "";
+			else ns = arrayType.Substring (0,i);
+			
+			int j = arrayType.IndexOf ("[", i+1);
+			if (j == -1) throw new InvalidOperationException ("Cannot parse WSDL array type: " + arrayType);
+			type = arrayType.Substring (i+1);
+			type = type.Substring (0, type.Length-2);
+			
+			qtype = new XmlQualifiedName (type, ns);
+		}
+		
+		XmlSchemaAttribute FindArrayAttribute (XmlSchemaObjectCollection atts)
+		{
+			foreach (object ob in atts)
+			{
+				XmlSchemaAttribute att = ob as XmlSchemaAttribute;
+				if (att != null && att.RefName == arrayTypeRefName) return att;
+				
+				XmlSchemaAttributeGroupRef gref = ob as XmlSchemaAttributeGroupRef;
+				if (gref != null)
+				{
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					att = FindArrayAttribute (grp.Attributes);
+					if (att != null) return att;
+				}
+			}
+			return null;
+		}
+		
+		void WriteSimpleTypeSample (XmlTextWriter xtw, XmlSchemaSimpleType stype)
+		{
+			xtw.WriteString (GetLiteral (FindBuiltInType (stype)));
+		}
+		
+		XmlSchemaParticle GetRefGroupParticle (XmlSchemaGroupRef refGroup)
+		{
+			XmlSchemaGroup grp = (XmlSchemaGroup) schemas.Find (refGroup.RefName, typeof (XmlSchemaGroup));
+			return grp.Particle;
+		}
+
+		XmlSchemaElement FindRefElement (XmlSchemaElement elem)
+		{
+			if (elem.RefName.Namespace == XmlSchema.Namespace)
+			{
+				if (anyElement != null) return anyElement;
+				anyElement = new XmlSchemaElement ();
+				anyElement.Name = "any";
+				anyElement.SchemaTypeName = anyType;
+				return anyElement;
+			}
+			return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+		}
+		
+		XmlSchemaAttribute FindRefAttribute (XmlQualifiedName refName)
+		{
+			if (refName.Namespace == XmlSchema.Namespace)
+			{
+				XmlSchemaAttribute at = new XmlSchemaAttribute ();
+				at.Name = refName.Name;
+				at.SchemaTypeName = new XmlQualifiedName ("string",XmlSchema.Namespace);
+				return at;
+			}
+			return (XmlSchemaAttribute) schemas.Find (refName, typeof(XmlSchemaAttribute));
+		}
+		
+		void WriteRefTypeSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			if (elem.SchemaTypeName.Namespace == XmlSchema.Namespace || schemas.Find (elem.SchemaTypeName, typeof(XmlSchemaSimpleType)) != null)
+				WriteElementSample (xtw, ns, elem);
+			else
+			{
+				xtw.WriteStartElement (elem.Name, ns);
+				xtw.WriteAttributeString ("href", "#id" + (queue.Count+1));
+				xtw.WriteEndElement ();
+				queue.Add (new EncodedType (ns, elem));
+			}
+		}
+		
+		void WriteQueuedTypeSamples (XmlTextWriter xtw)
+		{
+			for (int n=0; n<queue.Count; n++)
+			{
+				EncodedType ec = (EncodedType) queue[n];
+				XmlSchemaComplexType st = FindComplexTyype (ec.Element.SchemaTypeName);
+				WriteComplexTypeSample (xtw, st, ec.Element.SchemaTypeName, n+1);
+			}
+		}
+		
+		XmlSchemaComplexType FindComplexTyype (XmlQualifiedName qname)
+		{
+			if (qname.Name.IndexOf ("[]") != -1)
+			{
+				XmlSchemaComplexType stype = new XmlSchemaComplexType ();
+				stype.ContentModel = new XmlSchemaComplexContent ();
+				
+				XmlSchemaComplexContentRestriction res = new XmlSchemaComplexContentRestriction ();
+				stype.ContentModel.Content = res;
+				res.BaseTypeName = arrayType;
+				
+				XmlSchemaAttribute att = new XmlSchemaAttribute ();
+				att.RefName = arrayTypeRefName;
+				res.Attributes.Add (att);
+				
+				XmlAttribute xat = document.CreateAttribute ("arrayType", WsdlNamespace);
+				xat.Value = qname.Namespace + ":" + qname.Name;
+				att.UnhandledAttributes = new XmlAttribute[] {xat};
+				return stype;
+			}
+				
+			return (XmlSchemaComplexType) schemas.Find (qname, typeof(XmlSchemaComplexType));
+		}
+		
+		string GetQualifiedNameString (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			string pref = xtw.LookupPrefix (qname.Namespace);
+			if (pref != null) return pref + ":" + qname.Name;
+			
+			xtw.WriteAttributeString ("xmlns", "q1", null, qname.Namespace);
+			return "q1:" + qname.Name;
+		}
+				
+		protected virtual string GetLiteral (string s)
+		{
+			return s;
+		}
+
+		void GetOperationFormat (OperationBinding obin, out SoapBindingStyle style, out SoapBindingUse use)
+		{
+			style = SoapBindingStyle.Document;
+			use = SoapBindingUse.Literal;
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			if (sob != null) {
+				style = sob.Style;
+				SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+				if (sbb != null)
+					use = sbb.Use;
+			}
+		}
+	}
+
+
+
+
+
+</script>
+
+<head runat="server">
+	<%
+	Response.Write ("<link rel=\"alternate\" type=\"text/xml\" href=\"" + Request.FilePath + "?disco\"/>");
+	%>
+	<title><%=WebServiceName%> Web Service</title>
+    <style type="text/css">
+		BODY { font-family: Arial; margin-left: 20px; margin-top: 20px; font-size: x-small}
+		TABLE { font-size: x-small }
+		.title { color:dimgray; font-family: Arial; font-size:20pt; font-weight:900}
+		.operationTitle { color:dimgray; font-family: Arial; font-size:15pt; font-weight:900}
+		.method { font-size: x-small }
+		.bindingLabel { font-size: x-small; font-weight:bold; color:darkgray; line-height:8pt; display:block; margin-bottom:3px }
+		.label { font-size: small; font-weight:bold; color:darkgray }
+		.paramTable { font-size: x-small }
+		.paramTable TR { background-color: gainsboro }
+		.paramFormTable { font-size: x-small; padding: 10px; background-color: gainsboro }
+		.paramFormTable TR { background-color: gainsboro }
+		.paramInput { border: solid 1px gray }
+		.button {border: solid 1px gray }
+		.smallSeparator { height:3px; overflow:hidden }
+		.panel { background-color:whitesmoke; border: solid 1px silver; border-top: solid 1px silver  }
+		.codePanel { background-color: white; font-size:x-small; padding:7px; border:solid 1px silver}
+		.code-xml { font-size:10pt; font-family:courier }
+		.code-cs { font-size:10pt; font-family:courier }
+		.code-vb { font-size:10pt; font-family:courier }
+		.tabLabelOn { font-weight:bold }
+		.tabLabelOff {color: darkgray }
+		.literal-placeholder {color: darkblue; font-weight:bold}
+		A:link { color: black; }
+		A:visited { color: black; }
+		A:active { color: black; }
+		A:hover { color: blue }
+    </style>
+	
+<script language="javascript" type="text/javascript">
+var req;
+function getXML (command, url, qs) {
+	if (url == "" || url.substring (0, 4) != "http")
+		return;
+	
+	var post_data = null;
+	req = getReq ();
+	req.onreadystatechange = stateChange;
+	if (command == "GET") {
+		url = url + "?" + qs;
+	} else {
+		post_data = qs;
+	}
+	req.open (command, url,  true); 
+	if (command == "POST")
+		req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
+	req.send (post_data); 
+}
+
+function stateChange () {
+	if (req.readyState == 4) {
+		var node = document.getElementById("testresult_div");
+		var text = "";
+		if (req.status == 200) {
+			node.innerHTML = "<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+		} else {
+			var ht = "<b style='color: red'>" + formatXml (req.status + " - " + req.statusText) + "</b>";
+			if (req.responseText != "")
+				ht = ht + "\n<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+			node.innerHTML = ht;
+					
+		}
+	}
+}
+
+function formatXml (text)
+{	
+	var re = / /g;
+	text = text.replace (re, "&nbsp;");
+
+	re = /\t/g;
+	text = text.replace (re, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	
+	re = /\<\s*(\/?)\s*(.*?)\s*(\/?)\s*\>/g;
+	text = text.replace (re,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = /{(\w*):(.*?)}/g;
+	text = text.replace (re,"<span style='color:$1'>$2</span>");
+
+	re = /"(.*?)"/g;
+	text = text.replace (re,"\"<span style='color:purple'>$1</span>\"");
+
+	re = /\r\n|\r|\n/g;
+	text = text.replace (re, "<br/>");
+	
+	return text;
+}
+
+function getReq () {
+	if (window.XMLHttpRequest) {
+		return new XMLHttpRequest();     // Firefox, Safari, ...
+	} else if (window.ActiveXObject) {
+		return new ActiveXObject("Microsoft.XMLHTTP");
+	}
+}
+
+function clearForm ()
+{
+	document.getElementById("testFormResult").style.display="none";
+}
+</script>
+
+</head>
+
+<body>
+<div class="title" style="margin-left:20px">
+<span class="label">Web Service</span><br>
+<%=WebServiceName%>
+</div>
+
+<!--
+	**********************************************************
+	Left panel
+-->
+
+<table border="0" width="100%" cellpadding="15px" cellspacing="15px">
+<tr valign="top"><td width="150px" class="panel">
+<div style="width:150px"></div>
+<a class="method" href='<%=PageName%>'>Overview</a><br>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("wsdl")%>'>Service Description</a>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("proxy")%>'>Client proxy</a>
+<br><br>
+	<asp:repeater id="BindingsRepeater" runat=server>
+		<itemtemplate name="itemtemplate">
+			<span class="bindingLabel"><%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%></span>
+			<asp:repeater id="OperationsRepeater" runat=server datasource='<%# ((Binding)Container.DataItem).Operations %>'>
+				<itemtemplate>
+					<a class="method" href="<%=PageName%>?<%=GetTabContext("op",null)%>op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%></a>
+					<div class="smallSeparator"></div>
+				</itemtemplate>
+			</asp:repeater>
+			<br>
+		</itemtemplate>
+	</asp:repeater>
+
+</td><td class="panel">
+
+<% if (CurrentPage == "main") {%>
+
+<!--
+	**********************************************************
+	Web service overview
+-->
+
+	<p class="label">Web Service Overview</p>
+	<%=WebServiceDescription%>
+	<br/><br/>
+	<% if (ProfileViolations != null && ProfileViolations.Count > 0) { %>
+		<p class="label">Basic Profile Conformance</p>
+		This web service does not conform to WS-I Basic Profile v1.1
+	<%
+		Response.Write ("<ul>");
+		foreach (BasicProfileViolation vio in ProfileViolations) {
+			Response.Write ("<li><b>" + vio.NormativeStatement + "</b>: " + vio.Details);
+			Response.Write ("<ul>");
+			foreach (string ele in vio.Elements)
+				Response.Write ("<li>" + ele + "</li>");
+			Response.Write ("</ul>");
+			Response.Write ("</li>");
+		}
+		Response.Write ("</ul>");
+	}%>
+
+<%} if (DefaultBinding == null) {%>
+This service does not contain any public web method.
+<%} else if (CurrentPage == "op") {%>
+
+<!--
+	**********************************************************
+	Operation description
+-->
+
+	<span class="operationTitle"><%=CurrentOperationName%></span>
+	<br><br>
+	<% WriteTabs (); %>
+	<br><br><br>
+	
+	<% if (CurrentTab == "main") { %>
+		<span class="label">Input Parameters</span>
+		<div class="smallSeparator"></div>
+		<% if (InParams.Count == 0) { %>
+			No input parameters<br>
+		<% } else { %>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="InputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<% } %>
+		<br>
+		
+		<% if (OutParams.Count > 0) { %>
+		<span class="label">Output Parameters</span>
+			<div class="smallSeparator"></div>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="OutputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<br>
+		<% } %>
+		
+		<span class="label">Remarks</span>
+		<div class="smallSeparator"></div>
+		<%=OperationDocumentation%>
+		<br><br>
+		<span class="label">Technical information</span>
+		<div class="smallSeparator"></div>
+		Format: <%=CurrentOperationFormat%>
+		<br>Supported protocols: <%=CurrentOperationProtocols%>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Test form
+-->
+
+	<% if (CurrentTab == "test") { 
+		if (CurrentOperationSupportsTest) {%>
+			Enter values for the parameters and click the 'Invoke' button to test this method:<br><br>
+			<form action="<%=PageName%>" method="GET">
+			<input type="hidden" name="page" value="<%=CurrentPage%>">
+			<input type="hidden" name="tab" value="<%=CurrentTab%>">
+			<input type="hidden" name="op" value="<%=CurrentOperationName%>">
+			<input type="hidden" name="bnd" value="<%=CurrentOperationBinding%>">
+			<input type="hidden" name="ext" value="testform">
+			<table class="paramFormTable" cellspacing="0" cellpadding="3">
+			<asp:repeater id="InputFormParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td><%#DataBinder.Eval(Container.DataItem, "Name")%>:&nbsp;</td>
+					<td width="150"><input class="paramInput" type="text" size="20" name="<%#DataBinder.Eval(Container.DataItem, "Name")%>"></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			<tr><td></td><td><input class="button" type="submit" value="Invoke">&nbsp;<input class="button" type="button" onclick="clearForm()" value="Clear"></td></tr>
+			</table>
+			</form>
+			<div id="testFormResult" style="display:<%= (HasFormResult?"block":"none") %>">
+			The web service returned the following result:<br/><br/>
+			<div class="codePanel" id="testresult_div">
+			</div>
+			<script language="javascript">
+				getXML ("<%= GetOrPost () %>", "<%= GetTestResultUrl () %>", "<%= GetQS () %>");
+			</script>
+			</div>
+		<% } else {%>
+		The test form is not available for this operation because it has parameters with a complex structure.
+		<% } %>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Message Layout
+-->
+
+	<% if (CurrentTab == "msg") { %>
+		
+		The following are sample SOAP requests and responses for each protocol supported by this method:
+			<br/><br/>
+		
+		<% if (IsOperationSupported ("Soap")) { %>
+			<span class="label">Soap</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpGet")) { %>
+			<span class="label">HTTP Get</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpPost")) { %>
+			<span class="label">HTTP Post</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", false)%></div></div>
+			<br/>
+		<% } %>
+		
+	<% } %>
+<%} else if (CurrentPage == "proxy") {%>
+<!--
+	**********************************************************
+	Client Proxy
+-->
+	<form action="<%=PageName%>" name="langForm" method="GET">
+		Select the language for which you want to generate a proxy 
+		<input type="hidden" name="page" value="<%=CurrentPage%>">&nbsp;
+		<SELECT name="lang" onchange="langForm.submit()">
+			<%=GetOptionSel("cs",CurrentLanguage)%>C#</option>
+			<%=GetOptionSel("vb",CurrentLanguage)%>Visual Basic</option>
+		</SELECT>
+		&nbsp;&nbsp;
+	</form>
+	<br>
+	<span class="label"><%=CurrentProxytName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?code=" + CurrentLanguage%>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-<%=CurrentLanguage%>"><%=GetProxyCode ()%></div>
+	</div>
+<%} else if (CurrentPage == "wsdl") {%>
+<!--
+	**********************************************************
+	Service description
+-->
+	<% if (descriptions.Count > 1 || schemas.Count > 1) {%>
+	The description of this web service is composed by several documents. Click on the document you want to see:
+	
+	<ul>
+	<% 
+		for (int n=0; n<descriptions.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=wsdl&docind=" + n + "'>WSDL document " + descriptions[n].TargetNamespace + "</a></li>");
+		for (int n=0; n<schemas.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=schema&docind=" + n + "'>Xml Schema " + schemas[n].TargetNamespace + "</a></li>");
+	%>
+	</ul>
+	
+	<%} else {%>
+	<%}%>
+	<br>
+	<span class="label"><%=CurrentDocumentName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?" + CurrentDocType + "=" + CurrentDocInd %>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-xml"><%=GenerateDocument ()%></div>
+	</div>
+
+<%}%>
+
+<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+</td>
+<td width="20px"></td>
+</tr>
+
+</table>
+</body>
+</html>
diff --git a/Build/MonoBleedingEdge/etc/mono/2.0/machine.config b/Build/MonoBleedingEdge/etc/mono/2.0/machine.config
new file mode 100644
index 0000000000000000000000000000000000000000..9da7be98719105e7a4fa81e6e45a1266c12b6a08
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/2.0/machine.config
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+	<configSections>
+		<section name="configProtectedData" type="System.Configuration.ProtectedConfigurationSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="mscorlib" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="assemblyBinding"  type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="satelliteassemblies" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="startup" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="system.codedom" type="System.CodeDom.Compiler.CodeDomConfigurationHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.diagnostics" type="System.Diagnostics.DiagnosticsConfigurationHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.runtime.remoting" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<section name="system.windows.forms" type="System.Windows.Forms.WindowsFormsSection, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="windows" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="strongNames" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+			<section name="anonymousIdentification" type="System.Web.Configuration.AnonymousIdentificationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authorization" type="System.Web.Configuration.AuthorizationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="browserCaps" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="clientTarget" type="System.Web.Configuration.ClientTargetSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="compilation" type="System.Web.Configuration.CompilationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="deployment" type="System.Web.Configuration.DeploymentSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" />
+			<section name="globalization" type="System.Web.Configuration.GlobalizationSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="healthMonitoring" type="System.Web.Configuration.HealthMonitoringSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="hostingEnvironment" type="System.Web.Configuration.HostingEnvironmentSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="httpCookies" type="System.Web.Configuration.HttpCookiesSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpHandlers" type="System.Web.Configuration.HttpHandlersSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpModules" type="System.Web.Configuration.HttpModulesSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpRuntime" type="System.Web.Configuration.HttpRuntimeSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="identity" type="System.Web.Configuration.IdentitySection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="membership" type="System.Web.Configuration.MembershipSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="mobileControls" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+                        <section name="deviceFilters" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="pages" type="System.Web.Configuration.PagesSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="processModel" type="System.Web.Configuration.ProcessModelSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" allowLocation="false" />
+			<section name="profile" type="System.Web.Configuration.ProfileSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="roleManager" type="System.Web.Configuration.RoleManagerSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="securityPolicy" type="System.Web.Configuration.SecurityPolicySection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="sessionPageState" type="System.Web.Configuration.SessionPageStateSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="sessionState" type="System.Web.Configuration.SessionStateSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="siteMap" type="System.Web.Configuration.SiteMapSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="trace" type="System.Web.Configuration.TraceSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="trust" type="System.Web.Configuration.TrustSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="urlMappings" type="System.Web.Configuration.UrlMappingsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="webControls" type="System.Web.Configuration.WebControlsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webParts" type="System.Web.Configuration.WebPartsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webServices" type="System.Web.Services.Configuration.WebServicesSection, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="xhtmlConformance" type="System.Web.Configuration.XhtmlConformanceSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<sectionGroup name="caching" type="System.Web.Configuration.SystemWebCachingSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+				<section name="cache" type="System.Web.Configuration.CacheSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCache" type="System.Web.Configuration.OutputCacheSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCacheSettings" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="sqlCacheDependency" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			</sectionGroup>
+			<section name="monoSettings" type="System.Web.Configuration.MonoSettingsSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</sectionGroup>
+		<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+				<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</sectionGroup>
+			<section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="settings" type="System.Net.Configuration.SettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</sectionGroup>
+		<section name="system.drawing" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</sectionGroup>
+		<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
+			<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
+			<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
+		</sectionGroup>
+		<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+	</configSections>
+
+	<connectionStrings>
+		<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
+		<add name="LocalSqliteServer" connectionString="Data Source=|DataDirectory|/aspnetdb.sqlite;version=3" providerName="Mono.Data.Sqlite"/>
+	</connectionStrings>
+	
+	<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
+		<providers>
+			<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" keyContainerName="MonoFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+			<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" useMachineProtection="true" keyEntropy="" />
+		</providers>
+	</configProtectedData>
+
+	<system.net>
+		<authenticationModules>
+			<add type="System.Net.BasicClient, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.DigestClient, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.NtlmClient, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</authenticationModules>
+		<webRequestModules>
+			<add prefix="http" type="System.Net.HttpRequestCreator, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="https" type="System.Net.HttpRequestCreator, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="file" type="System.Net.FileWebRequestCreator, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="ftp" type="System.Net.FtpRequestCreator, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</webRequestModules>
+		<settings>
+			<ipv6 enabled="true"/>
+		</settings>
+	</system.net>
+	
+	<system.runtime.remoting>
+		<application>
+			<channels>
+				<channel ref="http client" displayName="http client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="tcp client" displayName="tcp client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="ipc client" displayName="ipc client (delay loaded)" delayLoadAsClientChannel="true" />
+			</channels>
+		</application>
+		<channels>
+			<channel id="http" type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http client" type="System.Runtime.Remoting.Channels.Http.HttpClientChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http server" type="System.Runtime.Remoting.Channels.Http.HttpServerChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp" type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp client" type="System.Runtime.Remoting.Channels.Tcp.TcpClientChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp server" type="System.Runtime.Remoting.Channels.Tcp.TcpServerChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc" type="System.Runtime.Remoting.Channels.Ipc.IpcChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc client" type="System.Runtime.Remoting.Channels.Ipc.IpcClientChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc server" type="System.Runtime.Remoting.Channels.Ipc.IpcServerChannel, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</channels>
+			<channelSinkProviders>
+				<clientProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</clientProviders>
+				<serverProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<provider id="wsdl" type="System.Runtime.Remoting.MetadataServices.SdlChannelSinkProvider, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</serverProviders>
+			</channelSinkProviders>
+	</system.runtime.remoting>
+	
+	<appSettings>
+	<!--<add key="yourkey" value="your value" /> -->
+	<!--<remove key="a key defined higher in the hierarchy" /> -->
+	<!--<clear/> Removes all defined settings -->
+	</appSettings>
+	<system.diagnostics>
+		<trace autoflush="false" indentsize="4" />
+	</system.diagnostics>
+        <system.drawing>
+        </system.drawing>
+
+	<system.data>
+	  <DbProviderFactories>
+	    <add name="Mono Sqlite Data Provider"  invariant="Mono.Data.SqliteClient" 
+		 description="Mono Framework Data Provider for SQLite (old version)" 
+		 type="Mono.Data.SqliteClient.SqliteFactory, Mono.Data.SqliteClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Mono Sqlite Provider"  invariant="Mono.Data.Sqlite" 
+		 description="Mono Framework Data Provider for SQLite (new version)"
+		 type="Mono.Data.Sqlite.SqliteFactory, Mono.Data.Sqlite, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         
+		 description=".Net Framework Data Provider for Odbc"      
+		 type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        
+		 description=".Net Framework Data Provider for OleDb"     
+		 type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" 
+		 description=".Net Framework Data Provider for Oracle"    
+		 type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    
+		 description=".Net Framework Data Provider for SqlServer" 
+		 type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="Sybase Data Provider"    invariant="Mono.Data.SybaseClient"    
+		 description=".Net Framework Data Provider for Sybase" 
+		 type="Mono.Data.SybaseClient.SybaseClientFactory, Mono.Data.SybaseClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	  </DbProviderFactories>
+	</system.data>
+
+	<mscorlib>
+		<cryptographySettings>
+			<cryptoNameMapping>
+				<cryptoClasses>
+					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+				</cryptoClasses>
+				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
+			</cryptoNameMapping>
+			<oidMap>
+				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
+				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
+			</oidMap>
+		</cryptographySettings>
+	</mscorlib>
+
+	<strongNames>
+		<pubTokenMapping>
+			<!-- ECMA key -->
+			<map Token="b77a5c561934e089" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (final) key -->
+			<map Token="b03f5f7f11d50a3a" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (Web Service Enhancement) key -->
+			<map Token="31bf3856ad364e35" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- IBM (DB2 Data Provider) key -->
+			<map Token="7c307b91aa13d208" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Silverlight 2.0 key -->
+			<map Token="7cec85d7bea7798e" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- XNA Framework key -->                                                            
+			<map Token="6d5c3888ef60e27d" PublicKey="0024000004800000940000000602000000240000525341310004000001000100f9a2641bac9847900d92a33d652ccc4e8b529360f908e7af53e57008b2a9a1938c32a160d47f795a23590557608d2c8d0c0e8846a052d070f9298281b8185343dbe5b479bd52de256f73c2a943e1a8a42065b5c918622dc14b1c0151dbd94d9a4543e7cd03e536b1b1d2d6d99af535d227ab9bdac76af9312a21d457bdf817e6" />
+		</pubTokenMapping>
+	</strongNames>
+
+	<system.web>
+		<webServices>
+			<protocols>
+				<add name="HttpSoap"/>
+				<add name="HttpSoap12"/>
+				<add name="HttpPost"/>
+				<add name="HttpGet"/>
+				<add name="Documentation"/>
+			</protocols>
+			<conformanceWarnings>
+				<add name="BasicProfile1_1"/>
+			</conformanceWarnings>
+			<wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
+		</webServices>
+
+		<membership>
+			<providers>
+				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
+				<!-- <add name="AspNetSqlMembershipProvider" type="Mainsoft.Web.Security.GenericMembershipProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</membership>
+
+		<roleManager>
+			<providers>
+				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="LocalSqlServer" />
+				<!-- <add name="AspNetSqlRoleProvider" type="Mainsoft.Web.Security.GenericRoleProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</roleManager>
+
+		<profile>
+        		<providers>
+            		    <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		        </providers>
+    		</profile>
+	</system.web>
+
+	<system.serviceModel>
+		<extensions>
+			<behaviorExtensions>
+				<add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</behaviorExtensions>
+			<bindingElementExtensions>
+				<add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingElementExtensions>
+			<bindingExtensions>
+				<add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingExtensions>
+		</extensions>
+	</system.serviceModel>
+</configuration>
+
+
diff --git a/Build/MonoBleedingEdge/etc/mono/2.0/settings.map b/Build/MonoBleedingEdge/etc/mono/2.0/settings.map
new file mode 100644
index 0000000000000000000000000000000000000000..9a52ccc0295c867dc6fb0cf190b94b70c11037d0
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/2.0/settings.map
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settingsMap>
+  <map sectionType="System.Web.Configuration.MembershipSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.MembershipSectionMapper, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlMembershipProvider" 
+	       type="System.Web.Security.SqliteMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+
+  <map sectionType="System.Web.Configuration.RoleManagerSection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.RoleManagerSectionMapper, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlRoleProvider" 
+	       type="System.Web.Security.SqliteRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+</settingsMap>
diff --git a/Build/MonoBleedingEdge/etc/mono/2.0/web.config b/Build/MonoBleedingEdge/etc/mono/2.0/web.config
new file mode 100644
index 0000000000000000000000000000000000000000..e1428f8c39ba200383ec08d6f8817086011cb92e
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/2.0/web.config
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+	<system.web>
+		<monoSettings>
+			<compilersCompatibility>
+				<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/nowarn:0169"
+					  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</compilersCompatibility>
+		</monoSettings>
+		
+		<authorization>
+			<allow users="*" />
+		</authorization>
+		<httpHandlers>
+			<add verb="*" path="Trace.axd" type="System.Web.Handlers.TraceHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.asmx" validate="false" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="GET" path="WebResource.axd" type="System.Web.Handlers.AssemblyResourceLoader, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.master" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.resources" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.skin" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.browser" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.sitemap" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.webinfo" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.resx" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.asax" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.ascx" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.Config" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.cs" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.vb" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.csproj" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.vbproj" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.licx" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.dll" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*.rem" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false" />
+			<add verb="*" path="*.soap" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false" />
+			<add verb="*" path="*.svc" type="System.ServiceModel.Channels.SvcHttpHandlerFactory, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</httpHandlers>
+		<httpModules>
+			<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add name="OutputCache" type="System.Web.Caching.OutputCacheModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add name="RoleManager" type="System.Web.Security.RoleManagerModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</httpModules>
+		<authentication mode="Forms">
+			<forms name=".MONOAUTH" loginUrl="login.aspx" protection="All" timeout="30" path="/">
+				<credentials passwordFormat="Clear">
+					<!--<user name="gonzalo" password="gonz"/>-->
+				</credentials>
+			</forms>
+		</authentication>
+		<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
+		<globalization  requestEncoding="utf-8"
+				responseEncoding="utf-8"
+				fileEncoding="utf-8"/>
+		<!--
+				culture="en-US"
+				uiculture="en-US" />
+		-->
+		<sessionState mode="InProc" />
+		<pages>
+        		<namespaces>
+            			<add namespace="System" />
+            			<add namespace="System.Collections" />
+            			<add namespace="System.Collections.Specialized" />
+            			<add namespace="System.Configuration" />
+            			<add namespace="System.Text" />
+            			<add namespace="System.Text.RegularExpressions" />
+            			<add namespace="System.Web" />
+            			<add namespace="System.Web.Caching" />
+            			<add namespace="System.Web.SessionState" />
+            			<add namespace="System.Web.Security" />
+            			<add namespace="System.Web.Profile" />
+            			<add namespace="System.Web.UI" />
+            			<add namespace="System.Web.UI.WebControls" />
+            			<!-- <add namespace="System.Web.UI.WebControls.WebParts" /> -->
+            			<add namespace="System.Web.UI.HtmlControls" />
+        		</namespaces>
+    		</pages>
+		<webControls clientScriptsLocation="/web_scripts" />
+		<compilation debug="false" defaultLanguage="c#" explicit="true" strict="false" >
+			<assemblies>
+				<!--<add assembly="mscorlib" /> -->
+				<add assembly="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+            			<add assembly="System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+            			<add assembly="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+            			<add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+            			<add assembly="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+            			<add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
+				<add assembly="System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
+				<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+				<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+            			<add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="*" /> <!-- Add assemblies in bin directory -->
+			</assemblies>
+			<expressionBuilders>
+				<add expressionPrefix="Resources"
+				     type="System.Web.Compilation.ResourceExpressionBuilder, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="ConnectionStrings"
+				     type="System.Web.Compilation.ConnectionStringsExpressionBuilder, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="AppSettings"
+				     type="System.Web.Compilation.AppSettingsExpressionBuilder, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			</expressionBuilders>
+			<buildProviders>
+				<add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
+				<add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
+				<add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
+				<add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
+				<add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
+				<add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
+				<add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
+				<add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider" />
+				<add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
+				<add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+			</buildProviders>
+		</compilation>
+		<httpRuntime executionTimeout="110"
+			     maxRequestLength="4096"
+			     useFullyQualifiedRedirectUrl="false"
+			     minFreeThreads="8"
+			     minLocalRequestFreeThreads="4"
+			     appRequestQueueLimit="5000" />
+		<clientTarget>
+			<add alias="ie5" userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)" />
+			<add alias="ie4" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="uplevel" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="downlevel" userAgent="Unknown" />
+		</clientTarget>
+
+		<siteMap>
+			<providers>
+				<add name="AspNetXmlSiteMapProvider"
+				 description="Default site map provider that reads in .sitemap xml files."
+				 type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+				 siteMapFile="Web.sitemap" />
+			</providers>
+		</siteMap>
+	</system.web>
+
+</configuration>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser b/Build/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser
new file mode 100644
index 0000000000000000000000000000000000000000..dcedf7f7333565268eb99488767618235e7d24f1
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser
@@ -0,0 +1,42 @@
+<!--
+    This file defines some of the browsers that Microsoft's implementation provides in
+    <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers\*.browser
+	
+	It is not derived from any file distributed with Microsoft's implementation.  Since
+	we can't distribute MS's browser files, we use browscap.ini to determine 
+	browser capabilities.  Then, if and only if the application contains App_Browser/*.browser
+	files and we are using .NET 2.0 or higher, we supplement the capabilities with the 
+	information in those files and the files in this directory.  The primary goal of this file
+	is provide browser definitions that might be referenced in App_Browser/*.browser files.
+-->
+<browsers>
+  <defaultBrowser id="Default">
+  </defaultBrowser>
+  <browser id="Default">
+    <identification>
+    	<userAgent match="." />
+    </identification>
+  </browser>
+  <browser id="IE6to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[6-9]" />
+      <capability name="browser" match="^(IE|AOL)$" />
+    </identification>
+  </browser>
+  <browser id="Opera8to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[8-9]" />
+      <capability name="browser" match="^Opera$" />
+    </identification>
+  </browser>
+  <browser id="Safari" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Safari$" />
+    </identification>
+  </browser>
+  <browser id="Mozilla" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Mozilla" />
+    </identification>
+  </browser>
+</browsers>
\ No newline at end of file
diff --git a/Build/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Build/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx
new file mode 100644
index 0000000000000000000000000000000000000000..f4d74bff7f5bca96ad3fc764e518b4d710854177
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx
@@ -0,0 +1,1901 @@
+<%--
+//
+// DefaultWsdlHelpGenerator.aspx: 
+//
+// Author:
+//   Lluis Sanchez Gual (lluis@ximian.com)
+//
+// (C) 2003 Ximian, Inc.  http://www.ximian.com
+//
+--%>
+
+<%@ Import Namespace="System.Collections" %>
+<%@ Import Namespace="System.Collections.Generic" %>
+<%@ Import Namespace="System.IO" %>
+<%@ Import Namespace="System.Xml.Serialization" %>
+<%@ Import Namespace="System.Xml" %>
+<%@ Import Namespace="System.Xml.Schema" %>
+<%@ Import Namespace="System.Web.Services" %>
+<%@ Import Namespace="System.Web.Services.Description" %>
+<%@ Import Namespace="System.Web.Services.Configuration" %>
+<%@ Import Namespace="System.Web.Configuration" %>
+<%@ Import Namespace="System" %>
+<%@ Import Namespace="System.Net" %>
+<%@ Import Namespace="System.Globalization" %>
+<%@ Import Namespace="System.Resources" %>
+<%@ Import Namespace="System.Diagnostics" %>
+<%@ Import Namespace="System.CodeDom" %>
+<%@ Import Namespace="System.CodeDom.Compiler" %>
+<%@ Import Namespace="Microsoft.CSharp" %>
+<%@ Import Namespace="Microsoft.VisualBasic" %>
+<%@ Import Namespace="System.Text" %>
+<%@ Import Namespace="System.Text.RegularExpressions" %>
+<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
+<%@ Assembly name="System.Web.Services" %>
+<%@ Page debug="true" %>
+
+<html>
+<script language="C#" runat="server">
+
+ServiceDescriptionCollection descriptions;
+XmlSchemas schemas;
+
+string WebServiceName;
+string WebServiceDescription;
+string PageName;
+
+string DefaultBinding;
+ArrayList ServiceProtocols;
+
+string CurrentOperationName;
+string CurrentOperationBinding;
+string OperationDocumentation;
+string CurrentOperationFormat;
+bool CurrentOperationSupportsTest;
+ArrayList InParams;
+ArrayList OutParams;
+string CurrentOperationProtocols;
+int CodeTextColumns = 95;
+BasicProfileViolationCollection ProfileViolations;
+
+void Page_Load(object sender, EventArgs e)
+{
+	descriptions = (ServiceDescriptionCollection) Context.Items["wsdls"];
+	schemas = (XmlSchemas) Context.Items["schemas"];
+
+	ServiceDescription desc = descriptions [0];
+	if (schemas.Count == 0) schemas = desc.Types.Schemas;
+	
+	Service service = desc.Services[0];
+	WebServiceName = service.Name;
+	if (desc.Bindings.Count == 0)
+		return;
+	
+	DefaultBinding = desc.Bindings[0].Name;
+	WebServiceDescription = service.Documentation;
+	if (WebServiceDescription == "" || WebServiceDescription == null)
+		WebServiceDescription = "Description has not been provided";
+	ServiceProtocols = FindServiceProtocols (null);
+	
+	CurrentOperationName = Request.QueryString["op"];
+	CurrentOperationBinding = Request.QueryString["bnd"];
+	if (CurrentOperationName != null) BuildOperationInfo ();
+
+	PageName = HttpUtility.UrlEncode (Path.GetFileName(Request.Path), Encoding.UTF8);
+
+	ArrayList list = new ArrayList ();
+	foreach (ServiceDescription sd in descriptions) {
+		foreach (Binding bin in sd.Bindings)
+			if (bin.Extensions.Find (typeof(SoapBinding)) != null) list.Add (bin);
+	}
+
+	BindingsRepeater.DataSource = list;
+	Page.DataBind();
+	
+	ProfileViolations = new BasicProfileViolationCollection ();
+	foreach (WsiProfilesElement claims in ((WebServicesSection) WebConfigurationManager.GetSection("system.web/webServices")).ConformanceWarnings)
+		if (claims.Name != WsiProfiles.None)
+			WebServicesInteroperability.CheckConformance (claims.Name, descriptions, ProfileViolations);
+}
+
+void BuildOperationInfo ()
+{
+	InParams = new ArrayList ();
+	OutParams = new ArrayList ();
+	
+	Port port = FindPort (CurrentOperationBinding, null);
+	Binding binding = descriptions.GetBinding (port.Binding);
+	
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	OperationDocumentation = oper.Documentation;
+	if (OperationDocumentation == null || OperationDocumentation == "")
+		OperationDocumentation = "No additional remarks";
+	
+	foreach (OperationMessage opm in oper.Messages)
+	{
+		if (opm is OperationInput)
+			BuildParameters (InParams, opm);
+		else if (opm is OperationOutput)
+			BuildParameters (OutParams, opm);
+	}
+	
+	// Protocols supported by the operation
+	CurrentOperationProtocols = "";
+	WebServiceProtocols testProtocols = 0;
+	ArrayList prots = FindServiceProtocols (CurrentOperationName);
+	for (int n=0; n<prots.Count; n++) {
+		string prot = (string) prots [n];
+		if (n != 0) CurrentOperationProtocols += ", ";
+		CurrentOperationProtocols += prot;
+		if (prot == "HttpGet")
+			testProtocols |= WebServiceProtocols.HttpGet;
+		else if (prot == "HttpPost") {
+			testProtocols |= WebServiceProtocols.HttpPost;
+			if (Context.Request.IsLocal)
+				testProtocols |= WebServiceProtocols.HttpPostLocalhost;
+		}
+	}
+	CurrentOperationSupportsTest = (WebServicesSection.Current.EnabledProtocols & testProtocols) != 0;
+
+	// Operation format
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	if (obin != null)
+		CurrentOperationFormat = GetOperationFormat (obin);
+
+	InputParamsRepeater.DataSource = InParams;
+	InputFormParamsRepeater.DataSource = InParams;
+	OutputParamsRepeater.DataSource = OutParams;
+}
+
+void BuildParameters (ArrayList list, OperationMessage opm)
+{
+	Message msg = descriptions.GetMessage (opm.Message);
+	if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+	{
+		MessagePart part = msg.Parts[0];
+		XmlSchemaComplexType ctype;
+		if (part.Element == XmlQualifiedName.Empty)
+		{
+			ctype = (XmlSchemaComplexType) schemas.Find (part.Type, typeof(XmlSchemaComplexType));
+		}
+		else
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+			ctype = (XmlSchemaComplexType) elem.SchemaType;
+		}
+		XmlSchemaSequence seq = ctype.Particle as XmlSchemaSequence;
+		if (seq == null) return;
+		
+		foreach (XmlSchemaObject ob in seq.Items)
+		{
+			Parameter p = new Parameter();
+			p.Description = "No additional remarks";
+			
+			if (ob is XmlSchemaElement)
+			{
+				XmlSchemaElement selem = GetRefElement ((XmlSchemaElement)ob);
+				p.Name = selem.Name;
+				p.Type = selem.SchemaTypeName.Name;
+			}
+			else
+			{
+				p.Name = "Unknown";
+				p.Type = "Unknown";
+			}
+			list.Add (p);
+		}
+	}
+	else
+	{
+		foreach (MessagePart part in msg.Parts)
+		{
+			Parameter p = new Parameter ();
+			p.Description = "No additional remarks";
+			p.Name = part.Name;
+			if (part.Element == XmlQualifiedName.Empty)
+				p.Type = part.Type.Name;
+			else
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+				p.Type = elem.SchemaTypeName.Name;
+			}
+			list.Add (p);
+		}
+	}
+}
+
+string GetOperationFormat (OperationBinding obin)
+{
+	string format = "";
+	SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+	if (sob != null) {
+		format = sob.Style.ToString ();
+		SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+		if (sbb != null)
+			format += " / " + sbb.Use;
+	}
+	return format;
+}
+
+XmlSchemaElement GetRefElement (XmlSchemaElement elem)
+{
+	if (!elem.RefName.IsEmpty)
+		return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+	else
+		return elem;
+}
+
+ArrayList FindServiceProtocols(string operName)
+{
+	ArrayList table = new ArrayList ();
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		string prot = null;
+		Binding bin = descriptions.GetBinding (port.Binding);
+		if (bin.Extensions.Find (typeof(SoapBinding)) != null)
+			prot = "Soap";
+		else 
+		{
+			HttpBinding hb = (HttpBinding) bin.Extensions.Find (typeof(HttpBinding));
+			if (hb != null && hb.Verb == "POST") prot = "HttpPost";
+			else if (hb != null && hb.Verb == "GET") prot = "HttpGet";
+		}
+		
+		if (prot != null && operName != null)
+		{
+			if (FindOperation (bin, operName) == null)
+				prot = null;
+		}
+
+		if (prot != null && !table.Contains (prot))
+			table.Add (prot);
+	}
+	return table;
+}
+
+Port FindPort (string portName, string protocol)
+{
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		if (portName == null)
+		{
+			Binding binding = descriptions.GetBinding (port.Binding);
+			if (GetProtocol (binding) == protocol) return port;
+		}
+		else if (port.Name == portName)
+			return port;
+	}
+	return null;
+}
+
+string GetProtocol (Binding binding)
+{
+	if (binding.Extensions.Find (typeof(SoapBinding)) != null) return "Soap";
+	HttpBinding hb = (HttpBinding) binding.Extensions.Find (typeof(HttpBinding));
+	if (hb == null) return "";
+	if (hb.Verb == "POST") return "HttpPost";
+	if (hb.Verb == "GET") return "HttpGet";
+	return "";
+}
+
+
+Operation FindOperation (PortType portType, string name)
+{
+	foreach (Operation oper in portType.Operations) {
+		if (oper.Messages.Input.Name != null) {
+			if (oper.Messages.Input.Name == name) return oper;
+		}
+		else
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+OperationBinding FindOperation (Binding binding, string name)
+{
+	foreach (OperationBinding oper in binding.Operations) {
+		if (oper.Input.Name != null) {
+			if (oper.Input.Name == name) return oper;
+		}
+		else 
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+string FormatBindingName (string name)
+{
+	if (name == DefaultBinding) return "Methods";
+	else return "Methods for binding<br>" + name;
+}
+
+string GetOpName (object op)
+{
+	OperationBinding ob = op as OperationBinding;
+	if (ob == null) return "";
+	if (ob.Input.Name != null) return ob.Input.Name;
+	else return ob.Name;
+}
+
+bool HasFormResult
+{
+	get { return Request.QueryString ["ext"] == "testform"; }
+}
+
+class NoCheckCertificatePolicy : ICertificatePolicy {
+	public bool CheckValidationResult (ServicePoint a, X509Certificate b, WebRequest c, int d)
+	{
+		return true;
+	}
+}
+
+string GetOrPost ()
+{
+	return (CurrentOperationProtocols.IndexOf ("HttpGet") >= 0) ? "GET" : "POST";
+}
+
+string GetQS ()
+{
+	bool fill = false;
+	string qs = "";
+	NameValueCollection query_string = Request.QueryString;
+	for (int n = 0; n < query_string.Count; n++) {
+		if (fill) {
+			if (qs != "") qs += "&";
+			qs += query_string.GetKey(n) + "=" + Server.UrlEncode (query_string [n]);
+		}
+		if (query_string.GetKey(n) == "ext") fill = true;
+	}
+
+	return qs;
+}
+
+string GetTestResultUrl ()
+{ 
+	if (!HasFormResult) return "";
+	
+	string location = null;
+	ServiceDescription desc = descriptions [0];
+	Service service = desc.Services[0];
+	foreach (Port port in service.Ports)
+		if (port.Name == CurrentOperationBinding)
+		{
+			SoapAddressBinding sbi = (SoapAddressBinding) port.Extensions.Find (typeof(SoapAddressBinding));
+			if (sbi != null)
+				location = sbi.Location;
+		}
+
+	if (location == null) 
+		return "Could not locate web service";
+	
+	return location + "/" + CurrentOperationName;
+}
+
+string GenerateOperationMessages (string protocol, bool generateInput)
+{
+	if (!IsOperationSupported (protocol)) return "";
+	
+	Port port;
+	if (protocol != "Soap") port = FindPort (null, protocol);
+	else port = FindPort (CurrentOperationBinding, null);
+	
+	Binding binding = descriptions.GetBinding (port.Binding);
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	HtmlSampleGenerator sg = new HtmlSampleGenerator (descriptions, schemas);
+	string txt = sg.GenerateMessage (port, obin, oper, protocol, generateInput);
+	if (protocol == "Soap") txt = WrapText (txt,CodeTextColumns);
+	txt = ColorizeXml (txt);
+	txt = txt.Replace ("@placeholder!","<span class='literal-placeholder'>");
+	txt = txt.Replace ("!placeholder@","</span>");
+	return txt;
+}
+
+bool IsOperationSupported (string protocol)
+{
+	if (CurrentPage != "op" || CurrentTab != "msg") return false;
+	if (protocol == "Soap") return true;
+
+	Port port = FindPort (null, protocol);
+	if (port == null) return false;
+	Binding binding = descriptions.GetBinding (port.Binding);
+	if (binding == null) return false;
+	return FindOperation (binding, CurrentOperationName) != null;
+}
+
+//
+// Proxy code generation
+//
+
+string GetProxyCode ()
+{
+	CodeNamespace codeNamespace = new CodeNamespace();
+	CodeCompileUnit codeUnit = new CodeCompileUnit();
+	
+	codeUnit.Namespaces.Add (codeNamespace);
+
+	ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
+	
+	foreach (ServiceDescription sd in descriptions)
+		importer.AddServiceDescription(sd, null, null);
+
+	foreach (XmlSchema sc in schemas)
+		importer.Schemas.Add (sc);
+
+	importer.Import(codeNamespace, codeUnit);
+
+	string langId = Request.QueryString ["lang"];
+	if (langId == null || langId == "") langId = "cs";
+	CodeDomProvider provider = GetProvider (langId);
+	ICodeGenerator generator = provider.CreateGenerator();
+	CodeGeneratorOptions options = new CodeGeneratorOptions();
+	
+	StringWriter sw = new StringWriter ();
+	generator.GenerateCodeFromCompileUnit(codeUnit, sw, options);
+
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), langId);
+}
+
+public string CurrentLanguage
+{
+	get {
+		string langId = Request.QueryString ["lang"];
+		if (langId == null || langId == "") langId = "cs";
+		return langId;
+	}
+}
+
+public string CurrentProxytName
+{
+	get {
+		string lan = CurrentLanguage == "cs" ? "C#" : "Visual Basic";
+		return lan + " Client Proxy";
+	}
+}
+
+private CodeDomProvider GetProvider(string langId)
+{
+	switch (langId.ToUpper())
+	{
+		case "CS": return new CSharpCodeProvider();
+		case "VB": return new VBCodeProvider();
+		default: return null;
+	}
+}
+
+//
+// Document generation
+//
+class UTF8StringWriter : StringWriter {
+	public override Encoding Encoding {
+		get { return Encoding.UTF8; }
+	}
+}
+
+string GenerateDocument ()
+{
+	UTF8StringWriter sw = new UTF8StringWriter ();
+	
+	if (CurrentDocType == "wsdl")
+		descriptions [CurrentDocInd].Write (sw);
+	else if (CurrentDocType == "schema")
+		schemas [CurrentDocInd].Write (sw);
+		
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), "xml");
+}
+
+public string CurrentDocType
+{
+	get { return Request.QueryString ["doctype"] != null ? Request.QueryString ["doctype"] : "wsdl"; }
+}
+
+public int CurrentDocInd
+{
+	get { return Request.QueryString ["docind"] != null ? int.Parse (Request.QueryString ["docind"]) : 0; }
+}
+
+public string CurrentDocumentName
+{
+	get {
+		if (CurrentDocType == "wsdl")
+			return "WSDL document for namespace \"" + descriptions [CurrentDocInd].TargetNamespace + "\"";
+		else
+			return "Xml Schema for namespace \"" + schemas [CurrentDocInd].TargetNamespace + "\"";
+	}
+}
+
+//
+// Pages and tabs
+//
+
+bool firstTab = true;
+ArrayList disabledTabs = new ArrayList ();
+
+string CurrentTab
+{
+	get { return Request.QueryString["tab"] != null ? Request.QueryString["tab"] : "main" ; }
+}
+
+string CurrentPage
+{
+	get { return Request.QueryString["page"] != null ? Request.QueryString["page"] : "main" ; }
+}
+
+void WriteTabs ()
+{
+	if (CurrentOperationName != null)
+	{
+		WriteTab ("main","Overview");
+		WriteTab ("test","Test Form");
+		WriteTab ("msg","Message Layout");
+	}
+}
+
+void WriteTab (string id, string label)
+{
+	if (!firstTab) Response.Write("&nbsp;|&nbsp;");
+	firstTab = false;
+	
+	string cname = CurrentTab == id ? "tabLabelOn" : "tabLabelOff";
+	Response.Write ("<a href='" + PageName + "?" + GetPageContext(null) + GetDataContext() + "tab=" + id + "' style='text-decoration:none'>");
+	Response.Write ("<span class='" + cname + "'>" + label + "</span>");
+	Response.Write ("</a>");
+}
+
+string GetTabContext (string pag, string tab)
+{
+	if (tab == null) tab = CurrentTab;
+	if (pag == null) pag = CurrentPage;
+	if (pag != CurrentPage) tab = "main";
+	return "page=" + pag + "&tab=" + tab + "&"; 
+}
+
+string GetPageContext (string pag)
+{
+	if (pag == null) pag = CurrentPage;
+	return "page=" + pag + "&"; 
+}
+
+class Tab
+{
+	public string Id;
+	public string Label;
+}
+
+//
+// Syntax coloring
+//
+
+static string keywords_cs =
+	"(\\babstract\\b|\\bevent\\b|\\bnew\\b|\\bstruct\\b|\\bas\\b|\\bexplicit\\b|\\bnull\\b|\\bswitch\\b|\\bbase\\b|\\bextern\\b|" +
+	"\\bobject\\b|\\bthis\\b|\\bbool\\b|\\bfalse\\b|\\boperator\\b|\\bthrow\\b|\\bbreak\\b|\\bfinally\\b|\\bout\\b|\\btrue\\b|" +
+	"\\bbyte\\b|\\bfixed\\b|\\boverride\\b|\\btry\\b|\\bcase\\b|\\bfloat\\b|\\bparams\\b|\\btypeof\\b|\\bcatch\\b|\\bfor\\b|" +
+	"\\bprivate\\b|\\buint\\b|\\bchar\\b|\\bforeach\\b|\\bprotected\\b|\\bulong\\b|\\bchecked\\b|\\bgoto\\b|\\bpublic\\b|" +
+	"\\bunchecked\\b|\\bclass\\b|\\bif\\b|\\breadonly\\b|\\bunsafe\\b|\\bconst\\b|\\bimplicit\\b|\\bref\\b|\\bushort\\b|" +
+	"\\bcontinue\\b|\\bin\\b|\\breturn\\b|\\busing\\b|\\bdecimal\\b|\\bint\\b|\\bsbyte\\b|\\bvirtual\\b|\\bdefault\\b|" +
+	"\\binterface\\b|\\bsealed\\b|\\bvolatile\\b|\\bdelegate\\b|\\binternal\\b|\\bshort\\b|\\bvoid\\b|\\bdo\\b|\\bis\\b|" +
+	"\\bsizeof\\b|\\bwhile\\b|\\bdouble\\b|\\block\\b|\\bstackalloc\\b|\\belse\\b|\\blong\\b|\\bstatic\\b|\\benum\\b|" +
+	"\\bnamespace\\b|\\bstring\\b)";
+
+static string keywords_vb =
+	"(\\bAddHandler\\b|\\bAddressOf\\b|\\bAlias\\b|\\bAnd\\b|\\bAndAlso\\b|\\bAnsi\\b|\\bAs\\b|\\bAssembly\\b|" +
+	"\\bAuto\\b|\\bBoolean\\b|\\bByRef\\b|\\bByte\\b|\\bByVal\\b|\\bCall\\b|\\bCase\\b|\\bCatch\\b|" +
+	"\\bCBool\\b|\\bCByte\\b|\\bCChar\\b|\\bCDate\\b|\\bCDec\\b|\\bCDbl\\b|\\bChar\\b|\\bCInt\\b|" +
+	"\\bClass\\b|\\bCLng\\b|\\bCObj\\b|\\bConst\\b|\\bCShort\\b|\\bCSng\\b|\\bCStr\\b|\\bCType\\b|" +
+	"\\bDate\\b|\\bDecimal\\b|\\bDeclare\\b|\\bDefault\\b|\\bDelegate\\b|\\bDim\\b|\\bDirectCast\\b|\\bDo\\b|" +
+	"\\bDouble\\b|\\bEach\\b|\\bElse\\b|\\bElseIf\\b|\\bEnd\\b|\\bEnum\\b|\\bErase\\b|\\bError\\b|" +
+	"\\bEvent\\b|\\bExit\\b|\\bFalse\\b|\\bFinally\\b|\\bFor\\b|\\bFriend\\b|\\bFunction\\b|\\bGet\\b|" +
+	"\\bGetType\\b|\\bGoSub\\b|\\bGoTo\\b|\\bHandles\\b|\\bIf\\b|\\bImplements\\b|\\bImports\\b|\\bIn\\b|" +
+	"\\bInherits\\b|\\bInteger\\b|\\bInterface\\b|\\bIs\\b|\\bLet\\b|\\bLib\\b|\\bLike\\b|\\bLong\\b|" +
+	"\\bLoop\\b|\\bMe\\b|\\bMod\\b|\\bModule\\b|\\bMustInherit\\b|\\bMustOverride\\b|\\bMyBase\\b|\\bMyClass\\b|" +
+	"\\bNamespace\\b|\\bNew\\b|\\bNext\\b|\\bNot\\b|\\bNothing\\b|\\bNotInheritable\\b|\\bNotOverridable\\b|\\bObject\\b|" +
+	"\\bOn\\b|\\bOption\\b|\\bOptional\\b|\\bOr\\b|\\bOrElse\\b|\\bOverloads\\b|\\bOverridable\\b|\\bOverrides\\b|" +
+	"\\bParamArray\\b|\\bPreserve\\b|\\bPrivate\\b|\\bProperty\\b|\\bProtected\\b|\\bPublic\\b|\\bRaiseEvent\\b|\\bReadOnly\\b|" +
+	"\\bReDim\\b|\\bREM\\b|\\bRemoveHandler\\b|\\bResume\\b|\\bReturn\\b|\\bSelect\\b|\\bSet\\b|\\bShadows\\b|" +
+	"\\bShared\\b|\\bShort\\b|\\bSingle\\b|\\bStatic\\b|\\bStep\\b|\\bStop\\b|\\bString\\b|\\bStructure\\b|" +
+	"\\bSub\\b|\\bSyncLock\\b|\\bThen\\b|\\bThrow\\b|\\bTo\\b|\\bTrue\\b|\\bTry\\b|\\bTypeOf\\b|" +
+	"\\bUnicode\\b|\\bUntil\\b|\\bVariant\\b|\\bWhen\\b|\\bWhile\\b|\\bWith\\b|\\bWithEvents\\b|\\bWriteOnly\\b|\\bXor\\b)";
+
+string Colorize (string text, string lang)
+{
+	if (lang == "xml") return ColorizeXml (text);
+	else if (lang == "cs") return ColorizeCs (text);
+	else if (lang == "vb") return ColorizeVb (text);
+	else return text;
+}
+
+string ColorizeXml (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	Regex re = new Regex ("\r\n|\r|\n");
+	text = re.Replace (text, "_br_");
+	
+	re = new Regex ("<\\s*(\\/?)\\s*([\\s\\S]*?)\\s*(\\/?)\\s*>");
+	text = re.Replace (text,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = new Regex ("\\{(\\w*):([\\s\\S]*?)\\}");
+	text = re.Replace (text,"<span style='color:$1'>$2</span>");
+
+	re = new Regex ("\"(.*?)\"");
+	text = re.Replace (text,"\"<span style='color:purple'>$1</span>\"");
+
+	
+	text = text.Replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("_br_", "<br>");
+	return text;
+}
+
+string ColorizeCs (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+
+	text = text.Replace ("<", "&lt;");
+	text = text.Replace (">", "&gt;");
+
+	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("//(((.(?!\"</span>))|\"(((?!\").)*)\"</span>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_cs);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	
+	return text;
+}
+
+string ColorizeVb (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	
+/*	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("'(((.(?!\"\\<\\/span\\>))|\"(((?!\").)*)\"\\<\\/span\\>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_vb);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+*/	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	return text;
+}
+
+//
+// Helper methods and classes
+//
+
+string GetDataContext ()
+{
+	return "op=" + CurrentOperationName + "&bnd=" + CurrentOperationBinding + "&";
+}
+
+string GetOptionSel (string v1, string v2)
+{
+	string op = "<option ";
+	if (v1 == v2) op += "selected ";
+	return op + "value='" + v1 + "'>";
+}
+
+string WrapText (string text, int maxChars)
+{
+	text =  text.Replace(" />","/>");
+	
+	string linspace = null;
+	int lincount = 0;
+	int breakpos = 0;
+	int linstart = 0;
+	bool inquotes = false;
+	char lastc = ' ';
+	string sublineIndent = "";
+	System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+	for (int n=0; n<text.Length; n++)
+	{
+		char c = text [n];
+		
+		if (c=='\r' || c=='\n' || n==text.Length-1)
+		{
+			sb.Append (linspace + sublineIndent + text.Substring (linstart, n-linstart+1));
+			linspace = null;
+			lincount = 0;
+			linstart = n+1;
+			breakpos = linstart;
+			sublineIndent = "";
+			lastc = c;
+			continue;
+		}
+		
+		if (lastc==',' || lastc=='(')
+		{
+			if (!inquotes) breakpos = n;
+		}
+		
+		if (lincount > maxChars && breakpos >= linstart)
+		{
+			if (linspace != null)
+				sb.Append (linspace + sublineIndent);
+			sb.Append (text.Substring (linstart, breakpos-linstart));
+			sb.Append ("\n");
+			sublineIndent = "     ";
+			lincount = linspace.Length + sublineIndent.Length + (n-breakpos);
+			linstart = breakpos;
+		}
+		
+		if (c==' ' || c=='\t')
+		{
+			if (!inquotes)
+				breakpos = n;
+		}
+		else if (c=='"')
+		{
+			inquotes = !inquotes;
+		}
+		else 
+			if (linspace == null) {
+				linspace = text.Substring (linstart, n-linstart);
+				linstart = n;
+			}
+
+		lincount++;
+		lastc = c;
+	}
+	return sb.ToString ();
+}
+
+class Parameter
+{
+	string name;
+	string type;
+	string description;
+
+	public string Name { get { return name; } set { name = value; } }
+	public string Type { get { return type; } set { type = value; } }
+	public string Description { get { return description; } set { description = value; } }
+}
+
+public class HtmlSampleGenerator: SampleGenerator
+{
+	public HtmlSampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+	: base (services, schemas)
+	{
+	}
+		
+	protected override string GetLiteral (string s)
+	{
+		return "@placeholder!" + s + "!placeholder@";
+	}
+}
+
+
+	public class SampleGenerator
+	{
+		protected ServiceDescriptionCollection descriptions;
+		protected XmlSchemas schemas;
+		XmlSchemaElement anyElement;
+		ArrayList queue;
+		SoapBindingUse currentUse;
+		XmlDocument document = new XmlDocument ();
+		
+		static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);
+		static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array","http://schemas.xmlsoap.org/soap/encoding/");
+		static readonly XmlQualifiedName arrayTypeRefName = new XmlQualifiedName ("arrayType","http://schemas.xmlsoap.org/soap/encoding/");
+		const string SoapEnvelopeNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
+		const string WsdlNamespace = "http://schemas.xmlsoap.org/wsdl/";
+		const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
+		
+		class EncodedType
+		{
+			public EncodedType (string ns, XmlSchemaElement elem) { Namespace = ns; Element = elem; }
+			public string Namespace;
+			public XmlSchemaElement Element;
+		}
+
+		public SampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+		{
+			descriptions = services;
+			this.schemas = schemas;
+			queue = new ArrayList ();
+		}
+		
+		public string GenerateMessage (Port port, OperationBinding obin, Operation oper, string protocol, bool generateInput)
+		{
+			OperationMessage msg = null;
+			foreach (OperationMessage opm in oper.Messages)
+			{
+				if (opm is OperationInput && generateInput) msg = opm;
+				else if (opm is OperationOutput && !generateInput) msg = opm;
+			}
+			if (msg == null) return null;
+			
+			switch (protocol) {
+				case "Soap": return GenerateHttpSoapMessage (port, obin, oper, msg);
+				case "HttpGet": return GenerateHttpGetMessage (port, obin, oper, msg);
+				case "HttpPost": return GenerateHttpPostMessage (port, obin, oper, msg);
+			}
+			return "Unknown protocol";
+		}
+		
+		public string GenerateHttpSoapMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				SoapAddressBinding sab = port.Extensions.Find (typeof(SoapAddressBinding)) as SoapAddressBinding;
+				SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+				req += "POST " + new Uri (sab.Location).AbsolutePath + "\n";
+				req += "SOAPAction: " + sob.SoapAction + "\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			}
+			
+			req += GenerateSoapMessage (obin, oper, msg);
+			return req;
+		}
+		
+		public string GenerateHttpGetMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location + "?" + BuildQueryString (msg);
+				req += "GET " + location + "\n";
+				req += "Host: " + GetLiteral ("string");
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			
+				MimeXmlBinding mxb = (MimeXmlBinding) obin.Output.Extensions.Find (typeof(MimeXmlBinding)) as MimeXmlBinding;
+				if (mxb == null) return req;
+				
+				Message message = descriptions.GetMessage (msg.Message);
+				XmlQualifiedName ename = null;
+				foreach (MessagePart part in message.Parts)
+					if (part.Name == mxb.Part) ename = part.Element;
+					
+				if (ename == null) return req + GetLiteral("string");
+				
+				StringWriter sw = new StringWriter ();
+				XmlTextWriter xtw = new XmlTextWriter (sw);
+				xtw.Formatting = Formatting.Indented;
+				currentUse = SoapBindingUse.Literal;
+				WriteRootElementSample (xtw, ename);
+				xtw.Close ();
+				req += sw.ToString ();
+			}
+			
+			return req;
+		}
+		
+		public string GenerateHttpPostMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location;
+				req += "POST " + location + "\n";
+				req += "Content-Type: application/x-www-form-urlencoded\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+				req += BuildQueryString (msg);
+			}
+			else return GenerateHttpGetMessage (port, obin, oper, msg);
+			
+			return req;
+		}
+		
+		string BuildQueryString (OperationMessage opm)
+		{
+			string s = "";
+			Message msg = descriptions.GetMessage (opm.Message);
+			foreach (MessagePart part in msg.Parts)
+			{
+				if (s.Length != 0) s += "&";
+				s += part.Name + "=" + GetLiteral (part.Type.Name);
+			}
+			return s;
+		}
+		
+		public string GenerateSoapMessage (OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			SoapBindingStyle style = (sob != null) ? sob.Style : SoapBindingStyle.Document;
+			
+			MessageBinding msgbin = (msg is OperationInput) ? (MessageBinding) obin.Input : (MessageBinding)obin.Output;
+			SoapBodyBinding sbb = msgbin.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+			SoapBindingUse bodyUse = (sbb != null) ? sbb.Use : SoapBindingUse.Literal;
+			
+			StringWriter sw = new StringWriter ();
+			XmlTextWriter xtw = new XmlTextWriter (sw);
+			xtw.Formatting = Formatting.Indented;
+			
+			xtw.WriteStartDocument ();
+			xtw.WriteStartElement ("soap", "Envelope", SoapEnvelopeNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsd", null, XmlSchema.Namespace);
+			
+			if (bodyUse == SoapBindingUse.Encoded) 
+			{
+				xtw.WriteAttributeString ("xmlns", "soapenc", null, SoapEncodingNamespace);
+				xtw.WriteAttributeString ("xmlns", "tns", null, msg.Message.Namespace);
+			}
+
+			// Serialize headers
+			
+			bool writtenHeader = false;
+			foreach (object ob in msgbin.Extensions)
+			{
+				SoapHeaderBinding hb = ob as SoapHeaderBinding;
+				if (hb == null) continue;
+				
+				if (!writtenHeader) {
+					xtw.WriteStartElement ("soap", "Header", SoapEnvelopeNamespace);
+					writtenHeader = true;
+				}
+				
+				WriteHeader (xtw, hb);
+			}
+			
+			if (writtenHeader)
+				xtw.WriteEndElement ();
+
+			// Serialize body
+			xtw.WriteStartElement ("soap", "Body", SoapEnvelopeNamespace);
+			
+			currentUse = bodyUse;
+			WriteBody (xtw, oper, msg, sbb, style);
+			
+			xtw.WriteEndElement ();
+			xtw.WriteEndElement ();
+			xtw.Close ();
+			return sw.ToString ();
+		}
+		
+		void WriteHeader (XmlTextWriter xtw, SoapHeaderBinding header)
+		{
+			Message msg = descriptions.GetMessage (header.Message);
+			if (msg == null) throw new InvalidOperationException ("Message " + header.Message + " not found");
+			MessagePart part = msg.Parts [header.Part];
+			if (part == null) throw new InvalidOperationException ("Message part " + header.Part + " not found in message " + header.Message);
+
+			currentUse = header.Use;
+			
+			if (currentUse == SoapBindingUse.Literal)
+				WriteRootElementSample (xtw, part.Element);
+			else
+				WriteTypeSample (xtw, part.Type);
+		}
+		
+		void WriteBody (XmlTextWriter xtw, Operation oper, OperationMessage opm, SoapBodyBinding sbb, SoapBindingStyle style)
+		{
+			Message msg = descriptions.GetMessage (opm.Message);
+			if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+			{
+				MessagePart part = msg.Parts[0];
+				if (part.Element == XmlQualifiedName.Empty)
+					WriteTypeSample (xtw, part.Type);
+				else
+					WriteRootElementSample (xtw, part.Element);
+			}
+			else
+			{
+				string elemName = oper.Name;
+				string ns = "";
+				if (opm is OperationOutput) elemName += "Response";
+				
+				if (style == SoapBindingStyle.Rpc) {
+					xtw.WriteStartElement (elemName, sbb.Namespace);
+					ns = sbb.Namespace;
+				}
+					
+				foreach (MessagePart part in msg.Parts)
+				{
+					if (part.Element == XmlQualifiedName.Empty)
+					{
+						XmlSchemaElement elem = new XmlSchemaElement ();
+						elem.SchemaTypeName = part.Type;
+						elem.Name = part.Name;
+						WriteElementSample (xtw, ns, elem);
+					}
+					else
+						WriteRootElementSample (xtw, part.Element);
+				}
+				
+				if (style == SoapBindingStyle.Rpc)
+					xtw.WriteEndElement ();
+			}
+			WriteQueuedTypeSamples (xtw);
+		}
+		
+		void WriteRootElementSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (qname, typeof(XmlSchemaElement));
+			if (elem == null) throw new InvalidOperationException ("Element not found: " + qname);
+			WriteElementSample (xtw, qname.Namespace, elem);
+		}
+
+		void WriteElementSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			bool sharedAnnType = false;
+			XmlQualifiedName root;
+			
+			if (!elem.RefName.IsEmpty) {
+				XmlSchemaElement refElem = FindRefElement (elem);
+				if (refElem == null) throw new InvalidOperationException ("Global element not found: " + elem.RefName);
+				root = elem.RefName;
+				elem = refElem;
+				sharedAnnType = true;
+			}
+			else
+				root = new XmlQualifiedName (elem.Name, ns);
+			
+			if (!elem.SchemaTypeName.IsEmpty)
+			{
+				XmlSchemaComplexType st = FindComplexTyype (elem.SchemaTypeName);
+				if (st != null) 
+					WriteComplexTypeSample (xtw, st, root);
+				else
+				{
+					xtw.WriteStartElement (root.Name, root.Namespace);
+					if (currentUse == SoapBindingUse.Encoded) 
+						xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, elem.SchemaTypeName));
+					xtw.WriteString (GetLiteral (FindBuiltInType (elem.SchemaTypeName)));
+					xtw.WriteEndElement ();
+				}
+			}
+			else if (elem.SchemaType == null)
+			{
+				xtw.WriteStartElement ("any");
+				xtw.WriteEndElement ();
+			}
+			else
+				WriteComplexTypeSample (xtw, (XmlSchemaComplexType) elem.SchemaType, root);
+		}
+		
+		void WriteTypeSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			if (ctype != null) {
+				WriteComplexTypeSample (xtw, ctype, qname);
+				return;
+			}
+			
+			XmlSchemaSimpleType stype = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (stype != null) {
+				WriteSimpleTypeSample (xtw, stype);
+				return;
+			}
+			
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+			throw new InvalidOperationException ("Type not found: " + qname);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName)
+		{
+			WriteComplexTypeSample (xtw, stype, rootName, -1);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName, int id)
+		{
+			string ns = rootName.Namespace;
+			
+			if (rootName.Name.IndexOf ("[]") != -1) rootName = arrayType;
+			
+			if (currentUse == SoapBindingUse.Encoded) {
+				string pref = xtw.LookupPrefix (rootName.Namespace);
+				if (pref == null) pref = "q1";
+				xtw.WriteStartElement (pref, rootName.Name, rootName.Namespace);
+				ns = "";
+			}
+			else
+				xtw.WriteStartElement (rootName.Name, rootName.Namespace);
+			
+			if (id != -1)
+			{
+				xtw.WriteAttributeString ("id", "id" + id);
+				if (rootName != arrayType)
+					xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, rootName));
+			}
+			
+			WriteComplexTypeAttributes (xtw, stype);
+			WriteComplexTypeElements (xtw, ns, stype);
+			
+			xtw.WriteEndElement ();
+		}
+		
+		void WriteComplexTypeAttributes (XmlTextWriter xtw, XmlSchemaComplexType stype)
+		{
+			WriteAttributes (xtw, stype.Attributes, stype.AnyAttribute);
+		}
+
+		Dictionary<XmlSchemaComplexType,int> recursed_types = new Dictionary<XmlSchemaComplexType,int> ();
+		void WriteComplexTypeElements (XmlTextWriter xtw, string ns, XmlSchemaComplexType stype)
+		{
+			int prev = 0;
+			if (recursed_types.ContainsKey (stype))
+				prev = recursed_types [stype];
+
+			if (prev > 1)
+				return;
+			recursed_types [stype] = ++prev;
+
+			if (stype.Particle != null)
+				WriteParticleComplexContent (xtw, ns, stype.Particle);
+			else
+			{
+				if (stype.ContentModel is XmlSchemaSimpleContent)
+					WriteSimpleContent (xtw, (XmlSchemaSimpleContent)stype.ContentModel);
+				else if (stype.ContentModel is XmlSchemaComplexContent)
+					WriteComplexContent (xtw, ns, (XmlSchemaComplexContent)stype.ContentModel);
+			}
+			prev = recursed_types [stype];
+			recursed_types [stype] = --prev;
+		}
+
+		void WriteAttributes (XmlTextWriter xtw, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat)
+		{
+			foreach (XmlSchemaObject at in atts)
+			{
+				if (at is XmlSchemaAttribute)
+				{
+					string ns;
+					XmlSchemaAttribute attr = (XmlSchemaAttribute)at;
+					XmlSchemaAttribute refAttr = attr;
+					
+					// refAttr.Form; TODO
+					
+					if (!attr.RefName.IsEmpty) {
+						refAttr = FindRefAttribute (attr.RefName);
+						if (refAttr == null) throw new InvalidOperationException ("Global attribute not found: " + attr.RefName);
+					}
+					
+					string val;
+					if (!refAttr.SchemaTypeName.IsEmpty) val = FindBuiltInType (refAttr.SchemaTypeName);
+					else val = FindBuiltInType ((XmlSchemaSimpleType) refAttr.SchemaType);
+					
+					xtw.WriteAttributeString (refAttr.Name, val);
+				}
+				else if (at is XmlSchemaAttributeGroupRef)
+				{
+					XmlSchemaAttributeGroupRef gref = (XmlSchemaAttributeGroupRef)at;
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					WriteAttributes (xtw, grp.Attributes, grp.AnyAttribute);
+				}
+			}
+			
+			if (anyat != null)
+				xtw.WriteAttributeString ("custom-attribute","value");
+		}
+		
+		void WriteParticleComplexContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle)
+		{
+			WriteParticleContent (xtw, ns, particle, false);
+		}
+		
+		void WriteParticleContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle, bool multiValue)
+		{
+			if (particle is XmlSchemaGroupRef)
+				particle = GetRefGroupParticle ((XmlSchemaGroupRef)particle);
+
+			if (particle.MaxOccurs > 1) multiValue = true;
+			
+			if (particle is XmlSchemaSequence) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaSequence)particle).Items, multiValue);
+			}
+			else if (particle is XmlSchemaChoice) {
+				if (((XmlSchemaChoice)particle).Items.Count == 1)
+					WriteSequenceContent (xtw, ns, ((XmlSchemaChoice)particle).Items, multiValue);
+				else
+					WriteChoiceContent (xtw, ns, (XmlSchemaChoice)particle, multiValue);
+			}
+			else if (particle is XmlSchemaAll) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaAll)particle).Items, multiValue);
+			}
+		}
+
+		void WriteSequenceContent (XmlTextWriter xtw, string ns, XmlSchemaObjectCollection items, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+		
+		void WriteContentItem (XmlTextWriter xtw, string ns, XmlSchemaObject item, bool multiValue)
+		{
+			if (item is XmlSchemaGroupRef)
+				item = GetRefGroupParticle ((XmlSchemaGroupRef)item);
+					
+			if (item is XmlSchemaElement)
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) item;
+				XmlSchemaElement refElem;
+				if (!elem.RefName.IsEmpty) refElem = FindRefElement (elem);
+				else refElem = elem;
+
+				int num = (elem.MaxOccurs == 1 && !multiValue) ? 1 : 2;
+				for (int n=0; n<num; n++)
+				{
+					if (currentUse == SoapBindingUse.Literal)
+						WriteElementSample (xtw, ns, refElem);
+					else
+						WriteRefTypeSample (xtw, ns, refElem);
+				}
+			}
+			else if (item is XmlSchemaAny)
+			{
+				xtw.WriteString (GetLiteral ("xml"));
+			}
+			else if (item is XmlSchemaParticle) {
+				WriteParticleContent (xtw, ns, (XmlSchemaParticle)item, multiValue);
+			}
+		}
+		
+		void WriteChoiceContent (XmlTextWriter xtw, string ns, XmlSchemaChoice choice, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in choice.Items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+
+		void WriteSimpleContent (XmlTextWriter xtw, XmlSchemaSimpleContent content)
+		{
+			XmlSchemaSimpleContentExtension ext = content.Content as XmlSchemaSimpleContentExtension;
+			if (ext != null)
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				
+			XmlQualifiedName qname = GetContentBaseType (content.Content);
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+		}
+
+		string FindBuiltInType (XmlQualifiedName qname)
+		{
+			if (qname.Namespace == XmlSchema.Namespace)
+				return qname.Name;
+
+			XmlSchemaComplexType ct = FindComplexTyype (qname);
+			if (ct != null)
+			{
+				XmlSchemaSimpleContent sc = ct.ContentModel as XmlSchemaSimpleContent;
+				if (sc == null) throw new InvalidOperationException ("Invalid schema");
+				return FindBuiltInType (GetContentBaseType (sc.Content));
+			}
+			
+			XmlSchemaSimpleType st = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (st != null)
+				return FindBuiltInType (st);
+
+			throw new InvalidOperationException ("Definition of type " + qname + " not found");
+		}
+
+		string FindBuiltInType (XmlSchemaSimpleType st)
+		{
+			if (st.Content is XmlSchemaSimpleTypeRestriction) {
+				return FindBuiltInType (GetContentBaseType (st.Content));
+			}
+			else if (st.Content is XmlSchemaSimpleTypeList) {
+				string s = FindBuiltInType (GetContentBaseType (st.Content));
+				return s + " " + s + " ...";
+			}
+			else if (st.Content is XmlSchemaSimpleTypeUnion)
+			{
+				//Check if all types of the union are equal. If not, then will use anyType.
+				XmlSchemaSimpleTypeUnion uni = (XmlSchemaSimpleTypeUnion) st.Content;
+				string utype = null;
+
+				// Anonymous types are unique
+				if (uni.BaseTypes.Count != 0 && uni.MemberTypes.Length != 0)
+					return "string";
+
+				foreach (XmlQualifiedName mt in uni.MemberTypes)
+				{
+					string qn = FindBuiltInType (mt);
+					if (utype != null && qn != utype) return "string";
+					else utype = qn;
+				}
+				return utype;
+			}
+			else
+				return "string";
+		}
+		
+
+		XmlQualifiedName GetContentBaseType (XmlSchemaObject ob)
+		{
+			if (ob is XmlSchemaSimpleContentExtension)
+				return ((XmlSchemaSimpleContentExtension)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleContentRestriction)
+				return ((XmlSchemaSimpleContentRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeRestriction)
+				return ((XmlSchemaSimpleTypeRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeList)
+				return ((XmlSchemaSimpleTypeList)ob).ItemTypeName;
+			else
+				return null;
+		}
+
+		void WriteComplexContent (XmlTextWriter xtw, string ns, XmlSchemaComplexContent content)
+		{
+			XmlQualifiedName qname;
+
+			XmlSchemaComplexContentExtension ext = content.Content as XmlSchemaComplexContentExtension;
+			if (ext != null) qname = ext.BaseTypeName;
+			else {
+				XmlSchemaComplexContentRestriction rest = (XmlSchemaComplexContentRestriction)content.Content;
+				qname = rest.BaseTypeName;
+				if (qname == arrayType) {
+					ParseArrayType (rest, out qname);
+					XmlSchemaElement elem = new XmlSchemaElement ();
+					elem.Name = "Item";
+					elem.SchemaTypeName = qname;
+					
+					xtw.WriteAttributeString ("arrayType", SoapEncodingNamespace, qname.Name + "[2]");
+					WriteContentItem (xtw, ns, elem, true);
+					return;
+				}
+			}
+			
+			// Add base map members to this map
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			WriteComplexTypeAttributes (xtw, ctype);
+			
+			if (ext != null) {
+				// Add the members of this map
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				if (ext.Particle != null)
+					WriteParticleComplexContent (xtw, ns, ext.Particle);
+			}
+			
+			WriteComplexTypeElements (xtw, ns, ctype);
+		}
+		
+		void ParseArrayType (XmlSchemaComplexContentRestriction rest, out XmlQualifiedName qtype)
+		{
+			XmlSchemaAttribute arrayTypeAt = FindArrayAttribute (rest.Attributes);
+			XmlAttribute[] uatts = arrayTypeAt.UnhandledAttributes;
+			if (uatts == null || uatts.Length == 0) throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			XmlAttribute xat = null;
+			foreach (XmlAttribute at in uatts)
+				if (at.LocalName == "arrayType" && at.NamespaceURI == WsdlNamespace)
+					{ xat = at; break; }
+			
+			if (xat == null) 
+				throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			string arrayType = xat.Value;
+			string type, ns;
+			int i = arrayType.LastIndexOf (":");
+			if (i == -1) ns = "";
+			else ns = arrayType.Substring (0,i);
+			
+			int j = arrayType.IndexOf ("[", i+1);
+			if (j == -1) throw new InvalidOperationException ("Cannot parse WSDL array type: " + arrayType);
+			type = arrayType.Substring (i+1);
+			type = type.Substring (0, type.Length-2);
+			
+			qtype = new XmlQualifiedName (type, ns);
+		}
+		
+		XmlSchemaAttribute FindArrayAttribute (XmlSchemaObjectCollection atts)
+		{
+			foreach (object ob in atts)
+			{
+				XmlSchemaAttribute att = ob as XmlSchemaAttribute;
+				if (att != null && att.RefName == arrayTypeRefName) return att;
+				
+				XmlSchemaAttributeGroupRef gref = ob as XmlSchemaAttributeGroupRef;
+				if (gref != null)
+				{
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					att = FindArrayAttribute (grp.Attributes);
+					if (att != null) return att;
+				}
+			}
+			return null;
+		}
+		
+		void WriteSimpleTypeSample (XmlTextWriter xtw, XmlSchemaSimpleType stype)
+		{
+			xtw.WriteString (GetLiteral (FindBuiltInType (stype)));
+		}
+		
+		XmlSchemaParticle GetRefGroupParticle (XmlSchemaGroupRef refGroup)
+		{
+			XmlSchemaGroup grp = (XmlSchemaGroup) schemas.Find (refGroup.RefName, typeof (XmlSchemaGroup));
+			return grp.Particle;
+		}
+
+		XmlSchemaElement FindRefElement (XmlSchemaElement elem)
+		{
+			if (elem.RefName.Namespace == XmlSchema.Namespace)
+			{
+				if (anyElement != null) return anyElement;
+				anyElement = new XmlSchemaElement ();
+				anyElement.Name = "any";
+				anyElement.SchemaTypeName = anyType;
+				return anyElement;
+			}
+			return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+		}
+		
+		XmlSchemaAttribute FindRefAttribute (XmlQualifiedName refName)
+		{
+			if (refName.Namespace == XmlSchema.Namespace)
+			{
+				XmlSchemaAttribute at = new XmlSchemaAttribute ();
+				at.Name = refName.Name;
+				at.SchemaTypeName = new XmlQualifiedName ("string",XmlSchema.Namespace);
+				return at;
+			}
+			return (XmlSchemaAttribute) schemas.Find (refName, typeof(XmlSchemaAttribute));
+		}
+		
+		void WriteRefTypeSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			if (elem.SchemaTypeName.Namespace == XmlSchema.Namespace || schemas.Find (elem.SchemaTypeName, typeof(XmlSchemaSimpleType)) != null)
+				WriteElementSample (xtw, ns, elem);
+			else
+			{
+				xtw.WriteStartElement (elem.Name, ns);
+				xtw.WriteAttributeString ("href", "#id" + (queue.Count+1));
+				xtw.WriteEndElement ();
+				queue.Add (new EncodedType (ns, elem));
+			}
+		}
+		
+		void WriteQueuedTypeSamples (XmlTextWriter xtw)
+		{
+			for (int n=0; n<queue.Count; n++)
+			{
+				EncodedType ec = (EncodedType) queue[n];
+				XmlSchemaComplexType st = FindComplexTyype (ec.Element.SchemaTypeName);
+				WriteComplexTypeSample (xtw, st, ec.Element.SchemaTypeName, n+1);
+			}
+		}
+		
+		XmlSchemaComplexType FindComplexTyype (XmlQualifiedName qname)
+		{
+			if (qname.Name.IndexOf ("[]") != -1)
+			{
+				XmlSchemaComplexType stype = new XmlSchemaComplexType ();
+				stype.ContentModel = new XmlSchemaComplexContent ();
+				
+				XmlSchemaComplexContentRestriction res = new XmlSchemaComplexContentRestriction ();
+				stype.ContentModel.Content = res;
+				res.BaseTypeName = arrayType;
+				
+				XmlSchemaAttribute att = new XmlSchemaAttribute ();
+				att.RefName = arrayTypeRefName;
+				res.Attributes.Add (att);
+				
+				XmlAttribute xat = document.CreateAttribute ("arrayType", WsdlNamespace);
+				xat.Value = qname.Namespace + ":" + qname.Name;
+				att.UnhandledAttributes = new XmlAttribute[] {xat};
+				return stype;
+			}
+				
+			return (XmlSchemaComplexType) schemas.Find (qname, typeof(XmlSchemaComplexType));
+		}
+		
+		string GetQualifiedNameString (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			string pref = xtw.LookupPrefix (qname.Namespace);
+			if (pref != null) return pref + ":" + qname.Name;
+			
+			xtw.WriteAttributeString ("xmlns", "q1", null, qname.Namespace);
+			return "q1:" + qname.Name;
+		}
+				
+		protected virtual string GetLiteral (string s)
+		{
+			return s;
+		}
+
+		void GetOperationFormat (OperationBinding obin, out SoapBindingStyle style, out SoapBindingUse use)
+		{
+			style = SoapBindingStyle.Document;
+			use = SoapBindingUse.Literal;
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			if (sob != null) {
+				style = sob.Style;
+				SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+				if (sbb != null)
+					use = sbb.Use;
+			}
+		}
+	}
+
+
+
+
+
+</script>
+
+<head runat="server">
+	<%
+	Response.Write ("<link rel=\"alternate\" type=\"text/xml\" href=\"" + Request.FilePath + "?disco\"/>");
+	%>
+	<title><%=WebServiceName%> Web Service</title>
+    <style type="text/css">
+		BODY { font-family: Arial; margin-left: 20px; margin-top: 20px; font-size: x-small}
+		TABLE { font-size: x-small }
+		.title { color:dimgray; font-family: Arial; font-size:20pt; font-weight:900}
+		.operationTitle { color:dimgray; font-family: Arial; font-size:15pt; font-weight:900}
+		.method { font-size: x-small }
+		.bindingLabel { font-size: x-small; font-weight:bold; color:darkgray; line-height:8pt; display:block; margin-bottom:3px }
+		.label { font-size: small; font-weight:bold; color:darkgray }
+		.paramTable { font-size: x-small }
+		.paramTable TR { background-color: gainsboro }
+		.paramFormTable { font-size: x-small; padding: 10px; background-color: gainsboro }
+		.paramFormTable TR { background-color: gainsboro }
+		.paramInput { border: solid 1px gray }
+		.button {border: solid 1px gray }
+		.smallSeparator { height:3px; overflow:hidden }
+		.panel { background-color:whitesmoke; border: solid 1px silver; border-top: solid 1px silver  }
+		.codePanel { background-color: white; font-size:x-small; padding:7px; border:solid 1px silver}
+		.code-xml { font-size:10pt; font-family:courier }
+		.code-cs { font-size:10pt; font-family:courier }
+		.code-vb { font-size:10pt; font-family:courier }
+		.tabLabelOn { font-weight:bold }
+		.tabLabelOff {color: darkgray }
+		.literal-placeholder {color: darkblue; font-weight:bold}
+		A:link { color: black; }
+		A:visited { color: black; }
+		A:active { color: black; }
+		A:hover { color: blue }
+    </style>
+	
+<script language="javascript" type="text/javascript">
+var req;
+function getXML (command, url, qs) {
+	if (url == "" || url.substring (0, 4) != "http")
+		return;
+	
+	var post_data = null;
+	req = getReq ();
+	req.onreadystatechange = stateChange;
+	if (command == "GET") {
+		url = url + "?" + qs;
+	} else {
+		post_data = qs;
+	}
+	req.open (command, url,  true); 
+	if (command == "POST")
+		req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
+	req.send (post_data); 
+}
+
+function stateChange () {
+	if (req.readyState == 4) {
+		var node = document.getElementById("testresult_div");
+		var text = "";
+		if (req.status == 200) {
+			node.innerHTML = "<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+		} else {
+			var ht = "<b style='color: red'>" + formatXml (req.status + " - " + req.statusText) + "</b>";
+			if (req.responseText != "")
+				ht = ht + "\n<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+			node.innerHTML = ht;
+					
+		}
+	}
+}
+
+function formatXml (text)
+{	
+	var re = / /g;
+	text = text.replace (re, "&nbsp;");
+
+	re = /\t/g;
+	text = text.replace (re, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	
+	re = /\<\s*(\/?)\s*(.*?)\s*(\/?)\s*\>/g;
+	text = text.replace (re,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = /{(\w*):(.*?)}/g;
+	text = text.replace (re,"<span style='color:$1'>$2</span>");
+
+	re = /"(.*?)"/g;
+	text = text.replace (re,"\"<span style='color:purple'>$1</span>\"");
+
+	re = /\r\n|\r|\n/g;
+	text = text.replace (re, "<br/>");
+	
+	return text;
+}
+
+function getReq () {
+	if (window.XMLHttpRequest) {
+		return new XMLHttpRequest();     // Firefox, Safari, ...
+	} else if (window.ActiveXObject) {
+		return new ActiveXObject("Microsoft.XMLHTTP");
+	}
+}
+
+function clearForm ()
+{
+	document.getElementById("testFormResult").style.display="none";
+}
+</script>
+
+</head>
+
+<body>
+<div class="title" style="margin-left:20px">
+<span class="label">Web Service</span><br>
+<%=WebServiceName%>
+</div>
+
+<!--
+	**********************************************************
+	Left panel
+-->
+
+<table border="0" width="100%" cellpadding="15px" cellspacing="15px">
+<tr valign="top"><td width="150px" class="panel">
+<div style="width:150px"></div>
+<a class="method" href='<%=PageName%>'>Overview</a><br>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("wsdl")%>'>Service Description</a>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("proxy")%>'>Client proxy</a>
+<br><br>
+	<asp:repeater id="BindingsRepeater" runat=server>
+		<itemtemplate name="itemtemplate">
+			<span class="bindingLabel"><%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%></span>
+			<asp:repeater id="OperationsRepeater" runat=server datasource='<%# ((Binding)Container.DataItem).Operations %>'>
+				<itemtemplate>
+					<a class="method" href="<%=PageName%>?<%=GetTabContext("op",null)%>op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%></a>
+					<div class="smallSeparator"></div>
+				</itemtemplate>
+			</asp:repeater>
+			<br>
+		</itemtemplate>
+	</asp:repeater>
+
+</td><td class="panel">
+
+<% if (CurrentPage == "main") {%>
+
+<!--
+	**********************************************************
+	Web service overview
+-->
+
+	<p class="label">Web Service Overview</p>
+	<%=WebServiceDescription%>
+	<br/><br/>
+	<% if (ProfileViolations != null && ProfileViolations.Count > 0) { %>
+		<p class="label">Basic Profile Conformance</p>
+		This web service does not conform to WS-I Basic Profile v1.1
+	<%
+		Response.Write ("<ul>");
+		foreach (BasicProfileViolation vio in ProfileViolations) {
+			Response.Write ("<li><b>" + vio.NormativeStatement + "</b>: " + vio.Details);
+			Response.Write ("<ul>");
+			foreach (string ele in vio.Elements)
+				Response.Write ("<li>" + ele + "</li>");
+			Response.Write ("</ul>");
+			Response.Write ("</li>");
+		}
+		Response.Write ("</ul>");
+	}%>
+
+<%} if (DefaultBinding == null) {%>
+This service does not contain any public web method.
+<%} else if (CurrentPage == "op") {%>
+
+<!--
+	**********************************************************
+	Operation description
+-->
+
+	<span class="operationTitle"><%=CurrentOperationName%></span>
+	<br><br>
+	<% WriteTabs (); %>
+	<br><br><br>
+	
+	<% if (CurrentTab == "main") { %>
+		<span class="label">Input Parameters</span>
+		<div class="smallSeparator"></div>
+		<% if (InParams.Count == 0) { %>
+			No input parameters<br>
+		<% } else { %>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="InputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<% } %>
+		<br>
+		
+		<% if (OutParams.Count > 0) { %>
+		<span class="label">Output Parameters</span>
+			<div class="smallSeparator"></div>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="OutputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<br>
+		<% } %>
+		
+		<span class="label">Remarks</span>
+		<div class="smallSeparator"></div>
+		<%=OperationDocumentation%>
+		<br><br>
+		<span class="label">Technical information</span>
+		<div class="smallSeparator"></div>
+		Format: <%=CurrentOperationFormat%>
+		<br>Supported protocols: <%=CurrentOperationProtocols%>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Test form
+-->
+
+	<% if (CurrentTab == "test") { 
+		if (CurrentOperationSupportsTest) {%>
+			Enter values for the parameters and click the 'Invoke' button to test this method:<br><br>
+			<form action="<%=PageName%>" method="GET">
+			<input type="hidden" name="page" value="<%=CurrentPage%>">
+			<input type="hidden" name="tab" value="<%=CurrentTab%>">
+			<input type="hidden" name="op" value="<%=CurrentOperationName%>">
+			<input type="hidden" name="bnd" value="<%=CurrentOperationBinding%>">
+			<input type="hidden" name="ext" value="testform">
+			<table class="paramFormTable" cellspacing="0" cellpadding="3">
+			<asp:repeater id="InputFormParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td><%#DataBinder.Eval(Container.DataItem, "Name")%>:&nbsp;</td>
+					<td width="150"><input class="paramInput" type="text" size="20" name="<%#DataBinder.Eval(Container.DataItem, "Name")%>"></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			<tr><td></td><td><input class="button" type="submit" value="Invoke">&nbsp;<input class="button" type="button" onclick="clearForm()" value="Clear"></td></tr>
+			</table>
+			</form>
+			<div id="testFormResult" style="display:<%= (HasFormResult?"block":"none") %>">
+			The web service returned the following result:<br/><br/>
+			<div class="codePanel" id="testresult_div">
+			</div>
+			<script language="javascript">
+				getXML ("<%= GetOrPost () %>", "<%= GetTestResultUrl () %>", "<%= GetQS () %>");
+			</script>
+			</div>
+		<% } else {%>
+		The test form is not available for this operation because it has parameters with a complex structure.
+		<% } %>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Message Layout
+-->
+
+	<% if (CurrentTab == "msg") { %>
+		
+		The following are sample SOAP requests and responses for each protocol supported by this method:
+			<br/><br/>
+		
+		<% if (IsOperationSupported ("Soap")) { %>
+			<span class="label">Soap</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpGet")) { %>
+			<span class="label">HTTP Get</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpPost")) { %>
+			<span class="label">HTTP Post</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", false)%></div></div>
+			<br/>
+		<% } %>
+		
+	<% } %>
+<%} else if (CurrentPage == "proxy") {%>
+<!--
+	**********************************************************
+	Client Proxy
+-->
+	<form action="<%=PageName%>" name="langForm" method="GET">
+		Select the language for which you want to generate a proxy 
+		<input type="hidden" name="page" value="<%=CurrentPage%>">&nbsp;
+		<SELECT name="lang" onchange="langForm.submit()">
+			<%=GetOptionSel("cs",CurrentLanguage)%>C#</option>
+			<%=GetOptionSel("vb",CurrentLanguage)%>Visual Basic</option>
+		</SELECT>
+		&nbsp;&nbsp;
+	</form>
+	<br>
+	<span class="label"><%=CurrentProxytName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?code=" + CurrentLanguage%>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-<%=CurrentLanguage%>"><%=GetProxyCode ()%></div>
+	</div>
+<%} else if (CurrentPage == "wsdl") {%>
+<!--
+	**********************************************************
+	Service description
+-->
+	<% if (descriptions.Count > 1 || schemas.Count > 1) {%>
+	The description of this web service is composed by several documents. Click on the document you want to see:
+	
+	<ul>
+	<% 
+		for (int n=0; n<descriptions.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=wsdl&docind=" + n + "'>WSDL document " + descriptions[n].TargetNamespace + "</a></li>");
+		for (int n=0; n<schemas.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=schema&docind=" + n + "'>Xml Schema " + schemas[n].TargetNamespace + "</a></li>");
+	%>
+	</ul>
+	
+	<%} else {%>
+	<%}%>
+	<br>
+	<span class="label"><%=CurrentDocumentName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?" + CurrentDocType + "=" + CurrentDocInd %>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-xml"><%=GenerateDocument ()%></div>
+	</div>
+
+<%}%>
+
+<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+</td>
+<td width="20px"></td>
+</tr>
+
+</table>
+</body>
+</html>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.0/machine.config b/Build/MonoBleedingEdge/etc/mono/4.0/machine.config
new file mode 100644
index 0000000000000000000000000000000000000000..12839c1f6a3cc26989cbc808fc477267d6fbd010
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.0/machine.config
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+	<configSections>
+		<section name="configProtectedData" type="System.Configuration.ProtectedConfigurationSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="mscorlib" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="assemblyBinding"  type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="satelliteassemblies" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="startup" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="system.codedom" type="System.CodeDom.Compiler.CodeDomConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.diagnostics" type="System.Diagnostics.DiagnosticsConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.runtime.remoting" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<section name="system.windows.forms" type="System.Windows.Forms.WindowsFormsSection, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="windows" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="strongNames" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+			<section name="anonymousIdentification" type="System.Web.Configuration.AnonymousIdentificationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authorization" type="System.Web.Configuration.AuthorizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="browserCaps" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="clientTarget" type="System.Web.Configuration.ClientTargetSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="compilation" type="System.Web.Configuration.CompilationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="deployment" type="System.Web.Configuration.DeploymentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" />
+			<section name="globalization" type="System.Web.Configuration.GlobalizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="healthMonitoring" type="System.Web.Configuration.HealthMonitoringSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="hostingEnvironment" type="System.Web.Configuration.HostingEnvironmentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="httpCookies" type="System.Web.Configuration.HttpCookiesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpHandlers" type="System.Web.Configuration.HttpHandlersSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpModules" type="System.Web.Configuration.HttpModulesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpRuntime" type="System.Web.Configuration.HttpRuntimeSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="identity" type="System.Web.Configuration.IdentitySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="membership" type="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="mobileControls" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+                        <section name="deviceFilters" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="pages" type="System.Web.Configuration.PagesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="processModel" type="System.Web.Configuration.ProcessModelSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" allowLocation="false" />
+			<section name="profile" type="System.Web.Configuration.ProfileSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="roleManager" type="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="securityPolicy" type="System.Web.Configuration.SecurityPolicySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="sessionPageState" type="System.Web.Configuration.SessionPageStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="sessionState" type="System.Web.Configuration.SessionStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="siteMap" type="System.Web.Configuration.SiteMapSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="trace" type="System.Web.Configuration.TraceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="trust" type="System.Web.Configuration.TrustSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="urlMappings" type="System.Web.Configuration.UrlMappingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="webControls" type="System.Web.Configuration.WebControlsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webParts" type="System.Web.Configuration.WebPartsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webServices" type="System.Web.Services.Configuration.WebServicesSection, System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="xhtmlConformance" type="System.Web.Configuration.XhtmlConformanceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<sectionGroup name="caching" type="System.Web.Configuration.SystemWebCachingSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+				<section name="cache" type="System.Web.Configuration.CacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCache" type="System.Web.Configuration.OutputCacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCacheSettings" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="sqlCacheDependency" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			</sectionGroup>
+			<section name="monoSettings" type="System.Web.Configuration.MonoSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</sectionGroup>
+		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
+					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				</sectionGroup>
+			</sectionGroup>
+		</sectionGroup>
+		<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+				<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</sectionGroup>
+			<section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="settings" type="System.Net.Configuration.SettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</sectionGroup>
+		<section name="system.drawing" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+			<section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			<section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+		</sectionGroup>
+		<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
+			<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
+			<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
+		</sectionGroup>
+		<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.runtime.caching" type="System.Runtime.Caching.Configuration.CachingSectionGroup, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+		  <section name="memoryCache" type="System.Runtime.Caching.Configuration.MemoryCacheSection, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+                </sectionGroup>
+	</configSections>
+
+	<connectionStrings>
+		<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
+		<add name="LocalSqliteServer" connectionString="Data Source=|DataDirectory|/aspnetdb.sqlite;version=3" providerName="Mono.Data.Sqlite"/>
+	</connectionStrings>
+	
+	<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
+		<providers>
+			<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" keyContainerName="MonoFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+			<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" useMachineProtection="true" keyEntropy="" />
+		</providers>
+	</configProtectedData>
+
+	<system.net>
+		<authenticationModules>
+			<add type="System.Net.BasicClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.DigestClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.NtlmClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</authenticationModules>
+		<webRequestModules>
+			<add prefix="http" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="https" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="file" type="System.Net.FileWebRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="ftp" type="System.Net.FtpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</webRequestModules>
+		<settings>
+			<ipv6 enabled="true"/>
+		</settings>
+	</system.net>
+	
+	<system.runtime.remoting>
+		<application>
+			<channels>
+				<channel ref="http client" displayName="http client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="tcp client" displayName="tcp client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="ipc client" displayName="ipc client (delay loaded)" delayLoadAsClientChannel="true" />
+			</channels>
+		</application>
+		<channels>
+			<channel id="http" type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http client" type="System.Runtime.Remoting.Channels.Http.HttpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http server" type="System.Runtime.Remoting.Channels.Http.HttpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp" type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp client" type="System.Runtime.Remoting.Channels.Tcp.TcpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp server" type="System.Runtime.Remoting.Channels.Tcp.TcpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc" type="System.Runtime.Remoting.Channels.Ipc.IpcChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc client" type="System.Runtime.Remoting.Channels.Ipc.IpcClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc server" type="System.Runtime.Remoting.Channels.Ipc.IpcServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</channels>
+			<channelSinkProviders>
+				<clientProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</clientProviders>
+				<serverProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<provider id="wsdl" type="System.Runtime.Remoting.MetadataServices.SdlChannelSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</serverProviders>
+			</channelSinkProviders>
+	</system.runtime.remoting>
+	
+	<appSettings>
+	<!--<add key="yourkey" value="your value" /> -->
+	<!--<remove key="a key defined higher in the hierarchy" /> -->
+	<!--<clear/> Removes all defined settings -->
+	</appSettings>
+	<system.diagnostics>
+		<trace autoflush="false" indentsize="4" />
+	</system.diagnostics>
+        <system.drawing>
+        </system.drawing>
+
+	<system.data>
+	  <DbProviderFactories>
+	    <add name="Mono Sqlite Data Provider"  invariant="Mono.Data.SqliteClient" 
+		 description="Mono Framework Data Provider for SQLite (old version)" 
+		 type="Mono.Data.SqliteClient.SqliteFactory, Mono.Data.SqliteClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Mono Sqlite Provider"  invariant="Mono.Data.Sqlite" 
+		 description="Mono Framework Data Provider for SQLite (new version)"
+		 type="Mono.Data.Sqlite.SqliteFactory, Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         
+		 description=".Net Framework Data Provider for Odbc"      
+		 type="System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        
+		 description=".Net Framework Data Provider for OleDb"     
+		 type="System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" 
+		 description=".Net Framework Data Provider for Oracle"    
+		 type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    
+		 description=".Net Framework Data Provider for SqlServer" 
+		 type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="Sybase Data Provider"    invariant="Mono.Data.SybaseClient"    
+		 description=".Net Framework Data Provider for Sybase" 
+		 type="Mono.Data.SybaseClient.SybaseClientFactory, Mono.Data.SybaseClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	  </DbProviderFactories>
+	</system.data>
+
+	<mscorlib>
+		<cryptographySettings>
+			<cryptoNameMapping>
+				<cryptoClasses>
+					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+				</cryptoClasses>
+				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
+			</cryptoNameMapping>
+			<oidMap>
+				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
+				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
+			</oidMap>
+		</cryptographySettings>
+	</mscorlib>
+
+	<strongNames>
+		<pubTokenMapping>
+			<!-- ECMA key -->
+			<map Token="b77a5c561934e089" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (final) key -->
+			<map Token="b03f5f7f11d50a3a" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (Web Service Enhancement) key -->
+			<map Token="31bf3856ad364e35" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- IBM (DB2 Data Provider) key -->
+			<map Token="7c307b91aa13d208" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Silverlight 2.0 key -->
+			<map Token="7cec85d7bea7798e" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- XNA Framework key -->                                                            
+			<map Token="6d5c3888ef60e27d" PublicKey="0024000004800000940000000602000000240000525341310004000001000100f9a2641bac9847900d92a33d652ccc4e8b529360f908e7af53e57008b2a9a1938c32a160d47f795a23590557608d2c8d0c0e8846a052d070f9298281b8185343dbe5b479bd52de256f73c2a943e1a8a42065b5c918622dc14b1c0151dbd94d9a4543e7cd03e536b1b1d2d6d99af535d227ab9bdac76af9312a21d457bdf817e6" />
+		</pubTokenMapping>
+	</strongNames>
+
+	<system.web>
+		<webServices>
+			<protocols>
+				<add name="HttpSoap"/>
+				<add name="HttpSoap12"/>
+				<add name="HttpPost"/>
+				<add name="HttpGet"/>
+				<add name="Documentation"/>
+			</protocols>
+			<conformanceWarnings>
+				<add name="BasicProfile1_1"/>
+			</conformanceWarnings>
+			<wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
+		</webServices>
+
+		<membership>
+			<providers>
+				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
+				<!-- <add name="AspNetSqlMembershipProvider" type="Mainsoft.Web.Security.GenericMembershipProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</membership>
+
+		<roleManager>
+			<providers>
+				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="LocalSqlServer" />
+				<!-- <add name="AspNetSqlRoleProvider" type="Mainsoft.Web.Security.GenericRoleProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</roleManager>
+
+		<profile>
+        		<providers>
+            		    <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		        </providers>
+    		</profile>
+	</system.web>
+
+
+	<system.serviceModel>
+		<extensions>
+			<behaviorExtensions>
+				<add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</behaviorExtensions>
+			<bindingElementExtensions>
+				<add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingElementExtensions>
+			<bindingExtensions>
+				<add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingExtensions>
+			<endpointExtensions>
+				<add name="dynamicEndpoint" type="System.ServiceModel.Discovery.Configuration.DynamicEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="discoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.DiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpDiscoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpDiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="announcementEndpoint" type="System.ServiceModel.Discovery.Configuration.AnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpAnnouncementEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpAnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttpEndpoint" type="System.ServiceModel.Configuration.WebHttpEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webScriptEndpoint" type="System.ServiceModel.Configuration.WebScriptEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</endpointExtensions>
+		</extensions>
+	</system.serviceModel>
+</configuration>
+
+
diff --git a/Build/MonoBleedingEdge/etc/mono/4.0/settings.map b/Build/MonoBleedingEdge/etc/mono/4.0/settings.map
new file mode 100644
index 0000000000000000000000000000000000000000..4c53aca6776656859d35fb7b7e6a64a5d54bfc6a
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.0/settings.map
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settingsMap>
+  <map sectionType="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.MembershipSectionMapper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlMembershipProvider" 
+	       type="System.Web.Security.SqliteMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+
+  <map sectionType="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.RoleManagerSectionMapper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlRoleProvider" 
+	       type="System.Web.Security.SqliteRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+</settingsMap>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.0/web.config b/Build/MonoBleedingEdge/etc/mono/4.0/web.config
new file mode 100644
index 0000000000000000000000000000000000000000..2a7dfd2edacacfcafbfba2a9eb837929f3445b1b
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.0/web.config
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+  <system.codedom>
+        <compilers>
+            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="OptionInfer" value="true"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+        </compilers>
+  </system.codedom>
+
+	<system.web>
+		<monoSettings>
+			<compilersCompatibility>
+				<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/nowarn:0169"
+					  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</compilersCompatibility>
+		</monoSettings>
+		
+		<authorization>
+			<allow users="*" />
+		</authorization>
+		<httpHandlers>
+		  <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
+		  <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
+		  <add verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
+		  <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
+		  <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
+		  <add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler"  validate="True" />
+		  <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <!--
+		  <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+                  <add verb="*" path="*.svc" type="System.ServiceModel.Channels.SvcHttpHandlerFactory, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		  <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
+		  <!--
+		  <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.xamlx" verb="*" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+		  <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
+		  <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
+		</httpHandlers>
+		<httpModules>
+		  <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
+		  <add name="Session" type="System.Web.SessionState.SessionStateModule" />
+		  <!--
+		  <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
+		  -->
+		  <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
+		  <!--
+		  <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
+		  -->
+		  <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
+		  <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
+		  <!--
+		  <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
+		  -->
+		  <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
+		  <add name="Profile" type="System.Web.Profile.ProfileModule" />
+		  <!--
+		  <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		  <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+		  -->
+		  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
+		  <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+		</httpModules>
+		<authentication mode="Forms">
+			<forms name=".MONOAUTH" loginUrl="login.aspx" protection="All" timeout="30" path="/">
+				<credentials passwordFormat="Clear">
+					<!--<user name="gonzalo" password="gonz"/>-->
+				</credentials>
+			</forms>
+		</authentication>
+		<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
+		<globalization  requestEncoding="utf-8"
+				responseEncoding="utf-8"
+				fileEncoding="utf-8"/>
+		<!--
+				culture="en-US"
+				uiculture="en-US" />
+		-->
+		<sessionState mode="InProc" />
+		<pages>
+        		<namespaces>
+            			<add namespace="System" />
+            			<add namespace="System.Collections" />
+            			<add namespace="System.Collections.Specialized" />
+            			<add namespace="System.Configuration" />
+            			<add namespace="System.Text" />
+            			<add namespace="System.Text.RegularExpressions" />
+            			<add namespace="System.Web" />
+            			<add namespace="System.Web.Caching" />
+            			<add namespace="System.Web.SessionState" />
+            			<add namespace="System.Web.Security" />
+            			<add namespace="System.Web.Profile" />
+            			<add namespace="System.Web.UI" />
+            			<add namespace="System.Web.UI.WebControls" />
+            			<!-- <add namespace="System.Web.UI.WebControls.WebParts" /> -->
+            			<add namespace="System.Web.UI.HtmlControls" />
+        		</namespaces>
+        		
+        		<controls>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.WebParts" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.Expressions" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.DynamicData" assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</controls>
+    		</pages>
+		<webControls clientScriptsLocation="/web_scripts" />
+		<compilation debug="false" defaultLanguage="c#" explicit="true" strict="false" >
+			<assemblies>
+				<add assembly="mscorlib" />
+				<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<!-- <add assembly="System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> -->
+				<add assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<!-- <add assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> -->
+				<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="*" /> <!-- Add assemblies in bin directory -->
+			</assemblies>
+			<expressionBuilders>
+				<add expressionPrefix="Resources"
+				     type="System.Web.Compilation.ResourceExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="ConnectionStrings"
+				     type="System.Web.Compilation.ConnectionStringsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="AppSettings"
+				     type="System.Web.Compilation.AppSettingsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="RouteUrl" type="System.Web.Compilation.RouteUrlExpressionBuilder"/>
+				<!--
+				<add expressionPrefix="RouteValue" type="System.Web.Compilation.RouteValueExpressionBuilder"/>
+				-->
+			</expressionBuilders>
+			<buildProviders>
+				<add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
+				<add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
+				<add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
+				<add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
+				<add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
+				<add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
+				<add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
+				<add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider" />
+				<add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
+				<add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<!--
+				<add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
+				<add extension=".xoml" type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add extension=".xamlx" type="System.Xaml.Hosting.XamlBuildProvider, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				-->
+			</buildProviders>
+		</compilation>
+		<httpRuntime executionTimeout="110"
+			     maxRequestLength="4096"
+			     useFullyQualifiedRedirectUrl="false"
+			     minFreeThreads="8"
+			     minLocalRequestFreeThreads="4"
+			     appRequestQueueLimit="5000" />
+		<clientTarget>
+			<add alias="ie5" userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)" />
+			<add alias="ie4" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="uplevel" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="downlevel" userAgent="Unknown" />
+		</clientTarget>
+
+		<siteMap>
+			<providers>
+				<add name="AspNetXmlSiteMapProvider"
+				 description="Default site map provider that reads in .sitemap xml files."
+				 type="System.Web.XmlSiteMapProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+				 siteMapFile="Web.sitemap" />
+			</providers>
+		</siteMap>
+	</system.web>
+
+</configuration>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser b/Build/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser
new file mode 100644
index 0000000000000000000000000000000000000000..dcedf7f7333565268eb99488767618235e7d24f1
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser
@@ -0,0 +1,42 @@
+<!--
+    This file defines some of the browsers that Microsoft's implementation provides in
+    <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers\*.browser
+	
+	It is not derived from any file distributed with Microsoft's implementation.  Since
+	we can't distribute MS's browser files, we use browscap.ini to determine 
+	browser capabilities.  Then, if and only if the application contains App_Browser/*.browser
+	files and we are using .NET 2.0 or higher, we supplement the capabilities with the 
+	information in those files and the files in this directory.  The primary goal of this file
+	is provide browser definitions that might be referenced in App_Browser/*.browser files.
+-->
+<browsers>
+  <defaultBrowser id="Default">
+  </defaultBrowser>
+  <browser id="Default">
+    <identification>
+    	<userAgent match="." />
+    </identification>
+  </browser>
+  <browser id="IE6to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[6-9]" />
+      <capability name="browser" match="^(IE|AOL)$" />
+    </identification>
+  </browser>
+  <browser id="Opera8to9" parentID="Default">
+    <identification>
+      <capability name="majorver" match="^[8-9]" />
+      <capability name="browser" match="^Opera$" />
+    </identification>
+  </browser>
+  <browser id="Safari" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Safari$" />
+    </identification>
+  </browser>
+  <browser id="Mozilla" parentID="Default">
+    <identification>
+      <capability name="browser" match="^Mozilla" />
+    </identification>
+  </browser>
+</browsers>
\ No newline at end of file
diff --git a/Build/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Build/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx
new file mode 100644
index 0000000000000000000000000000000000000000..f4d74bff7f5bca96ad3fc764e518b4d710854177
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx
@@ -0,0 +1,1901 @@
+<%--
+//
+// DefaultWsdlHelpGenerator.aspx: 
+//
+// Author:
+//   Lluis Sanchez Gual (lluis@ximian.com)
+//
+// (C) 2003 Ximian, Inc.  http://www.ximian.com
+//
+--%>
+
+<%@ Import Namespace="System.Collections" %>
+<%@ Import Namespace="System.Collections.Generic" %>
+<%@ Import Namespace="System.IO" %>
+<%@ Import Namespace="System.Xml.Serialization" %>
+<%@ Import Namespace="System.Xml" %>
+<%@ Import Namespace="System.Xml.Schema" %>
+<%@ Import Namespace="System.Web.Services" %>
+<%@ Import Namespace="System.Web.Services.Description" %>
+<%@ Import Namespace="System.Web.Services.Configuration" %>
+<%@ Import Namespace="System.Web.Configuration" %>
+<%@ Import Namespace="System" %>
+<%@ Import Namespace="System.Net" %>
+<%@ Import Namespace="System.Globalization" %>
+<%@ Import Namespace="System.Resources" %>
+<%@ Import Namespace="System.Diagnostics" %>
+<%@ Import Namespace="System.CodeDom" %>
+<%@ Import Namespace="System.CodeDom.Compiler" %>
+<%@ Import Namespace="Microsoft.CSharp" %>
+<%@ Import Namespace="Microsoft.VisualBasic" %>
+<%@ Import Namespace="System.Text" %>
+<%@ Import Namespace="System.Text.RegularExpressions" %>
+<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
+<%@ Assembly name="System.Web.Services" %>
+<%@ Page debug="true" %>
+
+<html>
+<script language="C#" runat="server">
+
+ServiceDescriptionCollection descriptions;
+XmlSchemas schemas;
+
+string WebServiceName;
+string WebServiceDescription;
+string PageName;
+
+string DefaultBinding;
+ArrayList ServiceProtocols;
+
+string CurrentOperationName;
+string CurrentOperationBinding;
+string OperationDocumentation;
+string CurrentOperationFormat;
+bool CurrentOperationSupportsTest;
+ArrayList InParams;
+ArrayList OutParams;
+string CurrentOperationProtocols;
+int CodeTextColumns = 95;
+BasicProfileViolationCollection ProfileViolations;
+
+void Page_Load(object sender, EventArgs e)
+{
+	descriptions = (ServiceDescriptionCollection) Context.Items["wsdls"];
+	schemas = (XmlSchemas) Context.Items["schemas"];
+
+	ServiceDescription desc = descriptions [0];
+	if (schemas.Count == 0) schemas = desc.Types.Schemas;
+	
+	Service service = desc.Services[0];
+	WebServiceName = service.Name;
+	if (desc.Bindings.Count == 0)
+		return;
+	
+	DefaultBinding = desc.Bindings[0].Name;
+	WebServiceDescription = service.Documentation;
+	if (WebServiceDescription == "" || WebServiceDescription == null)
+		WebServiceDescription = "Description has not been provided";
+	ServiceProtocols = FindServiceProtocols (null);
+	
+	CurrentOperationName = Request.QueryString["op"];
+	CurrentOperationBinding = Request.QueryString["bnd"];
+	if (CurrentOperationName != null) BuildOperationInfo ();
+
+	PageName = HttpUtility.UrlEncode (Path.GetFileName(Request.Path), Encoding.UTF8);
+
+	ArrayList list = new ArrayList ();
+	foreach (ServiceDescription sd in descriptions) {
+		foreach (Binding bin in sd.Bindings)
+			if (bin.Extensions.Find (typeof(SoapBinding)) != null) list.Add (bin);
+	}
+
+	BindingsRepeater.DataSource = list;
+	Page.DataBind();
+	
+	ProfileViolations = new BasicProfileViolationCollection ();
+	foreach (WsiProfilesElement claims in ((WebServicesSection) WebConfigurationManager.GetSection("system.web/webServices")).ConformanceWarnings)
+		if (claims.Name != WsiProfiles.None)
+			WebServicesInteroperability.CheckConformance (claims.Name, descriptions, ProfileViolations);
+}
+
+void BuildOperationInfo ()
+{
+	InParams = new ArrayList ();
+	OutParams = new ArrayList ();
+	
+	Port port = FindPort (CurrentOperationBinding, null);
+	Binding binding = descriptions.GetBinding (port.Binding);
+	
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	OperationDocumentation = oper.Documentation;
+	if (OperationDocumentation == null || OperationDocumentation == "")
+		OperationDocumentation = "No additional remarks";
+	
+	foreach (OperationMessage opm in oper.Messages)
+	{
+		if (opm is OperationInput)
+			BuildParameters (InParams, opm);
+		else if (opm is OperationOutput)
+			BuildParameters (OutParams, opm);
+	}
+	
+	// Protocols supported by the operation
+	CurrentOperationProtocols = "";
+	WebServiceProtocols testProtocols = 0;
+	ArrayList prots = FindServiceProtocols (CurrentOperationName);
+	for (int n=0; n<prots.Count; n++) {
+		string prot = (string) prots [n];
+		if (n != 0) CurrentOperationProtocols += ", ";
+		CurrentOperationProtocols += prot;
+		if (prot == "HttpGet")
+			testProtocols |= WebServiceProtocols.HttpGet;
+		else if (prot == "HttpPost") {
+			testProtocols |= WebServiceProtocols.HttpPost;
+			if (Context.Request.IsLocal)
+				testProtocols |= WebServiceProtocols.HttpPostLocalhost;
+		}
+	}
+	CurrentOperationSupportsTest = (WebServicesSection.Current.EnabledProtocols & testProtocols) != 0;
+
+	// Operation format
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	if (obin != null)
+		CurrentOperationFormat = GetOperationFormat (obin);
+
+	InputParamsRepeater.DataSource = InParams;
+	InputFormParamsRepeater.DataSource = InParams;
+	OutputParamsRepeater.DataSource = OutParams;
+}
+
+void BuildParameters (ArrayList list, OperationMessage opm)
+{
+	Message msg = descriptions.GetMessage (opm.Message);
+	if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+	{
+		MessagePart part = msg.Parts[0];
+		XmlSchemaComplexType ctype;
+		if (part.Element == XmlQualifiedName.Empty)
+		{
+			ctype = (XmlSchemaComplexType) schemas.Find (part.Type, typeof(XmlSchemaComplexType));
+		}
+		else
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+			ctype = (XmlSchemaComplexType) elem.SchemaType;
+		}
+		XmlSchemaSequence seq = ctype.Particle as XmlSchemaSequence;
+		if (seq == null) return;
+		
+		foreach (XmlSchemaObject ob in seq.Items)
+		{
+			Parameter p = new Parameter();
+			p.Description = "No additional remarks";
+			
+			if (ob is XmlSchemaElement)
+			{
+				XmlSchemaElement selem = GetRefElement ((XmlSchemaElement)ob);
+				p.Name = selem.Name;
+				p.Type = selem.SchemaTypeName.Name;
+			}
+			else
+			{
+				p.Name = "Unknown";
+				p.Type = "Unknown";
+			}
+			list.Add (p);
+		}
+	}
+	else
+	{
+		foreach (MessagePart part in msg.Parts)
+		{
+			Parameter p = new Parameter ();
+			p.Description = "No additional remarks";
+			p.Name = part.Name;
+			if (part.Element == XmlQualifiedName.Empty)
+				p.Type = part.Type.Name;
+			else
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (part.Element, typeof(XmlSchemaElement));
+				p.Type = elem.SchemaTypeName.Name;
+			}
+			list.Add (p);
+		}
+	}
+}
+
+string GetOperationFormat (OperationBinding obin)
+{
+	string format = "";
+	SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+	if (sob != null) {
+		format = sob.Style.ToString ();
+		SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+		if (sbb != null)
+			format += " / " + sbb.Use;
+	}
+	return format;
+}
+
+XmlSchemaElement GetRefElement (XmlSchemaElement elem)
+{
+	if (!elem.RefName.IsEmpty)
+		return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+	else
+		return elem;
+}
+
+ArrayList FindServiceProtocols(string operName)
+{
+	ArrayList table = new ArrayList ();
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		string prot = null;
+		Binding bin = descriptions.GetBinding (port.Binding);
+		if (bin.Extensions.Find (typeof(SoapBinding)) != null)
+			prot = "Soap";
+		else 
+		{
+			HttpBinding hb = (HttpBinding) bin.Extensions.Find (typeof(HttpBinding));
+			if (hb != null && hb.Verb == "POST") prot = "HttpPost";
+			else if (hb != null && hb.Verb == "GET") prot = "HttpGet";
+		}
+		
+		if (prot != null && operName != null)
+		{
+			if (FindOperation (bin, operName) == null)
+				prot = null;
+		}
+
+		if (prot != null && !table.Contains (prot))
+			table.Add (prot);
+	}
+	return table;
+}
+
+Port FindPort (string portName, string protocol)
+{
+	Service service = descriptions[0].Services[0];
+	foreach (Port port in service.Ports)
+	{
+		if (portName == null)
+		{
+			Binding binding = descriptions.GetBinding (port.Binding);
+			if (GetProtocol (binding) == protocol) return port;
+		}
+		else if (port.Name == portName)
+			return port;
+	}
+	return null;
+}
+
+string GetProtocol (Binding binding)
+{
+	if (binding.Extensions.Find (typeof(SoapBinding)) != null) return "Soap";
+	HttpBinding hb = (HttpBinding) binding.Extensions.Find (typeof(HttpBinding));
+	if (hb == null) return "";
+	if (hb.Verb == "POST") return "HttpPost";
+	if (hb.Verb == "GET") return "HttpGet";
+	return "";
+}
+
+
+Operation FindOperation (PortType portType, string name)
+{
+	foreach (Operation oper in portType.Operations) {
+		if (oper.Messages.Input.Name != null) {
+			if (oper.Messages.Input.Name == name) return oper;
+		}
+		else
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+OperationBinding FindOperation (Binding binding, string name)
+{
+	foreach (OperationBinding oper in binding.Operations) {
+		if (oper.Input.Name != null) {
+			if (oper.Input.Name == name) return oper;
+		}
+		else 
+			if (oper.Name == name) return oper;
+	}
+		
+	return null;
+}
+
+string FormatBindingName (string name)
+{
+	if (name == DefaultBinding) return "Methods";
+	else return "Methods for binding<br>" + name;
+}
+
+string GetOpName (object op)
+{
+	OperationBinding ob = op as OperationBinding;
+	if (ob == null) return "";
+	if (ob.Input.Name != null) return ob.Input.Name;
+	else return ob.Name;
+}
+
+bool HasFormResult
+{
+	get { return Request.QueryString ["ext"] == "testform"; }
+}
+
+class NoCheckCertificatePolicy : ICertificatePolicy {
+	public bool CheckValidationResult (ServicePoint a, X509Certificate b, WebRequest c, int d)
+	{
+		return true;
+	}
+}
+
+string GetOrPost ()
+{
+	return (CurrentOperationProtocols.IndexOf ("HttpGet") >= 0) ? "GET" : "POST";
+}
+
+string GetQS ()
+{
+	bool fill = false;
+	string qs = "";
+	NameValueCollection query_string = Request.QueryString;
+	for (int n = 0; n < query_string.Count; n++) {
+		if (fill) {
+			if (qs != "") qs += "&";
+			qs += query_string.GetKey(n) + "=" + Server.UrlEncode (query_string [n]);
+		}
+		if (query_string.GetKey(n) == "ext") fill = true;
+	}
+
+	return qs;
+}
+
+string GetTestResultUrl ()
+{ 
+	if (!HasFormResult) return "";
+	
+	string location = null;
+	ServiceDescription desc = descriptions [0];
+	Service service = desc.Services[0];
+	foreach (Port port in service.Ports)
+		if (port.Name == CurrentOperationBinding)
+		{
+			SoapAddressBinding sbi = (SoapAddressBinding) port.Extensions.Find (typeof(SoapAddressBinding));
+			if (sbi != null)
+				location = sbi.Location;
+		}
+
+	if (location == null) 
+		return "Could not locate web service";
+	
+	return location + "/" + CurrentOperationName;
+}
+
+string GenerateOperationMessages (string protocol, bool generateInput)
+{
+	if (!IsOperationSupported (protocol)) return "";
+	
+	Port port;
+	if (protocol != "Soap") port = FindPort (null, protocol);
+	else port = FindPort (CurrentOperationBinding, null);
+	
+	Binding binding = descriptions.GetBinding (port.Binding);
+	OperationBinding obin = FindOperation (binding, CurrentOperationName);
+	PortType portType = descriptions.GetPortType (binding.Type);
+	Operation oper = FindOperation (portType, CurrentOperationName);
+	
+	HtmlSampleGenerator sg = new HtmlSampleGenerator (descriptions, schemas);
+	string txt = sg.GenerateMessage (port, obin, oper, protocol, generateInput);
+	if (protocol == "Soap") txt = WrapText (txt,CodeTextColumns);
+	txt = ColorizeXml (txt);
+	txt = txt.Replace ("@placeholder!","<span class='literal-placeholder'>");
+	txt = txt.Replace ("!placeholder@","</span>");
+	return txt;
+}
+
+bool IsOperationSupported (string protocol)
+{
+	if (CurrentPage != "op" || CurrentTab != "msg") return false;
+	if (protocol == "Soap") return true;
+
+	Port port = FindPort (null, protocol);
+	if (port == null) return false;
+	Binding binding = descriptions.GetBinding (port.Binding);
+	if (binding == null) return false;
+	return FindOperation (binding, CurrentOperationName) != null;
+}
+
+//
+// Proxy code generation
+//
+
+string GetProxyCode ()
+{
+	CodeNamespace codeNamespace = new CodeNamespace();
+	CodeCompileUnit codeUnit = new CodeCompileUnit();
+	
+	codeUnit.Namespaces.Add (codeNamespace);
+
+	ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
+	
+	foreach (ServiceDescription sd in descriptions)
+		importer.AddServiceDescription(sd, null, null);
+
+	foreach (XmlSchema sc in schemas)
+		importer.Schemas.Add (sc);
+
+	importer.Import(codeNamespace, codeUnit);
+
+	string langId = Request.QueryString ["lang"];
+	if (langId == null || langId == "") langId = "cs";
+	CodeDomProvider provider = GetProvider (langId);
+	ICodeGenerator generator = provider.CreateGenerator();
+	CodeGeneratorOptions options = new CodeGeneratorOptions();
+	
+	StringWriter sw = new StringWriter ();
+	generator.GenerateCodeFromCompileUnit(codeUnit, sw, options);
+
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), langId);
+}
+
+public string CurrentLanguage
+{
+	get {
+		string langId = Request.QueryString ["lang"];
+		if (langId == null || langId == "") langId = "cs";
+		return langId;
+	}
+}
+
+public string CurrentProxytName
+{
+	get {
+		string lan = CurrentLanguage == "cs" ? "C#" : "Visual Basic";
+		return lan + " Client Proxy";
+	}
+}
+
+private CodeDomProvider GetProvider(string langId)
+{
+	switch (langId.ToUpper())
+	{
+		case "CS": return new CSharpCodeProvider();
+		case "VB": return new VBCodeProvider();
+		default: return null;
+	}
+}
+
+//
+// Document generation
+//
+class UTF8StringWriter : StringWriter {
+	public override Encoding Encoding {
+		get { return Encoding.UTF8; }
+	}
+}
+
+string GenerateDocument ()
+{
+	UTF8StringWriter sw = new UTF8StringWriter ();
+	
+	if (CurrentDocType == "wsdl")
+		descriptions [CurrentDocInd].Write (sw);
+	else if (CurrentDocType == "schema")
+		schemas [CurrentDocInd].Write (sw);
+		
+	return Colorize (WrapText (sw.ToString (), CodeTextColumns), "xml");
+}
+
+public string CurrentDocType
+{
+	get { return Request.QueryString ["doctype"] != null ? Request.QueryString ["doctype"] : "wsdl"; }
+}
+
+public int CurrentDocInd
+{
+	get { return Request.QueryString ["docind"] != null ? int.Parse (Request.QueryString ["docind"]) : 0; }
+}
+
+public string CurrentDocumentName
+{
+	get {
+		if (CurrentDocType == "wsdl")
+			return "WSDL document for namespace \"" + descriptions [CurrentDocInd].TargetNamespace + "\"";
+		else
+			return "Xml Schema for namespace \"" + schemas [CurrentDocInd].TargetNamespace + "\"";
+	}
+}
+
+//
+// Pages and tabs
+//
+
+bool firstTab = true;
+ArrayList disabledTabs = new ArrayList ();
+
+string CurrentTab
+{
+	get { return Request.QueryString["tab"] != null ? Request.QueryString["tab"] : "main" ; }
+}
+
+string CurrentPage
+{
+	get { return Request.QueryString["page"] != null ? Request.QueryString["page"] : "main" ; }
+}
+
+void WriteTabs ()
+{
+	if (CurrentOperationName != null)
+	{
+		WriteTab ("main","Overview");
+		WriteTab ("test","Test Form");
+		WriteTab ("msg","Message Layout");
+	}
+}
+
+void WriteTab (string id, string label)
+{
+	if (!firstTab) Response.Write("&nbsp;|&nbsp;");
+	firstTab = false;
+	
+	string cname = CurrentTab == id ? "tabLabelOn" : "tabLabelOff";
+	Response.Write ("<a href='" + PageName + "?" + GetPageContext(null) + GetDataContext() + "tab=" + id + "' style='text-decoration:none'>");
+	Response.Write ("<span class='" + cname + "'>" + label + "</span>");
+	Response.Write ("</a>");
+}
+
+string GetTabContext (string pag, string tab)
+{
+	if (tab == null) tab = CurrentTab;
+	if (pag == null) pag = CurrentPage;
+	if (pag != CurrentPage) tab = "main";
+	return "page=" + pag + "&tab=" + tab + "&"; 
+}
+
+string GetPageContext (string pag)
+{
+	if (pag == null) pag = CurrentPage;
+	return "page=" + pag + "&"; 
+}
+
+class Tab
+{
+	public string Id;
+	public string Label;
+}
+
+//
+// Syntax coloring
+//
+
+static string keywords_cs =
+	"(\\babstract\\b|\\bevent\\b|\\bnew\\b|\\bstruct\\b|\\bas\\b|\\bexplicit\\b|\\bnull\\b|\\bswitch\\b|\\bbase\\b|\\bextern\\b|" +
+	"\\bobject\\b|\\bthis\\b|\\bbool\\b|\\bfalse\\b|\\boperator\\b|\\bthrow\\b|\\bbreak\\b|\\bfinally\\b|\\bout\\b|\\btrue\\b|" +
+	"\\bbyte\\b|\\bfixed\\b|\\boverride\\b|\\btry\\b|\\bcase\\b|\\bfloat\\b|\\bparams\\b|\\btypeof\\b|\\bcatch\\b|\\bfor\\b|" +
+	"\\bprivate\\b|\\buint\\b|\\bchar\\b|\\bforeach\\b|\\bprotected\\b|\\bulong\\b|\\bchecked\\b|\\bgoto\\b|\\bpublic\\b|" +
+	"\\bunchecked\\b|\\bclass\\b|\\bif\\b|\\breadonly\\b|\\bunsafe\\b|\\bconst\\b|\\bimplicit\\b|\\bref\\b|\\bushort\\b|" +
+	"\\bcontinue\\b|\\bin\\b|\\breturn\\b|\\busing\\b|\\bdecimal\\b|\\bint\\b|\\bsbyte\\b|\\bvirtual\\b|\\bdefault\\b|" +
+	"\\binterface\\b|\\bsealed\\b|\\bvolatile\\b|\\bdelegate\\b|\\binternal\\b|\\bshort\\b|\\bvoid\\b|\\bdo\\b|\\bis\\b|" +
+	"\\bsizeof\\b|\\bwhile\\b|\\bdouble\\b|\\block\\b|\\bstackalloc\\b|\\belse\\b|\\blong\\b|\\bstatic\\b|\\benum\\b|" +
+	"\\bnamespace\\b|\\bstring\\b)";
+
+static string keywords_vb =
+	"(\\bAddHandler\\b|\\bAddressOf\\b|\\bAlias\\b|\\bAnd\\b|\\bAndAlso\\b|\\bAnsi\\b|\\bAs\\b|\\bAssembly\\b|" +
+	"\\bAuto\\b|\\bBoolean\\b|\\bByRef\\b|\\bByte\\b|\\bByVal\\b|\\bCall\\b|\\bCase\\b|\\bCatch\\b|" +
+	"\\bCBool\\b|\\bCByte\\b|\\bCChar\\b|\\bCDate\\b|\\bCDec\\b|\\bCDbl\\b|\\bChar\\b|\\bCInt\\b|" +
+	"\\bClass\\b|\\bCLng\\b|\\bCObj\\b|\\bConst\\b|\\bCShort\\b|\\bCSng\\b|\\bCStr\\b|\\bCType\\b|" +
+	"\\bDate\\b|\\bDecimal\\b|\\bDeclare\\b|\\bDefault\\b|\\bDelegate\\b|\\bDim\\b|\\bDirectCast\\b|\\bDo\\b|" +
+	"\\bDouble\\b|\\bEach\\b|\\bElse\\b|\\bElseIf\\b|\\bEnd\\b|\\bEnum\\b|\\bErase\\b|\\bError\\b|" +
+	"\\bEvent\\b|\\bExit\\b|\\bFalse\\b|\\bFinally\\b|\\bFor\\b|\\bFriend\\b|\\bFunction\\b|\\bGet\\b|" +
+	"\\bGetType\\b|\\bGoSub\\b|\\bGoTo\\b|\\bHandles\\b|\\bIf\\b|\\bImplements\\b|\\bImports\\b|\\bIn\\b|" +
+	"\\bInherits\\b|\\bInteger\\b|\\bInterface\\b|\\bIs\\b|\\bLet\\b|\\bLib\\b|\\bLike\\b|\\bLong\\b|" +
+	"\\bLoop\\b|\\bMe\\b|\\bMod\\b|\\bModule\\b|\\bMustInherit\\b|\\bMustOverride\\b|\\bMyBase\\b|\\bMyClass\\b|" +
+	"\\bNamespace\\b|\\bNew\\b|\\bNext\\b|\\bNot\\b|\\bNothing\\b|\\bNotInheritable\\b|\\bNotOverridable\\b|\\bObject\\b|" +
+	"\\bOn\\b|\\bOption\\b|\\bOptional\\b|\\bOr\\b|\\bOrElse\\b|\\bOverloads\\b|\\bOverridable\\b|\\bOverrides\\b|" +
+	"\\bParamArray\\b|\\bPreserve\\b|\\bPrivate\\b|\\bProperty\\b|\\bProtected\\b|\\bPublic\\b|\\bRaiseEvent\\b|\\bReadOnly\\b|" +
+	"\\bReDim\\b|\\bREM\\b|\\bRemoveHandler\\b|\\bResume\\b|\\bReturn\\b|\\bSelect\\b|\\bSet\\b|\\bShadows\\b|" +
+	"\\bShared\\b|\\bShort\\b|\\bSingle\\b|\\bStatic\\b|\\bStep\\b|\\bStop\\b|\\bString\\b|\\bStructure\\b|" +
+	"\\bSub\\b|\\bSyncLock\\b|\\bThen\\b|\\bThrow\\b|\\bTo\\b|\\bTrue\\b|\\bTry\\b|\\bTypeOf\\b|" +
+	"\\bUnicode\\b|\\bUntil\\b|\\bVariant\\b|\\bWhen\\b|\\bWhile\\b|\\bWith\\b|\\bWithEvents\\b|\\bWriteOnly\\b|\\bXor\\b)";
+
+string Colorize (string text, string lang)
+{
+	if (lang == "xml") return ColorizeXml (text);
+	else if (lang == "cs") return ColorizeCs (text);
+	else if (lang == "vb") return ColorizeVb (text);
+	else return text;
+}
+
+string ColorizeXml (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	Regex re = new Regex ("\r\n|\r|\n");
+	text = re.Replace (text, "_br_");
+	
+	re = new Regex ("<\\s*(\\/?)\\s*([\\s\\S]*?)\\s*(\\/?)\\s*>");
+	text = re.Replace (text,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = new Regex ("\\{(\\w*):([\\s\\S]*?)\\}");
+	text = re.Replace (text,"<span style='color:$1'>$2</span>");
+
+	re = new Regex ("\"(.*?)\"");
+	text = re.Replace (text,"\"<span style='color:purple'>$1</span>\"");
+
+	
+	text = text.Replace ("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("_br_", "<br>");
+	return text;
+}
+
+string ColorizeCs (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+
+	text = text.Replace ("<", "&lt;");
+	text = text.Replace (">", "&gt;");
+
+	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("//(((.(?!\"</span>))|\"(((?!\").)*)\"</span>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_cs);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	
+	return text;
+}
+
+string ColorizeVb (string text)
+{
+	text = text.Replace (" ", "&nbsp;");
+	
+/*	Regex re = new Regex ("\"((((?!\").)|\\\")*?)\"");
+	text = re.Replace (text,"<span style='color:purple'>\"$1\"</span>");
+
+	re = new Regex ("'(((.(?!\"\\<\\/span\\>))|\"(((?!\").)*)\"\\<\\/span\\>)*)(\r|\n|\r\n)");
+	text = re.Replace (text,"<span style='color:green'>//$1</span><br/>");
+	
+	re = new Regex (keywords_vb);
+	text = re.Replace (text,"<span style='color:blue'>$1</span>");
+*/	
+	text = text.Replace ("\t","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	text = text.Replace ("\n","<br/>");
+	return text;
+}
+
+//
+// Helper methods and classes
+//
+
+string GetDataContext ()
+{
+	return "op=" + CurrentOperationName + "&bnd=" + CurrentOperationBinding + "&";
+}
+
+string GetOptionSel (string v1, string v2)
+{
+	string op = "<option ";
+	if (v1 == v2) op += "selected ";
+	return op + "value='" + v1 + "'>";
+}
+
+string WrapText (string text, int maxChars)
+{
+	text =  text.Replace(" />","/>");
+	
+	string linspace = null;
+	int lincount = 0;
+	int breakpos = 0;
+	int linstart = 0;
+	bool inquotes = false;
+	char lastc = ' ';
+	string sublineIndent = "";
+	System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+	for (int n=0; n<text.Length; n++)
+	{
+		char c = text [n];
+		
+		if (c=='\r' || c=='\n' || n==text.Length-1)
+		{
+			sb.Append (linspace + sublineIndent + text.Substring (linstart, n-linstart+1));
+			linspace = null;
+			lincount = 0;
+			linstart = n+1;
+			breakpos = linstart;
+			sublineIndent = "";
+			lastc = c;
+			continue;
+		}
+		
+		if (lastc==',' || lastc=='(')
+		{
+			if (!inquotes) breakpos = n;
+		}
+		
+		if (lincount > maxChars && breakpos >= linstart)
+		{
+			if (linspace != null)
+				sb.Append (linspace + sublineIndent);
+			sb.Append (text.Substring (linstart, breakpos-linstart));
+			sb.Append ("\n");
+			sublineIndent = "     ";
+			lincount = linspace.Length + sublineIndent.Length + (n-breakpos);
+			linstart = breakpos;
+		}
+		
+		if (c==' ' || c=='\t')
+		{
+			if (!inquotes)
+				breakpos = n;
+		}
+		else if (c=='"')
+		{
+			inquotes = !inquotes;
+		}
+		else 
+			if (linspace == null) {
+				linspace = text.Substring (linstart, n-linstart);
+				linstart = n;
+			}
+
+		lincount++;
+		lastc = c;
+	}
+	return sb.ToString ();
+}
+
+class Parameter
+{
+	string name;
+	string type;
+	string description;
+
+	public string Name { get { return name; } set { name = value; } }
+	public string Type { get { return type; } set { type = value; } }
+	public string Description { get { return description; } set { description = value; } }
+}
+
+public class HtmlSampleGenerator: SampleGenerator
+{
+	public HtmlSampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+	: base (services, schemas)
+	{
+	}
+		
+	protected override string GetLiteral (string s)
+	{
+		return "@placeholder!" + s + "!placeholder@";
+	}
+}
+
+
+	public class SampleGenerator
+	{
+		protected ServiceDescriptionCollection descriptions;
+		protected XmlSchemas schemas;
+		XmlSchemaElement anyElement;
+		ArrayList queue;
+		SoapBindingUse currentUse;
+		XmlDocument document = new XmlDocument ();
+		
+		static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);
+		static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array","http://schemas.xmlsoap.org/soap/encoding/");
+		static readonly XmlQualifiedName arrayTypeRefName = new XmlQualifiedName ("arrayType","http://schemas.xmlsoap.org/soap/encoding/");
+		const string SoapEnvelopeNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
+		const string WsdlNamespace = "http://schemas.xmlsoap.org/wsdl/";
+		const string SoapEncodingNamespace = "http://schemas.xmlsoap.org/soap/encoding/";
+		
+		class EncodedType
+		{
+			public EncodedType (string ns, XmlSchemaElement elem) { Namespace = ns; Element = elem; }
+			public string Namespace;
+			public XmlSchemaElement Element;
+		}
+
+		public SampleGenerator (ServiceDescriptionCollection services, XmlSchemas schemas)
+		{
+			descriptions = services;
+			this.schemas = schemas;
+			queue = new ArrayList ();
+		}
+		
+		public string GenerateMessage (Port port, OperationBinding obin, Operation oper, string protocol, bool generateInput)
+		{
+			OperationMessage msg = null;
+			foreach (OperationMessage opm in oper.Messages)
+			{
+				if (opm is OperationInput && generateInput) msg = opm;
+				else if (opm is OperationOutput && !generateInput) msg = opm;
+			}
+			if (msg == null) return null;
+			
+			switch (protocol) {
+				case "Soap": return GenerateHttpSoapMessage (port, obin, oper, msg);
+				case "HttpGet": return GenerateHttpGetMessage (port, obin, oper, msg);
+				case "HttpPost": return GenerateHttpPostMessage (port, obin, oper, msg);
+			}
+			return "Unknown protocol";
+		}
+		
+		public string GenerateHttpSoapMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				SoapAddressBinding sab = port.Extensions.Find (typeof(SoapAddressBinding)) as SoapAddressBinding;
+				SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+				req += "POST " + new Uri (sab.Location).AbsolutePath + "\n";
+				req += "SOAPAction: " + sob.SoapAction + "\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			}
+			
+			req += GenerateSoapMessage (obin, oper, msg);
+			return req;
+		}
+		
+		public string GenerateHttpGetMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location + "?" + BuildQueryString (msg);
+				req += "GET " + location + "\n";
+				req += "Host: " + GetLiteral ("string");
+			}
+			else
+			{
+				req += "HTTP/1.0 200 OK\n";
+				req += "Content-Type: text/xml; charset=utf-8\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n\n";
+			
+				MimeXmlBinding mxb = (MimeXmlBinding) obin.Output.Extensions.Find (typeof(MimeXmlBinding)) as MimeXmlBinding;
+				if (mxb == null) return req;
+				
+				Message message = descriptions.GetMessage (msg.Message);
+				XmlQualifiedName ename = null;
+				foreach (MessagePart part in message.Parts)
+					if (part.Name == mxb.Part) ename = part.Element;
+					
+				if (ename == null) return req + GetLiteral("string");
+				
+				StringWriter sw = new StringWriter ();
+				XmlTextWriter xtw = new XmlTextWriter (sw);
+				xtw.Formatting = Formatting.Indented;
+				currentUse = SoapBindingUse.Literal;
+				WriteRootElementSample (xtw, ename);
+				xtw.Close ();
+				req += sw.ToString ();
+			}
+			
+			return req;
+		}
+		
+		public string GenerateHttpPostMessage (Port port, OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			string req = "";
+			
+			if (msg is OperationInput)
+			{
+				HttpAddressBinding sab = port.Extensions.Find (typeof(HttpAddressBinding)) as HttpAddressBinding;
+				HttpOperationBinding sob = obin.Extensions.Find (typeof(HttpOperationBinding)) as HttpOperationBinding;
+				string location = new Uri (sab.Location).AbsolutePath + sob.Location;
+				req += "POST " + location + "\n";
+				req += "Content-Type: application/x-www-form-urlencoded\n";
+				req += "Content-Length: " + GetLiteral ("string") + "\n";
+				req += "Host: " + GetLiteral ("string") + "\n\n";
+				req += BuildQueryString (msg);
+			}
+			else return GenerateHttpGetMessage (port, obin, oper, msg);
+			
+			return req;
+		}
+		
+		string BuildQueryString (OperationMessage opm)
+		{
+			string s = "";
+			Message msg = descriptions.GetMessage (opm.Message);
+			foreach (MessagePart part in msg.Parts)
+			{
+				if (s.Length != 0) s += "&";
+				s += part.Name + "=" + GetLiteral (part.Type.Name);
+			}
+			return s;
+		}
+		
+		public string GenerateSoapMessage (OperationBinding obin, Operation oper, OperationMessage msg)
+		{
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			SoapBindingStyle style = (sob != null) ? sob.Style : SoapBindingStyle.Document;
+			
+			MessageBinding msgbin = (msg is OperationInput) ? (MessageBinding) obin.Input : (MessageBinding)obin.Output;
+			SoapBodyBinding sbb = msgbin.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+			SoapBindingUse bodyUse = (sbb != null) ? sbb.Use : SoapBindingUse.Literal;
+			
+			StringWriter sw = new StringWriter ();
+			XmlTextWriter xtw = new XmlTextWriter (sw);
+			xtw.Formatting = Formatting.Indented;
+			
+			xtw.WriteStartDocument ();
+			xtw.WriteStartElement ("soap", "Envelope", SoapEnvelopeNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
+			xtw.WriteAttributeString ("xmlns", "xsd", null, XmlSchema.Namespace);
+			
+			if (bodyUse == SoapBindingUse.Encoded) 
+			{
+				xtw.WriteAttributeString ("xmlns", "soapenc", null, SoapEncodingNamespace);
+				xtw.WriteAttributeString ("xmlns", "tns", null, msg.Message.Namespace);
+			}
+
+			// Serialize headers
+			
+			bool writtenHeader = false;
+			foreach (object ob in msgbin.Extensions)
+			{
+				SoapHeaderBinding hb = ob as SoapHeaderBinding;
+				if (hb == null) continue;
+				
+				if (!writtenHeader) {
+					xtw.WriteStartElement ("soap", "Header", SoapEnvelopeNamespace);
+					writtenHeader = true;
+				}
+				
+				WriteHeader (xtw, hb);
+			}
+			
+			if (writtenHeader)
+				xtw.WriteEndElement ();
+
+			// Serialize body
+			xtw.WriteStartElement ("soap", "Body", SoapEnvelopeNamespace);
+			
+			currentUse = bodyUse;
+			WriteBody (xtw, oper, msg, sbb, style);
+			
+			xtw.WriteEndElement ();
+			xtw.WriteEndElement ();
+			xtw.Close ();
+			return sw.ToString ();
+		}
+		
+		void WriteHeader (XmlTextWriter xtw, SoapHeaderBinding header)
+		{
+			Message msg = descriptions.GetMessage (header.Message);
+			if (msg == null) throw new InvalidOperationException ("Message " + header.Message + " not found");
+			MessagePart part = msg.Parts [header.Part];
+			if (part == null) throw new InvalidOperationException ("Message part " + header.Part + " not found in message " + header.Message);
+
+			currentUse = header.Use;
+			
+			if (currentUse == SoapBindingUse.Literal)
+				WriteRootElementSample (xtw, part.Element);
+			else
+				WriteTypeSample (xtw, part.Type);
+		}
+		
+		void WriteBody (XmlTextWriter xtw, Operation oper, OperationMessage opm, SoapBodyBinding sbb, SoapBindingStyle style)
+		{
+			Message msg = descriptions.GetMessage (opm.Message);
+			if (msg.Parts.Count > 0 && msg.Parts[0].Name == "parameters")
+			{
+				MessagePart part = msg.Parts[0];
+				if (part.Element == XmlQualifiedName.Empty)
+					WriteTypeSample (xtw, part.Type);
+				else
+					WriteRootElementSample (xtw, part.Element);
+			}
+			else
+			{
+				string elemName = oper.Name;
+				string ns = "";
+				if (opm is OperationOutput) elemName += "Response";
+				
+				if (style == SoapBindingStyle.Rpc) {
+					xtw.WriteStartElement (elemName, sbb.Namespace);
+					ns = sbb.Namespace;
+				}
+					
+				foreach (MessagePart part in msg.Parts)
+				{
+					if (part.Element == XmlQualifiedName.Empty)
+					{
+						XmlSchemaElement elem = new XmlSchemaElement ();
+						elem.SchemaTypeName = part.Type;
+						elem.Name = part.Name;
+						WriteElementSample (xtw, ns, elem);
+					}
+					else
+						WriteRootElementSample (xtw, part.Element);
+				}
+				
+				if (style == SoapBindingStyle.Rpc)
+					xtw.WriteEndElement ();
+			}
+			WriteQueuedTypeSamples (xtw);
+		}
+		
+		void WriteRootElementSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaElement elem = (XmlSchemaElement) schemas.Find (qname, typeof(XmlSchemaElement));
+			if (elem == null) throw new InvalidOperationException ("Element not found: " + qname);
+			WriteElementSample (xtw, qname.Namespace, elem);
+		}
+
+		void WriteElementSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			bool sharedAnnType = false;
+			XmlQualifiedName root;
+			
+			if (!elem.RefName.IsEmpty) {
+				XmlSchemaElement refElem = FindRefElement (elem);
+				if (refElem == null) throw new InvalidOperationException ("Global element not found: " + elem.RefName);
+				root = elem.RefName;
+				elem = refElem;
+				sharedAnnType = true;
+			}
+			else
+				root = new XmlQualifiedName (elem.Name, ns);
+			
+			if (!elem.SchemaTypeName.IsEmpty)
+			{
+				XmlSchemaComplexType st = FindComplexTyype (elem.SchemaTypeName);
+				if (st != null) 
+					WriteComplexTypeSample (xtw, st, root);
+				else
+				{
+					xtw.WriteStartElement (root.Name, root.Namespace);
+					if (currentUse == SoapBindingUse.Encoded) 
+						xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, elem.SchemaTypeName));
+					xtw.WriteString (GetLiteral (FindBuiltInType (elem.SchemaTypeName)));
+					xtw.WriteEndElement ();
+				}
+			}
+			else if (elem.SchemaType == null)
+			{
+				xtw.WriteStartElement ("any");
+				xtw.WriteEndElement ();
+			}
+			else
+				WriteComplexTypeSample (xtw, (XmlSchemaComplexType) elem.SchemaType, root);
+		}
+		
+		void WriteTypeSample (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			if (ctype != null) {
+				WriteComplexTypeSample (xtw, ctype, qname);
+				return;
+			}
+			
+			XmlSchemaSimpleType stype = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (stype != null) {
+				WriteSimpleTypeSample (xtw, stype);
+				return;
+			}
+			
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+			throw new InvalidOperationException ("Type not found: " + qname);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName)
+		{
+			WriteComplexTypeSample (xtw, stype, rootName, -1);
+		}
+		
+		void WriteComplexTypeSample (XmlTextWriter xtw, XmlSchemaComplexType stype, XmlQualifiedName rootName, int id)
+		{
+			string ns = rootName.Namespace;
+			
+			if (rootName.Name.IndexOf ("[]") != -1) rootName = arrayType;
+			
+			if (currentUse == SoapBindingUse.Encoded) {
+				string pref = xtw.LookupPrefix (rootName.Namespace);
+				if (pref == null) pref = "q1";
+				xtw.WriteStartElement (pref, rootName.Name, rootName.Namespace);
+				ns = "";
+			}
+			else
+				xtw.WriteStartElement (rootName.Name, rootName.Namespace);
+			
+			if (id != -1)
+			{
+				xtw.WriteAttributeString ("id", "id" + id);
+				if (rootName != arrayType)
+					xtw.WriteAttributeString ("type", XmlSchema.InstanceNamespace, GetQualifiedNameString (xtw, rootName));
+			}
+			
+			WriteComplexTypeAttributes (xtw, stype);
+			WriteComplexTypeElements (xtw, ns, stype);
+			
+			xtw.WriteEndElement ();
+		}
+		
+		void WriteComplexTypeAttributes (XmlTextWriter xtw, XmlSchemaComplexType stype)
+		{
+			WriteAttributes (xtw, stype.Attributes, stype.AnyAttribute);
+		}
+
+		Dictionary<XmlSchemaComplexType,int> recursed_types = new Dictionary<XmlSchemaComplexType,int> ();
+		void WriteComplexTypeElements (XmlTextWriter xtw, string ns, XmlSchemaComplexType stype)
+		{
+			int prev = 0;
+			if (recursed_types.ContainsKey (stype))
+				prev = recursed_types [stype];
+
+			if (prev > 1)
+				return;
+			recursed_types [stype] = ++prev;
+
+			if (stype.Particle != null)
+				WriteParticleComplexContent (xtw, ns, stype.Particle);
+			else
+			{
+				if (stype.ContentModel is XmlSchemaSimpleContent)
+					WriteSimpleContent (xtw, (XmlSchemaSimpleContent)stype.ContentModel);
+				else if (stype.ContentModel is XmlSchemaComplexContent)
+					WriteComplexContent (xtw, ns, (XmlSchemaComplexContent)stype.ContentModel);
+			}
+			prev = recursed_types [stype];
+			recursed_types [stype] = --prev;
+		}
+
+		void WriteAttributes (XmlTextWriter xtw, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat)
+		{
+			foreach (XmlSchemaObject at in atts)
+			{
+				if (at is XmlSchemaAttribute)
+				{
+					string ns;
+					XmlSchemaAttribute attr = (XmlSchemaAttribute)at;
+					XmlSchemaAttribute refAttr = attr;
+					
+					// refAttr.Form; TODO
+					
+					if (!attr.RefName.IsEmpty) {
+						refAttr = FindRefAttribute (attr.RefName);
+						if (refAttr == null) throw new InvalidOperationException ("Global attribute not found: " + attr.RefName);
+					}
+					
+					string val;
+					if (!refAttr.SchemaTypeName.IsEmpty) val = FindBuiltInType (refAttr.SchemaTypeName);
+					else val = FindBuiltInType ((XmlSchemaSimpleType) refAttr.SchemaType);
+					
+					xtw.WriteAttributeString (refAttr.Name, val);
+				}
+				else if (at is XmlSchemaAttributeGroupRef)
+				{
+					XmlSchemaAttributeGroupRef gref = (XmlSchemaAttributeGroupRef)at;
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					WriteAttributes (xtw, grp.Attributes, grp.AnyAttribute);
+				}
+			}
+			
+			if (anyat != null)
+				xtw.WriteAttributeString ("custom-attribute","value");
+		}
+		
+		void WriteParticleComplexContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle)
+		{
+			WriteParticleContent (xtw, ns, particle, false);
+		}
+		
+		void WriteParticleContent (XmlTextWriter xtw, string ns, XmlSchemaParticle particle, bool multiValue)
+		{
+			if (particle is XmlSchemaGroupRef)
+				particle = GetRefGroupParticle ((XmlSchemaGroupRef)particle);
+
+			if (particle.MaxOccurs > 1) multiValue = true;
+			
+			if (particle is XmlSchemaSequence) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaSequence)particle).Items, multiValue);
+			}
+			else if (particle is XmlSchemaChoice) {
+				if (((XmlSchemaChoice)particle).Items.Count == 1)
+					WriteSequenceContent (xtw, ns, ((XmlSchemaChoice)particle).Items, multiValue);
+				else
+					WriteChoiceContent (xtw, ns, (XmlSchemaChoice)particle, multiValue);
+			}
+			else if (particle is XmlSchemaAll) {
+				WriteSequenceContent (xtw, ns, ((XmlSchemaAll)particle).Items, multiValue);
+			}
+		}
+
+		void WriteSequenceContent (XmlTextWriter xtw, string ns, XmlSchemaObjectCollection items, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+		
+		void WriteContentItem (XmlTextWriter xtw, string ns, XmlSchemaObject item, bool multiValue)
+		{
+			if (item is XmlSchemaGroupRef)
+				item = GetRefGroupParticle ((XmlSchemaGroupRef)item);
+					
+			if (item is XmlSchemaElement)
+			{
+				XmlSchemaElement elem = (XmlSchemaElement) item;
+				XmlSchemaElement refElem;
+				if (!elem.RefName.IsEmpty) refElem = FindRefElement (elem);
+				else refElem = elem;
+
+				int num = (elem.MaxOccurs == 1 && !multiValue) ? 1 : 2;
+				for (int n=0; n<num; n++)
+				{
+					if (currentUse == SoapBindingUse.Literal)
+						WriteElementSample (xtw, ns, refElem);
+					else
+						WriteRefTypeSample (xtw, ns, refElem);
+				}
+			}
+			else if (item is XmlSchemaAny)
+			{
+				xtw.WriteString (GetLiteral ("xml"));
+			}
+			else if (item is XmlSchemaParticle) {
+				WriteParticleContent (xtw, ns, (XmlSchemaParticle)item, multiValue);
+			}
+		}
+		
+		void WriteChoiceContent (XmlTextWriter xtw, string ns, XmlSchemaChoice choice, bool multiValue)
+		{
+			foreach (XmlSchemaObject item in choice.Items)
+				WriteContentItem (xtw, ns, item, multiValue);
+		}
+
+		void WriteSimpleContent (XmlTextWriter xtw, XmlSchemaSimpleContent content)
+		{
+			XmlSchemaSimpleContentExtension ext = content.Content as XmlSchemaSimpleContentExtension;
+			if (ext != null)
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				
+			XmlQualifiedName qname = GetContentBaseType (content.Content);
+			xtw.WriteString (GetLiteral (FindBuiltInType (qname)));
+		}
+
+		string FindBuiltInType (XmlQualifiedName qname)
+		{
+			if (qname.Namespace == XmlSchema.Namespace)
+				return qname.Name;
+
+			XmlSchemaComplexType ct = FindComplexTyype (qname);
+			if (ct != null)
+			{
+				XmlSchemaSimpleContent sc = ct.ContentModel as XmlSchemaSimpleContent;
+				if (sc == null) throw new InvalidOperationException ("Invalid schema");
+				return FindBuiltInType (GetContentBaseType (sc.Content));
+			}
+			
+			XmlSchemaSimpleType st = (XmlSchemaSimpleType) schemas.Find (qname, typeof(XmlSchemaSimpleType));
+			if (st != null)
+				return FindBuiltInType (st);
+
+			throw new InvalidOperationException ("Definition of type " + qname + " not found");
+		}
+
+		string FindBuiltInType (XmlSchemaSimpleType st)
+		{
+			if (st.Content is XmlSchemaSimpleTypeRestriction) {
+				return FindBuiltInType (GetContentBaseType (st.Content));
+			}
+			else if (st.Content is XmlSchemaSimpleTypeList) {
+				string s = FindBuiltInType (GetContentBaseType (st.Content));
+				return s + " " + s + " ...";
+			}
+			else if (st.Content is XmlSchemaSimpleTypeUnion)
+			{
+				//Check if all types of the union are equal. If not, then will use anyType.
+				XmlSchemaSimpleTypeUnion uni = (XmlSchemaSimpleTypeUnion) st.Content;
+				string utype = null;
+
+				// Anonymous types are unique
+				if (uni.BaseTypes.Count != 0 && uni.MemberTypes.Length != 0)
+					return "string";
+
+				foreach (XmlQualifiedName mt in uni.MemberTypes)
+				{
+					string qn = FindBuiltInType (mt);
+					if (utype != null && qn != utype) return "string";
+					else utype = qn;
+				}
+				return utype;
+			}
+			else
+				return "string";
+		}
+		
+
+		XmlQualifiedName GetContentBaseType (XmlSchemaObject ob)
+		{
+			if (ob is XmlSchemaSimpleContentExtension)
+				return ((XmlSchemaSimpleContentExtension)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleContentRestriction)
+				return ((XmlSchemaSimpleContentRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeRestriction)
+				return ((XmlSchemaSimpleTypeRestriction)ob).BaseTypeName;
+			else if (ob is XmlSchemaSimpleTypeList)
+				return ((XmlSchemaSimpleTypeList)ob).ItemTypeName;
+			else
+				return null;
+		}
+
+		void WriteComplexContent (XmlTextWriter xtw, string ns, XmlSchemaComplexContent content)
+		{
+			XmlQualifiedName qname;
+
+			XmlSchemaComplexContentExtension ext = content.Content as XmlSchemaComplexContentExtension;
+			if (ext != null) qname = ext.BaseTypeName;
+			else {
+				XmlSchemaComplexContentRestriction rest = (XmlSchemaComplexContentRestriction)content.Content;
+				qname = rest.BaseTypeName;
+				if (qname == arrayType) {
+					ParseArrayType (rest, out qname);
+					XmlSchemaElement elem = new XmlSchemaElement ();
+					elem.Name = "Item";
+					elem.SchemaTypeName = qname;
+					
+					xtw.WriteAttributeString ("arrayType", SoapEncodingNamespace, qname.Name + "[2]");
+					WriteContentItem (xtw, ns, elem, true);
+					return;
+				}
+			}
+			
+			// Add base map members to this map
+			XmlSchemaComplexType ctype = FindComplexTyype (qname);
+			WriteComplexTypeAttributes (xtw, ctype);
+			
+			if (ext != null) {
+				// Add the members of this map
+				WriteAttributes (xtw, ext.Attributes, ext.AnyAttribute);
+				if (ext.Particle != null)
+					WriteParticleComplexContent (xtw, ns, ext.Particle);
+			}
+			
+			WriteComplexTypeElements (xtw, ns, ctype);
+		}
+		
+		void ParseArrayType (XmlSchemaComplexContentRestriction rest, out XmlQualifiedName qtype)
+		{
+			XmlSchemaAttribute arrayTypeAt = FindArrayAttribute (rest.Attributes);
+			XmlAttribute[] uatts = arrayTypeAt.UnhandledAttributes;
+			if (uatts == null || uatts.Length == 0) throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			XmlAttribute xat = null;
+			foreach (XmlAttribute at in uatts)
+				if (at.LocalName == "arrayType" && at.NamespaceURI == WsdlNamespace)
+					{ xat = at; break; }
+			
+			if (xat == null) 
+				throw new InvalidOperationException ("arrayType attribute not specified in array declaration");
+			
+			string arrayType = xat.Value;
+			string type, ns;
+			int i = arrayType.LastIndexOf (":");
+			if (i == -1) ns = "";
+			else ns = arrayType.Substring (0,i);
+			
+			int j = arrayType.IndexOf ("[", i+1);
+			if (j == -1) throw new InvalidOperationException ("Cannot parse WSDL array type: " + arrayType);
+			type = arrayType.Substring (i+1);
+			type = type.Substring (0, type.Length-2);
+			
+			qtype = new XmlQualifiedName (type, ns);
+		}
+		
+		XmlSchemaAttribute FindArrayAttribute (XmlSchemaObjectCollection atts)
+		{
+			foreach (object ob in atts)
+			{
+				XmlSchemaAttribute att = ob as XmlSchemaAttribute;
+				if (att != null && att.RefName == arrayTypeRefName) return att;
+				
+				XmlSchemaAttributeGroupRef gref = ob as XmlSchemaAttributeGroupRef;
+				if (gref != null)
+				{
+					XmlSchemaAttributeGroup grp = (XmlSchemaAttributeGroup) schemas.Find (gref.RefName, typeof(XmlSchemaAttributeGroup));
+					att = FindArrayAttribute (grp.Attributes);
+					if (att != null) return att;
+				}
+			}
+			return null;
+		}
+		
+		void WriteSimpleTypeSample (XmlTextWriter xtw, XmlSchemaSimpleType stype)
+		{
+			xtw.WriteString (GetLiteral (FindBuiltInType (stype)));
+		}
+		
+		XmlSchemaParticle GetRefGroupParticle (XmlSchemaGroupRef refGroup)
+		{
+			XmlSchemaGroup grp = (XmlSchemaGroup) schemas.Find (refGroup.RefName, typeof (XmlSchemaGroup));
+			return grp.Particle;
+		}
+
+		XmlSchemaElement FindRefElement (XmlSchemaElement elem)
+		{
+			if (elem.RefName.Namespace == XmlSchema.Namespace)
+			{
+				if (anyElement != null) return anyElement;
+				anyElement = new XmlSchemaElement ();
+				anyElement.Name = "any";
+				anyElement.SchemaTypeName = anyType;
+				return anyElement;
+			}
+			return (XmlSchemaElement) schemas.Find (elem.RefName, typeof(XmlSchemaElement));
+		}
+		
+		XmlSchemaAttribute FindRefAttribute (XmlQualifiedName refName)
+		{
+			if (refName.Namespace == XmlSchema.Namespace)
+			{
+				XmlSchemaAttribute at = new XmlSchemaAttribute ();
+				at.Name = refName.Name;
+				at.SchemaTypeName = new XmlQualifiedName ("string",XmlSchema.Namespace);
+				return at;
+			}
+			return (XmlSchemaAttribute) schemas.Find (refName, typeof(XmlSchemaAttribute));
+		}
+		
+		void WriteRefTypeSample (XmlTextWriter xtw, string ns, XmlSchemaElement elem)
+		{
+			if (elem.SchemaTypeName.Namespace == XmlSchema.Namespace || schemas.Find (elem.SchemaTypeName, typeof(XmlSchemaSimpleType)) != null)
+				WriteElementSample (xtw, ns, elem);
+			else
+			{
+				xtw.WriteStartElement (elem.Name, ns);
+				xtw.WriteAttributeString ("href", "#id" + (queue.Count+1));
+				xtw.WriteEndElement ();
+				queue.Add (new EncodedType (ns, elem));
+			}
+		}
+		
+		void WriteQueuedTypeSamples (XmlTextWriter xtw)
+		{
+			for (int n=0; n<queue.Count; n++)
+			{
+				EncodedType ec = (EncodedType) queue[n];
+				XmlSchemaComplexType st = FindComplexTyype (ec.Element.SchemaTypeName);
+				WriteComplexTypeSample (xtw, st, ec.Element.SchemaTypeName, n+1);
+			}
+		}
+		
+		XmlSchemaComplexType FindComplexTyype (XmlQualifiedName qname)
+		{
+			if (qname.Name.IndexOf ("[]") != -1)
+			{
+				XmlSchemaComplexType stype = new XmlSchemaComplexType ();
+				stype.ContentModel = new XmlSchemaComplexContent ();
+				
+				XmlSchemaComplexContentRestriction res = new XmlSchemaComplexContentRestriction ();
+				stype.ContentModel.Content = res;
+				res.BaseTypeName = arrayType;
+				
+				XmlSchemaAttribute att = new XmlSchemaAttribute ();
+				att.RefName = arrayTypeRefName;
+				res.Attributes.Add (att);
+				
+				XmlAttribute xat = document.CreateAttribute ("arrayType", WsdlNamespace);
+				xat.Value = qname.Namespace + ":" + qname.Name;
+				att.UnhandledAttributes = new XmlAttribute[] {xat};
+				return stype;
+			}
+				
+			return (XmlSchemaComplexType) schemas.Find (qname, typeof(XmlSchemaComplexType));
+		}
+		
+		string GetQualifiedNameString (XmlTextWriter xtw, XmlQualifiedName qname)
+		{
+			string pref = xtw.LookupPrefix (qname.Namespace);
+			if (pref != null) return pref + ":" + qname.Name;
+			
+			xtw.WriteAttributeString ("xmlns", "q1", null, qname.Namespace);
+			return "q1:" + qname.Name;
+		}
+				
+		protected virtual string GetLiteral (string s)
+		{
+			return s;
+		}
+
+		void GetOperationFormat (OperationBinding obin, out SoapBindingStyle style, out SoapBindingUse use)
+		{
+			style = SoapBindingStyle.Document;
+			use = SoapBindingUse.Literal;
+			SoapOperationBinding sob = obin.Extensions.Find (typeof(SoapOperationBinding)) as SoapOperationBinding;
+			if (sob != null) {
+				style = sob.Style;
+				SoapBodyBinding sbb = obin.Input.Extensions.Find (typeof(SoapBodyBinding)) as SoapBodyBinding;
+				if (sbb != null)
+					use = sbb.Use;
+			}
+		}
+	}
+
+
+
+
+
+</script>
+
+<head runat="server">
+	<%
+	Response.Write ("<link rel=\"alternate\" type=\"text/xml\" href=\"" + Request.FilePath + "?disco\"/>");
+	%>
+	<title><%=WebServiceName%> Web Service</title>
+    <style type="text/css">
+		BODY { font-family: Arial; margin-left: 20px; margin-top: 20px; font-size: x-small}
+		TABLE { font-size: x-small }
+		.title { color:dimgray; font-family: Arial; font-size:20pt; font-weight:900}
+		.operationTitle { color:dimgray; font-family: Arial; font-size:15pt; font-weight:900}
+		.method { font-size: x-small }
+		.bindingLabel { font-size: x-small; font-weight:bold; color:darkgray; line-height:8pt; display:block; margin-bottom:3px }
+		.label { font-size: small; font-weight:bold; color:darkgray }
+		.paramTable { font-size: x-small }
+		.paramTable TR { background-color: gainsboro }
+		.paramFormTable { font-size: x-small; padding: 10px; background-color: gainsboro }
+		.paramFormTable TR { background-color: gainsboro }
+		.paramInput { border: solid 1px gray }
+		.button {border: solid 1px gray }
+		.smallSeparator { height:3px; overflow:hidden }
+		.panel { background-color:whitesmoke; border: solid 1px silver; border-top: solid 1px silver  }
+		.codePanel { background-color: white; font-size:x-small; padding:7px; border:solid 1px silver}
+		.code-xml { font-size:10pt; font-family:courier }
+		.code-cs { font-size:10pt; font-family:courier }
+		.code-vb { font-size:10pt; font-family:courier }
+		.tabLabelOn { font-weight:bold }
+		.tabLabelOff {color: darkgray }
+		.literal-placeholder {color: darkblue; font-weight:bold}
+		A:link { color: black; }
+		A:visited { color: black; }
+		A:active { color: black; }
+		A:hover { color: blue }
+    </style>
+	
+<script language="javascript" type="text/javascript">
+var req;
+function getXML (command, url, qs) {
+	if (url == "" || url.substring (0, 4) != "http")
+		return;
+	
+	var post_data = null;
+	req = getReq ();
+	req.onreadystatechange = stateChange;
+	if (command == "GET") {
+		url = url + "?" + qs;
+	} else {
+		post_data = qs;
+	}
+	req.open (command, url,  true); 
+	if (command == "POST")
+		req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
+	req.send (post_data); 
+}
+
+function stateChange () {
+	if (req.readyState == 4) {
+		var node = document.getElementById("testresult_div");
+		var text = "";
+		if (req.status == 200) {
+			node.innerHTML = "<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+		} else {
+			var ht = "<b style='color: red'>" + formatXml (req.status + " - " + req.statusText) + "</b>";
+			if (req.responseText != "")
+				ht = ht + "\n<div class='code-xml'>" + formatXml (req.responseText) + "</div>";
+			node.innerHTML = ht;
+					
+		}
+	}
+}
+
+function formatXml (text)
+{	
+	var re = / /g;
+	text = text.replace (re, "&nbsp;");
+
+	re = /\t/g;
+	text = text.replace (re, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+	
+	re = /\<\s*(\/?)\s*(.*?)\s*(\/?)\s*\>/g;
+	text = text.replace (re,"{blue:&lt;$1}{maroon:$2}{blue:$3&gt;}");
+	
+	re = /{(\w*):(.*?)}/g;
+	text = text.replace (re,"<span style='color:$1'>$2</span>");
+
+	re = /"(.*?)"/g;
+	text = text.replace (re,"\"<span style='color:purple'>$1</span>\"");
+
+	re = /\r\n|\r|\n/g;
+	text = text.replace (re, "<br/>");
+	
+	return text;
+}
+
+function getReq () {
+	if (window.XMLHttpRequest) {
+		return new XMLHttpRequest();     // Firefox, Safari, ...
+	} else if (window.ActiveXObject) {
+		return new ActiveXObject("Microsoft.XMLHTTP");
+	}
+}
+
+function clearForm ()
+{
+	document.getElementById("testFormResult").style.display="none";
+}
+</script>
+
+</head>
+
+<body>
+<div class="title" style="margin-left:20px">
+<span class="label">Web Service</span><br>
+<%=WebServiceName%>
+</div>
+
+<!--
+	**********************************************************
+	Left panel
+-->
+
+<table border="0" width="100%" cellpadding="15px" cellspacing="15px">
+<tr valign="top"><td width="150px" class="panel">
+<div style="width:150px"></div>
+<a class="method" href='<%=PageName%>'>Overview</a><br>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("wsdl")%>'>Service Description</a>
+<div class="smallSeparator"></div>
+<a class="method" href='<%=PageName + "?" + GetPageContext("proxy")%>'>Client proxy</a>
+<br><br>
+	<asp:repeater id="BindingsRepeater" runat=server>
+		<itemtemplate name="itemtemplate">
+			<span class="bindingLabel"><%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%></span>
+			<asp:repeater id="OperationsRepeater" runat=server datasource='<%# ((Binding)Container.DataItem).Operations %>'>
+				<itemtemplate>
+					<a class="method" href="<%=PageName%>?<%=GetTabContext("op",null)%>op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%></a>
+					<div class="smallSeparator"></div>
+				</itemtemplate>
+			</asp:repeater>
+			<br>
+		</itemtemplate>
+	</asp:repeater>
+
+</td><td class="panel">
+
+<% if (CurrentPage == "main") {%>
+
+<!--
+	**********************************************************
+	Web service overview
+-->
+
+	<p class="label">Web Service Overview</p>
+	<%=WebServiceDescription%>
+	<br/><br/>
+	<% if (ProfileViolations != null && ProfileViolations.Count > 0) { %>
+		<p class="label">Basic Profile Conformance</p>
+		This web service does not conform to WS-I Basic Profile v1.1
+	<%
+		Response.Write ("<ul>");
+		foreach (BasicProfileViolation vio in ProfileViolations) {
+			Response.Write ("<li><b>" + vio.NormativeStatement + "</b>: " + vio.Details);
+			Response.Write ("<ul>");
+			foreach (string ele in vio.Elements)
+				Response.Write ("<li>" + ele + "</li>");
+			Response.Write ("</ul>");
+			Response.Write ("</li>");
+		}
+		Response.Write ("</ul>");
+	}%>
+
+<%} if (DefaultBinding == null) {%>
+This service does not contain any public web method.
+<%} else if (CurrentPage == "op") {%>
+
+<!--
+	**********************************************************
+	Operation description
+-->
+
+	<span class="operationTitle"><%=CurrentOperationName%></span>
+	<br><br>
+	<% WriteTabs (); %>
+	<br><br><br>
+	
+	<% if (CurrentTab == "main") { %>
+		<span class="label">Input Parameters</span>
+		<div class="smallSeparator"></div>
+		<% if (InParams.Count == 0) { %>
+			No input parameters<br>
+		<% } else { %>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="InputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<% } %>
+		<br>
+		
+		<% if (OutParams.Count > 0) { %>
+		<span class="label">Output Parameters</span>
+			<div class="smallSeparator"></div>
+			<table class="paramTable" cellspacing="1" cellpadding="5">
+			<asp:repeater id="OutputParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Name")%></td>
+					<td width="150"><%#DataBinder.Eval(Container.DataItem, "Type")%></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			</table>
+		<br>
+		<% } %>
+		
+		<span class="label">Remarks</span>
+		<div class="smallSeparator"></div>
+		<%=OperationDocumentation%>
+		<br><br>
+		<span class="label">Technical information</span>
+		<div class="smallSeparator"></div>
+		Format: <%=CurrentOperationFormat%>
+		<br>Supported protocols: <%=CurrentOperationProtocols%>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Test form
+-->
+
+	<% if (CurrentTab == "test") { 
+		if (CurrentOperationSupportsTest) {%>
+			Enter values for the parameters and click the 'Invoke' button to test this method:<br><br>
+			<form action="<%=PageName%>" method="GET">
+			<input type="hidden" name="page" value="<%=CurrentPage%>">
+			<input type="hidden" name="tab" value="<%=CurrentTab%>">
+			<input type="hidden" name="op" value="<%=CurrentOperationName%>">
+			<input type="hidden" name="bnd" value="<%=CurrentOperationBinding%>">
+			<input type="hidden" name="ext" value="testform">
+			<table class="paramFormTable" cellspacing="0" cellpadding="3">
+			<asp:repeater id="InputFormParamsRepeater" runat=server>
+				<itemtemplate>
+					<tr>
+					<td><%#DataBinder.Eval(Container.DataItem, "Name")%>:&nbsp;</td>
+					<td width="150"><input class="paramInput" type="text" size="20" name="<%#DataBinder.Eval(Container.DataItem, "Name")%>"></td>
+					</tr>
+				</itemtemplate>
+			</asp:repeater>
+			<tr><td></td><td><input class="button" type="submit" value="Invoke">&nbsp;<input class="button" type="button" onclick="clearForm()" value="Clear"></td></tr>
+			</table>
+			</form>
+			<div id="testFormResult" style="display:<%= (HasFormResult?"block":"none") %>">
+			The web service returned the following result:<br/><br/>
+			<div class="codePanel" id="testresult_div">
+			</div>
+			<script language="javascript">
+				getXML ("<%= GetOrPost () %>", "<%= GetTestResultUrl () %>", "<%= GetQS () %>");
+			</script>
+			</div>
+		<% } else {%>
+		The test form is not available for this operation because it has parameters with a complex structure.
+		<% } %>
+	<% } %>
+	
+<!--
+	**********************************************************
+	Operation description - Message Layout
+-->
+
+	<% if (CurrentTab == "msg") { %>
+		
+		The following are sample SOAP requests and responses for each protocol supported by this method:
+			<br/><br/>
+		
+		<% if (IsOperationSupported ("Soap")) { %>
+			<span class="label">Soap</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("Soap", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpGet")) { %>
+			<span class="label">HTTP Get</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpGet", false)%></div></div>
+			<br/>
+		<% } %>
+		<% if (IsOperationSupported ("HttpPost")) { %>
+			<span class="label">HTTP Post</span>
+			<br/><br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", true)%></div></div>
+			<br/>
+			<div class="codePanel"><div class="code-xml"><%=GenerateOperationMessages ("HttpPost", false)%></div></div>
+			<br/>
+		<% } %>
+		
+	<% } %>
+<%} else if (CurrentPage == "proxy") {%>
+<!--
+	**********************************************************
+	Client Proxy
+-->
+	<form action="<%=PageName%>" name="langForm" method="GET">
+		Select the language for which you want to generate a proxy 
+		<input type="hidden" name="page" value="<%=CurrentPage%>">&nbsp;
+		<SELECT name="lang" onchange="langForm.submit()">
+			<%=GetOptionSel("cs",CurrentLanguage)%>C#</option>
+			<%=GetOptionSel("vb",CurrentLanguage)%>Visual Basic</option>
+		</SELECT>
+		&nbsp;&nbsp;
+	</form>
+	<br>
+	<span class="label"><%=CurrentProxytName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?code=" + CurrentLanguage%>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-<%=CurrentLanguage%>"><%=GetProxyCode ()%></div>
+	</div>
+<%} else if (CurrentPage == "wsdl") {%>
+<!--
+	**********************************************************
+	Service description
+-->
+	<% if (descriptions.Count > 1 || schemas.Count > 1) {%>
+	The description of this web service is composed by several documents. Click on the document you want to see:
+	
+	<ul>
+	<% 
+		for (int n=0; n<descriptions.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=wsdl&docind=" + n + "'>WSDL document " + descriptions[n].TargetNamespace + "</a></li>");
+		for (int n=0; n<schemas.Count; n++)
+			Response.Write ("<li><a href='" + PageName + "?" + GetPageContext(null) + "doctype=schema&docind=" + n + "'>Xml Schema " + schemas[n].TargetNamespace + "</a></li>");
+	%>
+	</ul>
+	
+	<%} else {%>
+	<%}%>
+	<br>
+	<span class="label"><%=CurrentDocumentName%></span>&nbsp;&nbsp;&nbsp;
+	<a href="<%=PageName + "?" + CurrentDocType + "=" + CurrentDocInd %>">Download</a>
+	<br><br>
+	<div class="codePanel">
+	<div class="code-xml"><%=GenerateDocument ()%></div>
+	</div>
+
+<%}%>
+
+<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+</td>
+<td width="20px"></td>
+</tr>
+
+</table>
+</body>
+</html>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.5/machine.config b/Build/MonoBleedingEdge/etc/mono/4.5/machine.config
new file mode 100644
index 0000000000000000000000000000000000000000..61f7889871f8b6fab01cd2e0bc2cc34947488fef
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.5/machine.config
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+	<configSections>
+		<section name="configProtectedData" type="System.Configuration.ProtectedConfigurationSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="connectionStrings" type="System.Configuration.ConnectionStringsSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="mscorlib" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="runtime" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="assemblyBinding"  type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="satelliteassemblies" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="startup" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false"/>
+		<section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.runtime.remoting" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<section name="system.windows.forms" type="System.Windows.Forms.WindowsFormsSection, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="system.codedom" type="System.CodeDom.Compiler.CodeDomConfigurationHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<section name="windows" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowLocation="false" />
+		<section name="strongNames" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowLocation="false"/>
+		<sectionGroup name="system.runtime.serialization" type="System.Runtime.Serialization.Configuration.SerializationSectionGroup, System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="dataContractSerializer" type="System.Runtime.Serialization.Configuration.DataContractSerializerSection, System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+		</sectionGroup>
+		<sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+			<section name="anonymousIdentification" type="System.Web.Configuration.AnonymousIdentificationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authentication" type="System.Web.Configuration.AuthenticationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="authorization" type="System.Web.Configuration.AuthorizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="browserCaps" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="clientTarget" type="System.Web.Configuration.ClientTargetSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="compilation" type="System.Web.Configuration.CompilationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="customErrors" type="System.Web.Configuration.CustomErrorsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="deployment" type="System.Web.Configuration.DeploymentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" />
+			<section name="globalization" type="System.Web.Configuration.GlobalizationSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="healthMonitoring" type="System.Web.Configuration.HealthMonitoringSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="hostingEnvironment" type="System.Web.Configuration.HostingEnvironmentSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="httpCookies" type="System.Web.Configuration.HttpCookiesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpHandlers" type="System.Web.Configuration.HttpHandlersSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpModules" type="System.Web.Configuration.HttpModulesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="httpRuntime" type="System.Web.Configuration.HttpRuntimeSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="identity" type="System.Web.Configuration.IdentitySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="machineKey" type="System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="membership" type="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="mobileControls" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+                        <section name="deviceFilters" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="pages" type="System.Web.Configuration.PagesSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="processModel" type="System.Web.Configuration.ProcessModelSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineOnly" allowLocation="false" />
+			<section name="profile" type="System.Web.Configuration.ProfileSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="roleManager" type="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="securityPolicy" type="System.Web.Configuration.SecurityPolicySection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="sessionPageState" type="System.Web.Configuration.SessionPageStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="sessionState" type="System.Web.Configuration.SessionStateSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="siteMap" type="System.Web.Configuration.SiteMapSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="trace" type="System.Web.Configuration.TraceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="trust" type="System.Web.Configuration.TrustSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication" />
+			<section name="urlMappings" type="System.Web.Configuration.UrlMappingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			<section name="webControls" type="System.Web.Configuration.WebControlsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webParts" type="System.Web.Configuration.WebPartsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="webServices" type="System.Web.Services.Configuration.WebServicesSection, System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<section name="xhtmlConformance" type="System.Web.Configuration.XhtmlConformanceSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+			<sectionGroup name="caching" type="System.Web.Configuration.SystemWebCachingSectionGroup, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+				<section name="cache" type="System.Web.Configuration.CacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCache" type="System.Web.Configuration.OutputCacheSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="outputCacheSettings" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+				<section name="sqlCacheDependency" type="System.Web.Configuration.OutputCacheSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+			</sectionGroup>
+			<section name="monoSettings" type="System.Web.Configuration.MonoSettingsSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		</sectionGroup>
+		<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+			<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+				<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+					<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
+					<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+					<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+				</sectionGroup>
+			</sectionGroup>
+		</sectionGroup>
+		<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="authenticationModules" type="System.Net.Configuration.AuthenticationModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="connectionManagement" type="System.Net.Configuration.ConnectionManagementSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<sectionGroup name="mailSettings" type="System.Net.Configuration.MailSettingsSectionGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+				<section name="smtp" type="System.Net.Configuration.SmtpSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</sectionGroup>
+			<section name="requestCaching" type="System.Net.Configuration.RequestCachingSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="settings" type="System.Net.Configuration.SettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="webRequestModules" type="System.Net.Configuration.WebRequestModulesSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</sectionGroup>
+		<section name="system.drawing" type="System.Configuration.NameValueSectionHandler, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.serviceModel" type="System.ServiceModel.Configuration.ServiceModelSectionGroup, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+			<section name="behaviors" type="System.ServiceModel.Configuration.BehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="bindings" type="System.ServiceModel.Configuration.BindingsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="client" type="System.ServiceModel.Configuration.ClientSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="commonBehaviors" type="System.ServiceModel.Configuration.CommonBehaviorsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="diagnostics" type="System.ServiceModel.Configuration.DiagnosticSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="extensions" type="System.ServiceModel.Configuration.ExtensionsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="serviceHostingEnvironment" type="System.ServiceModel.Configuration.ServiceHostingEnvironmentSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="services" type="System.ServiceModel.Configuration.ServicesSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<section name="standardEndpoints" type="System.ServiceModel.Configuration.StandardEndpointsSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+			<section name="routing" type="System.ServiceModel.Routing.Configuration.RoutingSection, System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			<section name="protocolMapping" type="System.ServiceModel.Configuration.ProtocolMappingSection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+		</sectionGroup>
+		<sectionGroup name="system.transactions" type="System.Transactions.Configuration.TransactionsSectionGroup, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null">
+			<section name="defaultSettings" type="System.Transactions.Configuration.DefaultSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
+			<section name="machineSettings" type="System.Transactions.Configuration.MachineSettingsSection, System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" allowDefinition="MachineOnly" allowExeDefinition="MachineOnly"/>
+		</sectionGroup>
+		<section name="system.webServer" type="System.Configuration.IgnoreSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		<section name="uri" type="System.Configuration.UriSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		<sectionGroup name="system.runtime.caching" type="System.Runtime.Caching.Configuration.CachingSectionGroup, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+		  <section name="memoryCache" type="System.Runtime.Caching.Configuration.MemoryCacheSection, System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" allowDefinition="MachineToApplication"/>
+                </sectionGroup>
+	</configSections>
+
+	<connectionStrings>
+		<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
+		<add name="LocalSqliteServer" connectionString="Data Source=|DataDirectory|/aspnetdb.sqlite;version=3" providerName="Mono.Data.Sqlite"/>
+	</connectionStrings>
+	
+	<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
+		<providers>
+			<add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" keyContainerName="MonoFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
+			<add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+                             description="" useMachineProtection="true" keyEntropy="" />
+		</providers>
+	</configProtectedData>
+
+	<system.net>
+		<authenticationModules>
+			<add type="System.Net.BasicClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.DigestClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add type="System.Net.NtlmClient, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</authenticationModules>
+		<webRequestModules>
+			<add prefix="http" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="https" type="System.Net.HttpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="file" type="System.Net.FileWebRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<add prefix="ftp" type="System.Net.FtpRequestCreator, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</webRequestModules>
+		<settings>
+			<ipv6 enabled="true"/>
+		</settings>
+	</system.net>
+	
+	<system.runtime.remoting>
+		<application>
+			<channels>
+				<channel ref="http client" displayName="http client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="tcp client" displayName="tcp client (delay loaded)" delayLoadAsClientChannel="true" />
+				<channel ref="ipc client" displayName="ipc client (delay loaded)" delayLoadAsClientChannel="true" />
+			</channels>
+		</application>
+		<channels>
+			<channel id="http" type="System.Runtime.Remoting.Channels.Http.HttpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http client" type="System.Runtime.Remoting.Channels.Http.HttpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="http server" type="System.Runtime.Remoting.Channels.Http.HttpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp" type="System.Runtime.Remoting.Channels.Tcp.TcpChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp client" type="System.Runtime.Remoting.Channels.Tcp.TcpClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="tcp server" type="System.Runtime.Remoting.Channels.Tcp.TcpServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc" type="System.Runtime.Remoting.Channels.Ipc.IpcChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc client" type="System.Runtime.Remoting.Channels.Ipc.IpcClientChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			<channel id="ipc server" type="System.Runtime.Remoting.Channels.Ipc.IpcServerChannel, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		</channels>
+			<channelSinkProviders>
+				<clientProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</clientProviders>
+				<serverProviders>
+					<formatter id="soap" type="System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<formatter id="binary" type="System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+					<provider id="wsdl" type="System.Runtime.Remoting.MetadataServices.SdlChannelSinkProvider, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				</serverProviders>
+			</channelSinkProviders>
+	</system.runtime.remoting>
+	
+	<appSettings>
+	<!--<add key="yourkey" value="your value" /> -->
+	<!--<remove key="a key defined higher in the hierarchy" /> -->
+	<!--<clear/> Removes all defined settings -->
+	</appSettings>
+	<system.diagnostics>
+		<trace autoflush="false" indentsize="4" />
+	</system.diagnostics>
+        <system.drawing>
+        </system.drawing>
+
+	<system.data>
+	  <DbProviderFactories>
+	    <add name="Mono Sqlite Data Provider"  invariant="Mono.Data.SqliteClient" 
+		 description="Mono Framework Data Provider for SQLite (old version)" 
+		 type="Mono.Data.SqliteClient.SqliteFactory, Mono.Data.SqliteClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Mono Sqlite Provider"  invariant="Mono.Data.Sqlite" 
+		 description="Mono Framework Data Provider for SQLite (new version)"
+		 type="Mono.Data.Sqlite.SqliteFactory, Mono.Data.Sqlite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	    <add name="Odbc Data Provider"         invariant="System.Data.Odbc"         
+		 description=".Net Framework Data Provider for Odbc"      
+		 type="System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OleDb Data Provider"        invariant="System.Data.OleDb"        
+		 description=".Net Framework Data Provider for OleDb"     
+		 type="System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" 
+		 description=".Net Framework Data Provider for Oracle"    
+		 type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="SqlClient Data Provider"    invariant="System.Data.SqlClient"    
+		 description=".Net Framework Data Provider for SqlServer" 
+		 type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+            <add name="Sybase Data Provider"    invariant="Mono.Data.SybaseClient"    
+		 description=".Net Framework Data Provider for Sybase" 
+		 type="Mono.Data.SybaseClient.SybaseClientFactory, Mono.Data.SybaseClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"/>
+	  </DbProviderFactories>
+	</system.data>
+
+	<mscorlib>
+		<cryptographySettings>
+			<cryptoNameMapping>
+				<cryptoClasses>
+					<cryptoClass monoMD2="Mono.Security.Cryptography.MD2Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+					<cryptoClass monoMD4="Mono.Security.Cryptography.MD4Managed, Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
+				</cryptoClasses>
+				<nameEntry name="MD2" class="monoMD2" />
+				<nameEntry name="MD4" class="monoMD4" />
+			</cryptoNameMapping>
+			<oidMap>
+				<oidEntry OID="1.2.840.113549.2.2" name="MD2" />
+				<oidEntry OID="1.2.840.113549.2.2" name="Mono.Security.Cryptography.MD2Managed" />
+				<oidEntry OID="1.2.840.113549.2.4" name="MD4" />
+				<oidEntry OID="1.2.840.113549.2.4" name="Mono.Security.Cryptography.MD4Managed" />
+			</oidMap>
+		</cryptographySettings>
+	</mscorlib>
+
+	<strongNames>
+		<pubTokenMapping>
+			<!-- ECMA key -->
+			<map Token="b77a5c561934e089" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (final) key -->
+			<map Token="b03f5f7f11d50a3a" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Microsoft (Web Service Enhancement) key -->
+			<map Token="31bf3856ad364e35" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- IBM (DB2 Data Provider) key -->
+			<map Token="7c307b91aa13d208" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- Silverlight 2.0 key -->
+			<map Token="7cec85d7bea7798e" PublicKey="002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df" />
+			<!-- XNA Framework key -->                                                            
+			<map Token="6d5c3888ef60e27d" PublicKey="0024000004800000940000000602000000240000525341310004000001000100f9a2641bac9847900d92a33d652ccc4e8b529360f908e7af53e57008b2a9a1938c32a160d47f795a23590557608d2c8d0c0e8846a052d070f9298281b8185343dbe5b479bd52de256f73c2a943e1a8a42065b5c918622dc14b1c0151dbd94d9a4543e7cd03e536b1b1d2d6d99af535d227ab9bdac76af9312a21d457bdf817e6" />
+		</pubTokenMapping>
+	</strongNames>
+
+	<system.web>
+		<webServices>
+			<protocols>
+				<add name="HttpSoap"/>
+				<add name="HttpSoap12"/>
+				<add name="HttpPost"/>
+				<add name="HttpGet"/>
+				<add name="Documentation"/>
+			</protocols>
+			<conformanceWarnings>
+				<add name="BasicProfile1_1"/>
+			</conformanceWarnings>
+			<wsdlHelpGenerator href="DefaultWsdlHelpGenerator.aspx" />
+		</webServices>
+
+		<membership>
+			<providers>
+				<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
+				<!-- <add name="AspNetSqlMembershipProvider" type="Mainsoft.Web.Security.GenericMembershipProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</membership>
+
+		<roleManager>
+			<providers>
+				<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="LocalSqlServer" />
+				<!-- <add name="AspNetSqlRoleProvider" type="Mainsoft.Web.Security.GenericRoleProvider, Mainsoft.Web.Security" applicationName="/" connectionStringName="LocalSqlServer" /> -->
+			</providers>
+		</roleManager>
+
+		<profile>
+        		<providers>
+            		    <add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		        </providers>
+    		</profile>
+	</system.web>
+
+
+	<system.serviceModel>
+		<extensions>
+			<behaviorExtensions>
+				<add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</behaviorExtensions>
+			<bindingElementExtensions>
+				<add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingElementExtensions>
+			<bindingExtensions>
+				<add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</bindingExtensions>
+			<endpointExtensions>
+				<add name="dynamicEndpoint" type="System.ServiceModel.Discovery.Configuration.DynamicEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="discoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.DiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpDiscoveryEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpDiscoveryEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="announcementEndpoint" type="System.ServiceModel.Discovery.Configuration.AnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="udpAnnouncementEndpoint" type="System.ServiceModel.Discovery.Configuration.UdpAnnouncementEndpointCollectionElement, System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webHttpEndpoint" type="System.ServiceModel.Configuration.WebHttpEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add name="webScriptEndpoint" type="System.ServiceModel.Configuration.WebScriptEndpointCollectionElement, System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+			</endpointExtensions>
+		</extensions>
+	</system.serviceModel>
+</configuration>
+
+
diff --git a/Build/MonoBleedingEdge/etc/mono/4.5/settings.map b/Build/MonoBleedingEdge/etc/mono/4.5/settings.map
new file mode 100644
index 0000000000000000000000000000000000000000..4c53aca6776656859d35fb7b7e6a64a5d54bfc6a
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.5/settings.map
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<settingsMap>
+  <map sectionType="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.MembershipSectionMapper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlMembershipProvider" 
+	       type="System.Web.Security.SqliteMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+
+  <map sectionType="System.Web.Configuration.RoleManagerSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       mapperType="Mono.Web.Util.RoleManagerSectionMapper, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+       platform="Unix">
+
+    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be
+         any expression understood by the mapper to designate the section region to modify.
+    -->
+    <what value="providers">
+      <!-- 'what' can contain any number of occurrences of any three elements:
+              replace - replace the designated region
+	      add - add a new entry to the region
+	      clear - clear the region
+	      remove - remove the designatedregion
+
+              The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the
+	      mapper to peruse.
+      -->
+      <replace name="AspNetSqlRoleProvider" 
+	       type="System.Web.Security.SqliteRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
+	       connectionStringName="LocalSqliteServer" />
+    </what>
+  </map>
+</settingsMap>
diff --git a/Build/MonoBleedingEdge/etc/mono/4.5/web.config b/Build/MonoBleedingEdge/etc/mono/4.5/web.config
new file mode 100644
index 0000000000000000000000000000000000000000..324c529f008875cd1b4184b10c47b7c989964ae7
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/4.5/web.config
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<configuration>
+
+  <system.codedom>
+        <compilers>
+            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+                <providerOption name="CompilerVersion" value="v4.0"/>
+                <providerOption name="OptionInfer" value="true"/>
+                <providerOption name="WarnAsError" value="false"/>
+            </compiler>
+        </compilers>
+  </system.codedom>
+
+	<system.web>
+		<monoSettings>
+			<compilersCompatibility>
+				<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/nowarn:0169"
+					  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</compilersCompatibility>
+		</monoSettings>
+		
+		<authorization>
+			<allow users="*" />
+		</authorization>
+		<httpHandlers>
+		  <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
+		  <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
+		  <add verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
+		  <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
+		  <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
+		  <add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
+		  <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="False" />
+		  <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True" />
+		  <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler"  validate="True" />
+		  <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
+		  <!--
+		  <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+                  <add verb="*" path="*.svc" type="System.ServiceModel.Channels.SvcHttpHandlerFactory, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+		  <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
+		  <!--
+		  <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  <add path="*.xamlx" verb="*" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>
+		  -->
+		  <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
+		  <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
+		</httpHandlers>
+		<httpModules>
+		  <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" />
+		  <add name="Session" type="System.Web.SessionState.SessionStateModule" />
+		  <!--
+		  <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
+		  -->
+		  <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
+		  <!--
+		  <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" />
+		  -->
+		  <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
+		  <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
+		  <!--
+		  <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" />
+		  -->
+		  <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
+		  <add name="Profile" type="System.Web.Profile.ProfileModule" />
+		  <!--
+		  <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+		  <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+		  -->
+		  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
+		  <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+		</httpModules>
+		<authentication mode="Forms">
+			<forms name=".MONOAUTH" loginUrl="login.aspx" protection="All" timeout="30" path="/">
+				<credentials passwordFormat="Clear">
+					<!--<user name="gonzalo" password="gonz"/>-->
+				</credentials>
+			</forms>
+		</authentication>
+		<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
+		<globalization  requestEncoding="utf-8"
+				responseEncoding="utf-8"
+				fileEncoding="utf-8"/>
+		<!--
+				culture="en-US"
+				uiculture="en-US" />
+		-->
+		<sessionState mode="InProc" />
+		<pages>
+        		<namespaces>
+            			<add namespace="System" />
+            			<add namespace="System.Collections" />
+            			<add namespace="System.Collections.Specialized" />
+            			<add namespace="System.Configuration" />
+            			<add namespace="System.Text" />
+            			<add namespace="System.Text.RegularExpressions" />
+            			<add namespace="System.Web" />
+            			<add namespace="System.Web.Caching" />
+            			<add namespace="System.Web.SessionState" />
+            			<add namespace="System.Web.Security" />
+            			<add namespace="System.Web.Profile" />
+            			<add namespace="System.Web.UI" />
+            			<add namespace="System.Web.UI.WebControls" />
+            			<!-- <add namespace="System.Web.UI.WebControls.WebParts" /> -->
+            			<add namespace="System.Web.UI.HtmlControls" />
+        		</namespaces>
+        		
+        		<controls>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.WebParts" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls.Expressions" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.DynamicData" assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+			</controls>
+    		</pages>
+		<webControls clientScriptsLocation="/web_scripts" />
+		<compilation debug="false" defaultLanguage="c#" explicit="true" strict="false" >
+			<assemblies>
+				<!-- <add assembly="mscorlib" /> -->
+				<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<!-- <add assembly="System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> -->
+				<add assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<!-- <add assembly="System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> -->
+				<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<!-- <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<!-- <add assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> -->
+				<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+				<!-- <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> -->
+				<add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add assembly="*" /> <!-- Add assemblies in bin directory -->
+			</assemblies>
+			<expressionBuilders>
+				<add expressionPrefix="Resources"
+				     type="System.Web.Compilation.ResourceExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="ConnectionStrings"
+				     type="System.Web.Compilation.ConnectionStringsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="AppSettings"
+				     type="System.Web.Compilation.AppSettingsExpressionBuilder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+				<add expressionPrefix="RouteUrl" type="System.Web.Compilation.RouteUrlExpressionBuilder"/>
+				<!--
+				<add expressionPrefix="RouteValue" type="System.Web.Compilation.RouteValueExpressionBuilder"/>
+				-->
+			</expressionBuilders>
+			<buildProviders>
+				<add extension=".aspx" type="System.Web.Compilation.PageBuildProvider" />
+				<add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider" />
+				<add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider" />
+				<add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider" />
+				<add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider" />
+				<add extension=".resx" type="System.Web.Compilation.ResXBuildProvider" />
+				<add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider" />
+				<add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider" />
+				<add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider" />
+				<add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider" />
+				<add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider" />
+				<!--
+				<add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
+				<add extension=".xoml" type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+				<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				<add extension=".xamlx" type="System.Xaml.Hosting.XamlBuildProvider, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+				-->
+			</buildProviders>
+		</compilation>
+		<httpRuntime executionTimeout="110"
+			     maxRequestLength="4096"
+			     useFullyQualifiedRedirectUrl="false"
+			     minFreeThreads="8"
+			     minLocalRequestFreeThreads="4"
+			     appRequestQueueLimit="5000" />
+		<clientTarget>
+			<add alias="ie5" userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)" />
+			<add alias="ie4" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="uplevel" userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)" />
+			<add alias="downlevel" userAgent="Unknown" />
+		</clientTarget>
+
+		<siteMap>
+			<providers>
+				<add name="AspNetXmlSiteMapProvider"
+				 description="Default site map provider that reads in .sitemap xml files."
+				 type="System.Web.XmlSiteMapProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+				 siteMapFile="Web.sitemap" />
+			</providers>
+		</siteMap>
+	</system.web>
+
+</configuration>
diff --git a/Build/MonoBleedingEdge/etc/mono/browscap.ini b/Build/MonoBleedingEdge/etc/mono/browscap.ini
new file mode 100644
index 0000000000000000000000000000000000000000..1267e1deb4061a8250ad25125fc7d20fd2ae04ac
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/browscap.ini
@@ -0,0 +1,16979 @@
+;;; Provided courtesy of http://browsers.garykeith.com
+;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT
+
+[GJK_Browscap_Version]
+Version=4476
+Released=Wed, 17 Jun 2009 06:30:21 -0000
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties
+
+[DefaultProperties]
+Browser=DefaultProperties
+Version=0
+MajorVer=0
+MinorVer=0
+Platform=unknown
+Alpha=false
+Beta=false
+Win16=false
+Win32=false
+Win64=false
+Frames=false
+IFrames=false
+Tables=false
+Cookies=false
+BackgroundSounds=false
+CDF=false
+VBScript=false
+JavaApplets=false
+JavaScript=false
+ActiveXControls=false
+isBanned=false
+isMobileDevice=false
+isSyndicationReader=false
+Crawler=false
+CssVersion=0
+supportsCSS=false
+AOL=false
+aolVersion=0
+ECMAScriptVersion=0.0
+W3CDOMVersion=0.0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask
+
+[Ask]
+Parent=DefaultProperties
+Browser=Ask
+Frames=true
+Tables=true
+Crawler=true
+
+[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)]
+Parent=Ask
+Browser=Teoma
+
+[Mozilla/2.0 (compatible; Ask Jeeves)]
+Parent=Ask
+Browser=AskJeeves
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu
+
+[Baidu]
+Parent=DefaultProperties
+Browser=Baidu
+Frames=true
+Tables=true
+Crawler=true
+
+[BaiduImageSpider*]
+Parent=Baidu
+Browser=BaiduImageSpider
+
+[Baiduspider*]
+Parent=Baidu
+Browser=BaiDu
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google
+
+[Google]
+Parent=DefaultProperties
+Browser=Google
+Frames=true
+IFrames=true
+Tables=true
+JavaScript=true
+Crawler=true
+
+[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)]
+Parent=Google
+Browser=Googlebot-Mobile
+Frames=false
+IFrames=false
+Tables=false
+
+[*Google Wireless Transcoder*]
+Parent=Google
+Browser=Google Wireless Transcoder
+
+[AdsBot-Google (?http://www.google.com/adsbot.html)]
+Parent=Google
+Browser=AdsBot-Google
+
+[Feedfetcher-Google-iGoogleGadgets;*]
+Parent=Google
+Browser=iGoogleGadgets
+isBanned=true
+isSyndicationReader=true
+
+[Feedfetcher-Google;*]
+Parent=Google
+Browser=Feedfetcher-Google
+isBanned=true
+isSyndicationReader=true
+
+[Google OpenSocial agent (http://www.google.com/feedfetcher.html)]
+Parent=Google
+Browser=Google OpenSocial
+
+[Google-Site-Verification/1.0]
+Parent=Google
+Browser=Google-Site-Verification
+
+[Google-Sitemaps/*]
+Parent=Google
+Browser=Google-Sitemaps
+
+[Googlebot-Image/*]
+Parent=Google
+Browser=Googlebot-Image
+CDF=true
+
+[googlebot-urlconsole]
+Parent=Google
+Browser=googlebot-urlconsole
+
+[Googlebot-Video/1.0]
+Parent=Google
+Browser=Google-Video
+
+[Googlebot/2.1 (?http://www.google.com/bot.html)]
+Parent=Google
+Browser=Googlebot
+
+[Googlebot/2.1 (?http://www.googlebot.com/bot.html)]
+Parent=Google
+Browser=Googlebot
+
+[Googlebot/Test*]
+Parent=Google
+Browser=Googlebot/Test
+
+[gsa-crawler*]
+Parent=Google
+Browser=Google Search Appliance
+isBanned=true
+
+[Mediapartners-Google*]
+Parent=Google
+Browser=Mediapartners-Google
+
+[Mozilla/4.0 (compatible; Google Desktop)]
+Parent=Google
+Browser=Google Desktop
+
+[Mozilla/4.0 (compatible; GoogleToolbar*)]
+Parent=Google
+Browser=Google Toolbar
+isBanned=true
+
+[Mozilla/5.0 (compatible; Google Keyword Tool;*)]
+Parent=Google
+Browser=Google Keyword Tool
+
+[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)]
+Parent=Google
+Browser=Google Webmaster Tools
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi
+
+[Inktomi]
+Parent=DefaultProperties
+Browser=Inktomi
+Frames=true
+Tables=true
+Crawler=true
+
+[* (compatible;YahooSeeker/M1A1-R2D2; *)]
+Parent=Inktomi
+Browser=YahooSeeker-Mobile
+Frames=false
+Tables=false
+
+[Mozilla/4.0]
+Parent=Inktomi
+
+[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)]
+Parent=Inktomi
+Win32=true
+
+[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)]
+Parent=Inktomi
+Browser=Yahoo! RobotStudy
+isBanned=true
+
+[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))]
+Parent=Inktomi
+Browser=Y!J-AGENT/BMC
+
+[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))]
+Parent=Inktomi
+Browser=Y!J-AGENT/BMF
+
+[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))]
+Parent=Inktomi
+Browser=Y!J-AGENT/BMI
+
+[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)]
+Parent=Inktomi
+Browser=Yahoo! Directory Engine
+
+[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)]
+Parent=Inktomi
+Browser=Yahoo! Slurp China
+
+[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)]
+Parent=Inktomi
+Browser=Yahoo! Slurp
+Version=3.0
+MajorVer=3
+MinorVer=0
+
+[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)]
+Parent=Inktomi
+Browser=Yahoo! Slurp
+
+[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)]
+Parent=Inktomi
+Browser=Yahoo! Verifier
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)]
+Parent=Inktomi
+Browser=Slurp/cat
+
+[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)]
+Parent=Inktomi
+
+[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)]
+Parent=Inktomi
+Browser=Yahoo-MMCrawler
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[Scooter/*]
+Parent=Inktomi
+Browser=Scooter
+
+[Scooter/3.3Y!CrawlX]
+Parent=Inktomi
+Browser=Scooter/3.3Y!CrawlX
+Version=3.3
+MajorVer=3
+MinorVer=3
+
+[slurp]
+Parent=Inktomi
+Browser=slurp
+
+[Y!J-BSC/1.0*]
+Parent=Inktomi
+Browser=Y!J-BSC
+Version=1.0
+MajorVer=1
+MinorVer=0
+isBanned=true
+
+[Y!J-SRD/1.0]
+Parent=Inktomi
+Browser=Y!J-SRD
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Yahoo Mindset]
+Parent=Inktomi
+Browser=Yahoo Mindset
+
+[Yahoo Pipes*]
+Parent=Inktomi
+Browser=Yahoo Pipes
+
+[Yahoo! Mindset]
+Parent=Inktomi
+Browser=Yahoo! Mindset
+
+[Yahoo! Slurp/Site Explorer]
+Parent=Inktomi
+Browser=Yahoo! Site Explorer
+
+[Yahoo-Blogs/*]
+Parent=Inktomi
+Browser=Yahoo-Blogs
+
+[Yahoo-MMAudVid*]
+Parent=Inktomi
+Browser=Yahoo-MMAudVid
+
+[Yahoo-MMCrawler*]
+Parent=Inktomi
+Browser=Yahoo-MMCrawler
+isBanned=true
+
+[YahooFeedSeeker*]
+Parent=Inktomi
+Browser=YahooFeedSeeker
+isSyndicationReader=true
+Crawler=false
+
+[YahooSeeker/*]
+Parent=Inktomi
+Browser=YahooSeeker
+isMobileDevice=true
+
+[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)]
+Parent=Inktomi
+Browser=YahooSeeker/CafeKelsa
+
+[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)]
+Parent=Inktomi
+
+[YahooVideoSearch*]
+Parent=Inktomi
+Browser=YahooVideoSearch
+
+[YahooYSMcm*]
+Parent=Inktomi
+Browser=YahooYSMcm
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN
+
+[MSN]
+Parent=DefaultProperties
+Browser=MSN
+Frames=true
+Tables=true
+Crawler=true
+
+[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)]
+Parent=MSN
+Browser=adidxbot
+
+[librabot/1.0 (*)]
+Parent=MSN
+Browser=librabot
+
+[llssbot/1.0]
+Parent=MSN
+Browser=llssbot
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[MSMOBOT/1.1*]
+Parent=MSN
+Browser=msnbot-mobile
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[MSNBot-Academic/1.0*]
+Parent=MSN
+Browser=MSNBot-Academic
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[msnbot-media/1.0*]
+Parent=MSN
+Browser=msnbot-media
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[msnbot-media/1.1*]
+Parent=MSN
+Browser=msnbot-media
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[MSNBot-News/1.0*]
+Parent=MSN
+Browser=MSNBot-News
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[MSNBot-NewsBlogs/1.0*]
+Parent=MSN
+Browser=MSNBot-NewsBlogs
+Version=1
+MajorVer=1
+MinorVer=0
+
+[msnbot-products]
+Parent=MSN
+Browser=msnbot-products
+
+[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)]
+Parent=MSN
+Browser=msnbot-webmaster tools
+
+[msnbot/1.0*]
+Parent=MSN
+Browser=msnbot
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[msnbot/1.1*]
+Parent=MSN
+Browser=msnbot
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[msnbot/2.0b*]
+Parent=MSN
+Version=2.0
+MajorVer=2
+MinorVer=0
+Beta=true
+
+[MSR-ISRCCrawler]
+Parent=MSN
+Browser=MSR-ISRCCrawler
+
+[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)]
+Parent=MSN
+Browser=renlifangbot
+
+[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)]
+Parent=MSN
+Browser=msnbot-mobile
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo
+
+[Yahoo]
+Parent=DefaultProperties
+Browser=Yahoo
+Frames=true
+Tables=true
+Crawler=true
+
+[Mozilla/4.0 (compatible; Y!J; for robot study*)]
+Parent=Yahoo
+Browser=Y!J
+
+[Mozilla/5.0 (Yahoo-Test/4.0*)]
+Parent=Yahoo
+Browser=Yahoo-Test
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[mp3Spider cn-search-devel at yahoo-inc dot com]
+Parent=Yahoo
+Browser=Yahoo! Media
+isBanned=true
+
+[My Browser]
+Parent=Yahoo
+Browser=Yahoo! My Browser
+
+[Y!OASIS/*]
+Parent=Yahoo
+Browser=Y!OASIS
+isBanned=true
+
+[YahooYSMcm/2.0.0]
+Parent=Yahoo
+Browser=YahooYSMcm
+Version=2.0
+MajorVer=2
+MinorVer=0
+isBanned=true
+
+[YRL_ODP_CRAWLER]
+Parent=Yahoo
+Browser=YRL_ODP_CRAWLER
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex
+
+[Yandex]
+Parent=DefaultProperties
+Browser=Yandex
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+Crawler=true
+
+[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)]
+Parent=Yandex
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0]
+Parent=Yandex
+Browser=VisualParser
+isBanned=true
+
+[YaDirectBot/*]
+Parent=Yandex
+Browser=YaDirectBot
+
+[Yandex/*]
+Parent=Yandex
+
+[YandexBlog/*]
+Parent=Yandex
+Browser=YandexBlog
+isSyndicationReader=true
+
+[YandexSomething/*]
+Parent=Yandex
+Browser=YandexSomething
+isSyndicationReader=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web
+
+[Best of the Web]
+Parent=DefaultProperties
+Browser=Best of the Web
+Frames=true
+Tables=true
+
+[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)]
+Parent=Best of the Web
+Browser=BOTW Feed Grabber
+isSyndicationReader=true
+Crawler=false
+
+[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)]
+Parent=Best of the Web
+Browser=BOTW Spider
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho
+
+[Boitho]
+Parent=DefaultProperties
+Browser=Boitho
+Frames=true
+Tables=true
+Crawler=true
+
+[boitho.com-dc/*]
+Parent=Boitho
+Browser=boitho.com-dc
+
+[boitho.com-robot/*]
+Parent=Boitho
+Browser=boitho.com-robot
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera
+
+[Convera]
+Parent=DefaultProperties
+Browser=Convera
+Frames=true
+Tables=true
+Crawler=true
+
+[ConveraCrawler/*]
+Parent=Convera
+Browser=ConveraCrawler
+
+[ConveraMultiMediaCrawler/0.1*]
+Parent=Convera
+Browser=ConveraMultiMediaCrawler
+Version=0.1
+MajorVer=0
+MinorVer=1
+
+[CrawlConvera*]
+Parent=Convera
+Browser=CrawlConvera
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot
+
+[DotBot]
+Parent=DefaultProperties
+Browser=DotBot
+Frames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[DotBot/* (http://www.dotnetdotcom.org/*)]
+Parent=DotBot
+
+[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)]
+Parent=DotBot
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb
+
+[Entireweb]
+Parent=DefaultProperties
+Browser=Entireweb
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)]
+Parent=Entireweb
+
+[Speedy Spider (*Beta/*)]
+Parent=Entireweb
+
+[Speedy?Spider?(http://www.entireweb.com*)]
+Parent=Entireweb
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk
+
+[Envolk]
+Parent=DefaultProperties
+Browser=Envolk
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[envolk/* (?http://www.envolk.com/envolk*)]
+Parent=Envolk
+
+[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)]
+Parent=Envolk
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead
+
+[Exalead]
+Parent=DefaultProperties
+Browser=Exalead
+Frames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[Exabot-Images/1.0]
+Parent=Exalead
+Browser=Exabot-Images
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Exabot-Test/*]
+Parent=Exalead
+Browser=Exabot-Test
+
+[Exabot/2.0]
+Parent=Exalead
+Browser=Exabot
+
+[Exabot/3.0]
+Parent=Exalead
+Browser=Exabot
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=Liberate
+
+[Exalead NG/*]
+Parent=Exalead
+Browser=Exalead NG
+isBanned=true
+
+[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)]
+Parent=Exalead
+Browser=Exabot-Images
+
+[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)]
+Parent=Exalead
+Browser=Exabot/BiggerBetter/tests
+
+[Mozilla/5.0 (compatible; Exabot/3.0;*)]
+Parent=Exalead
+Browser=Exabot
+isBanned=false
+
+[Mozilla/5.0 (compatible; NGBot/*)]
+Parent=Exalead
+
+[ng/*]
+Parent=Exalead
+Browser=Exalead Previewer
+Version=1.0
+MajorVer=1
+MinorVer=0
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb
+
+[Fast/AllTheWeb]
+Parent=DefaultProperties
+Browser=Fast/AllTheWeb
+Alpha=true
+Beta=true
+Win16=true
+Win32=true
+Win64=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+isBanned=true
+isMobileDevice=true
+isSyndicationReader=true
+Crawler=true
+
+[*FAST Enterprise Crawler*]
+Parent=Fast/AllTheWeb
+Browser=FAST Enterprise Crawler
+
+[FAST Data Search Document Retriever/4.0*]
+Parent=Fast/AllTheWeb
+Browser=FAST Data Search Document Retriever
+
+[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)]
+Parent=Fast/AllTheWeb
+Browser=FAST MetaWeb Crawler
+
+[Fast PartnerSite Crawler*]
+Parent=Fast/AllTheWeb
+Browser=FAST PartnerSite
+
+[FAST-WebCrawler/*]
+Parent=Fast/AllTheWeb
+Browser=FAST-WebCrawler
+
+[FAST-WebCrawler/*/FirstPage*]
+Parent=Fast/AllTheWeb
+Browser=FAST-WebCrawler/FirstPage
+
+[FAST-WebCrawler/*/Fresh*]
+Parent=Fast/AllTheWeb
+Browser=FAST-WebCrawler/Fresh
+
+[FAST-WebCrawler/*/PartnerSite*]
+Parent=Fast/AllTheWeb
+Browser=FAST PartnerSite
+
+[FAST-WebCrawler/*?Multimedia*]
+Parent=Fast/AllTheWeb
+Browser=FAST-WebCrawler/Multimedia
+
+[FastSearch Web Crawler for*]
+Parent=Fast/AllTheWeb
+Browser=FastSearch Web Crawler
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot
+
+[Gigabot]
+Parent=DefaultProperties
+Browser=Gigabot
+Frames=true
+IFrames=true
+Tables=true
+Crawler=true
+
+[Gigabot*]
+Parent=Gigabot
+
+[GigabotSiteSearch/*]
+Parent=Gigabot
+Browser=GigabotSiteSearch
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse
+
+[Ilse]
+Parent=DefaultProperties
+Browser=Ilse
+Frames=true
+Tables=true
+Crawler=true
+
+[IlseBot/*]
+Parent=Ilse
+
+[INGRID/?.0*]
+Parent=Ilse
+Browser=Ilse
+
+[Mozilla/3.0 (INGRID/*]
+Parent=Ilse
+Browser=Ilse
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project
+
+[iVia Project]
+Parent=DefaultProperties
+Browser=iVia Project
+Frames=true
+IFrames=true
+Tables=true
+Crawler=true
+
+[DataFountains/DMOZ Downloader*]
+Parent=iVia Project
+Browser=DataFountains/DMOZ Downloader
+isBanned=true
+
+[DataFountains/DMOZ Feature Vector Corpus Creator*]
+Parent=iVia Project
+Browser=DataFountains/DMOZ Feature Vector Corpus
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online
+
+[Jayde Online]
+Parent=DefaultProperties
+Browser=Jayde Online
+Frames=true
+Tables=true
+Crawler=true
+
+[ExactSeek Crawler/*]
+Parent=Jayde Online
+Browser=ExactSeek Crawler
+
+[exactseek-pagereaper-* (crawler@exactseek.com)]
+Parent=Jayde Online
+Browser=exactseek-pagereaper
+isBanned=true
+
+[exactseek.com]
+Parent=Jayde Online
+Browser=exactseek.com
+
+[Jayde Crawler*]
+Parent=Jayde Online
+Browser=Jayde Crawler
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos
+
+[Lycos]
+Parent=DefaultProperties
+Browser=Lycos
+Frames=true
+Tables=true
+Crawler=true
+
+[Lycos*]
+Parent=Lycos
+Browser=Lycos
+
+[Lycos-Proxy]
+Parent=Lycos
+Browser=Lycos-Proxy
+
+[Lycos-Spider_(modspider)]
+Parent=Lycos
+Browser=Lycos-Spider_(modspider)
+
+[Lycos-Spider_(T-Rex)]
+Parent=Lycos
+Browser=Lycos-Spider_(T-Rex)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver
+
+[Naver]
+Parent=DefaultProperties
+Browser=Naver
+isBanned=true
+Crawler=true
+
+[Cowbot-* (NHN Corp*naver.com)]
+Parent=Naver
+Browser=Naver Cowbot
+
+[Mozilla/4.0 (compatible; NaverBot/*; *)]
+Parent=Naver
+
+[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)]
+Parent=Naver
+Browser=Naver NaverBot
+
+[NaverBot-* (NHN Corp*naver.com)]
+Parent=Naver
+Browser=Naver NHN Corp
+
+[Yeti/*]
+Parent=Naver
+Browser=Yeti
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap
+
+[Snap]
+Parent=DefaultProperties
+Browser=Snap
+isBanned=true
+Crawler=true
+
+[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*]
+Parent=Snap
+
+[Snapbot/*]
+Parent=Snap
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou
+
+[Sogou]
+Parent=DefaultProperties
+Browser=Sogou
+Frames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[shaboyi spider]
+Parent=Sogou
+Browser=Sogou/Shaboyi Spider
+
+[Sogou develop spider/*]
+Parent=Sogou
+Browser=Sogou Develop Spider
+
+[Sogou head spider*]
+Parent=Sogou
+Browser=Sogou/HEAD Spider
+
+[sogou js robot(*)]
+Parent=Sogou
+
+[Sogou Orion spider/*]
+Parent=Sogou
+Browser=Sogou Orion spider
+
+[Sogou Pic Agent]
+Parent=Sogou
+Browser=Sogou/Image Crawler
+
+[Sogou Pic Spider]
+Parent=Sogou
+Browser=Sogou Pic Spider
+
+[Sogou Push Spider/*]
+Parent=Sogou
+Browser=Sogou Push Spider
+
+[sogou spider]
+Parent=Sogou
+Browser=Sogou/Spider
+
+[sogou web spider*]
+Parent=Sogou
+Browser=sogou web spider
+
+[Sogou-Test-Spider/*]
+Parent=Sogou
+Browser=Sogou-Test-Spider
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot
+
+[YodaoBot]
+Parent=DefaultProperties
+Browser=YodaoBot
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[Mozilla/5.0 (compatible; YodaoBot/1.*)]
+Parent=YodaoBot
+
+[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)]
+Parent=YodaoBot
+Browser=YodaoBot-Image
+
+[WAP_Browser/5.0 (compatible; YodaoBot/1.*)]
+Parent=YodaoBot
+
+[YodaoBot/1.* (*)]
+Parent=YodaoBot
+
+[Best Whois (http://www.bestwhois.net/)]
+Parent=DNS Tools
+Browser=Best Whois
+
+[DNSGroup/*]
+Parent=DNS Tools
+Browser=DNS Group Crawler
+
+[NG-Search/*]
+Parent=Exalead
+Browser=NG-SearchBot
+
+[TouchStone]
+Parent=Feeds Syndicators
+Browser=TouchStone
+isSyndicationReader=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers
+
+[General Crawlers]
+Parent=DefaultProperties
+Browser=General Crawlers
+Crawler=true
+
+[A .NET Web Crawler]
+Parent=General Crawlers
+isBanned=true
+
+[BabalooSpider/1.*]
+Parent=General Crawlers
+Browser=BabalooSpider
+
+[BilgiBot/*]
+Parent=General Crawlers
+Browser=BilgiBot
+isBanned=true
+
+[bot/* (bot; *bot@bot.bot)]
+Parent=General Crawlers
+Browser=bot
+isBanned=true
+
+[CyberPatrol*]
+Parent=General Crawlers
+Browser=CyberPatrol
+isBanned=true
+
+[Cynthia 1.0]
+Parent=General Crawlers
+Browser=Cynthia
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[ddetailsbot (http://www.displaydetails.com)]
+Parent=General Crawlers
+Browser=ddetailsbot
+
+[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)]
+Parent=General Crawlers
+Browser=DomainCrawler
+
+[DomainsBotBot/1.*]
+Parent=General Crawlers
+Browser=DomainsBotBot
+isBanned=true
+
+[DomainsDB.net MetaCrawler*]
+Parent=General Crawlers
+Browser=DomainsDB
+
+[Drupal (*)]
+Parent=General Crawlers
+Browser=Drupal
+
+[Dumbot (version *)*]
+Parent=General Crawlers
+Browser=Dumbfind
+
+[EuripBot/*]
+Parent=General Crawlers
+Browser=Europe Internet Portal
+
+[eventax/*]
+Parent=General Crawlers
+Browser=eventax
+
+[FANGCrawl/*]
+Parent=General Crawlers
+Browser=Safe-t.net Web Filtering Service
+isBanned=true
+
+[favorstarbot/*]
+Parent=General Crawlers
+Browser=favorstarbot
+isBanned=true
+
+[FollowSite.com (*)]
+Parent=General Crawlers
+Browser=FollowSite
+isBanned=true
+
+[Gaisbot*]
+Parent=General Crawlers
+Browser=Gaisbot
+
+[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ]
+Parent=General Crawlers
+Browser=Healthbot
+isBanned=true
+
+[hitcrawler_0.*]
+Parent=General Crawlers
+Browser=hitcrawler
+isBanned=true
+
+[htdig/*]
+Parent=General Crawlers
+Browser=ht://Dig
+
+[http://hilfe.acont.de/bot.html ACONTBOT]
+Parent=General Crawlers
+Browser=ACONTBOT
+isBanned=true
+
+[JetBrains*]
+Parent=General Crawlers
+Browser=Omea Pro
+
+[KakleBot - www.kakle.com/0.1]
+Parent=General Crawlers
+Browser=KakleBot
+
+[KBeeBot/0.*]
+Parent=General Crawlers
+Browser=KBeeBot
+isBanned=true
+
+[Keyword Density/*]
+Parent=General Crawlers
+Browser=Keyword Density
+
+[LetsCrawl.com/1.0*]
+Parent=General Crawlers
+Browser=LetsCrawl.com
+isBanned=true
+
+[Lincoln State Web Browser]
+Parent=General Crawlers
+Browser=Lincoln State Web Browser
+isBanned=true
+
+[Links4US-Crawler,*]
+Parent=General Crawlers
+Browser=Links4US-Crawler
+isBanned=true
+
+[Lorkyll *.* -- lorkyll@444.net]
+Parent=General Crawlers
+Browser=Lorkyll
+isBanned=true
+
+[Lsearch/sondeur]
+Parent=General Crawlers
+Browser=Lsearch/sondeur
+isBanned=true
+
+[LucidMedia ClickSense/4.?]
+Parent=General Crawlers
+Browser=LucidMedia-ClickSense
+isBanned=true
+
+[MapoftheInternet.com?(?http://MapoftheInternet.com)]
+Parent=General Crawlers
+Browser=MapoftheInternet
+isBanned=true
+
+[Marvin v0.3]
+Parent=General Crawlers
+Browser=MedHunt
+Version=0.3
+MajorVer=0
+MinorVer=3
+
+[masidani_bot_v0.6*]
+Parent=General Crawlers
+Browser=masidani_bot
+
+[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)]
+Parent=General Crawlers
+Browser=Metaspinner/0.01
+Version=0.01
+MajorVer=0
+MinorVer=01
+
+[metatagsdir/*]
+Parent=General Crawlers
+Browser=metatagsdir
+isBanned=true
+
+[Microsoft Windows Network Diagnostics]
+Parent=General Crawlers
+Browser=Microsoft Windows Network Diagnostics
+isBanned=true
+
+[Miva (AlgoFeedback@miva.com)]
+Parent=General Crawlers
+Browser=Miva
+
+[moget/*]
+Parent=General Crawlers
+Browser=Goo
+
+[Mozdex/0.7.2*]
+Parent=General Crawlers
+Browser=Mozdex
+
+[Mozilla Compatible (MS IE 3.01 WinNT)]
+Parent=General Crawlers
+isBanned=true
+
+[Mozilla/* (compatible; WebCapture*)]
+Parent=General Crawlers
+Browser=WebCapture
+
+[Mozilla/4.0 (compatible; DepSpid/*)]
+Parent=General Crawlers
+Browser=DepSpid
+
+[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)]
+Parent=General Crawlers
+Browser=AVG
+
+[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)]
+Parent=General Crawlers
+Browser=Vonna.com
+isBanned=true
+
+[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)]
+Parent=General Crawlers
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )]
+Parent=General Crawlers
+Win32=true
+
+[Mozilla/4.0 (compatible; MyFamilyBot/*)]
+Parent=General Crawlers
+Browser=MyFamilyBot
+
+[Mozilla/4.0 (compatible; N-Stealth)]
+Parent=General Crawlers
+Browser=N-Stealth
+
+[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)]
+Parent=General Crawlers
+isBanned=true
+
+[Mozilla/4.0 (compatible; Spider; Linux)]
+Parent=General Crawlers
+isBanned=true
+
+[Mozilla/4.0 (compatible; Win32)]
+Parent=General Crawlers
+Browser=Unknown Crawler
+isBanned=true
+
+[Mozilla/4.1]
+Parent=General Crawlers
+isBanned=true
+
+[Mozilla/4.5]
+Parent=General Crawlers
+isBanned=true
+
+[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0]
+Parent=General Crawlers
+Browser=Gnomit
+isBanned=true
+
+[Mozilla/5.0 (compatible; AboutUsBot/*)]
+Parent=General Crawlers
+Browser=AboutUsBot
+isBanned=true
+
+[Mozilla/5.0 (compatible; BuzzRankingBot/*)]
+Parent=General Crawlers
+Browser=BuzzRankingBot
+isBanned=true
+
+[Mozilla/5.0 (compatible; Diffbot/0.1;  http://www.diffbot.com)]
+Parent=General Crawlers
+Browser=Diffbot
+
+[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)]
+Parent=General Crawlers
+Browser=FirstSearchBot
+
+[mozilla/5.0 (compatible; genevabot  http://www.healthdash.com)]
+Parent=General Crawlers
+Browser=Healthdash
+
+[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*]
+Parent=General Crawlers
+Browser=JadynAveBot
+isBanned=true
+
+[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)]
+Parent=General Crawlers
+Browser=Kyluka
+
+[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)]
+Parent=General Crawlers
+Browser=MJ12bot
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)]
+Parent=General Crawlers
+Browser=Europe Web Archive
+
+[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)]
+Parent=General Crawlers
+Browser=Seznam screenshot-generator
+isBanned=true
+
+[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)]
+Parent=General Crawlers
+Browser=Twingly Recon
+
+[Mozilla/5.0 (compatible; unwrapbot/2.*;  http://www.unwrap.jp*)]
+Parent=General Crawlers
+Browser=UnWrap
+
+[Mozilla/5.0 (compatible; Vermut*)]
+Parent=General Crawlers
+Browser=Vermut
+
+[Mozilla/5.0 (compatible; Webbot/*)]
+Parent=General Crawlers
+Browser=Webbot.ru
+isBanned=true
+
+[n4p_bot*]
+Parent=General Crawlers
+Browser=n4p_bot
+
+[nabot*]
+Parent=General Crawlers
+Browser=Nabot
+
+[NetCarta_WebMapper/*]
+Parent=General Crawlers
+Browser=NetCarta_WebMapper
+isBanned=true
+
+[NetID.com Bot*]
+Parent=General Crawlers
+Browser=NetID.com Bot
+isBanned=true
+
+[neTVision AG andreas.heidoetting@thomson-webcast.net]
+Parent=General Crawlers
+Browser=neTVision
+
+[NextopiaBOT*]
+Parent=General Crawlers
+Browser=NextopiaBOT
+
+[nicebot]
+Parent=General Crawlers
+Browser=nicebot
+isBanned=true
+
+[niXXieBot?Foster*]
+Parent=General Crawlers
+Browser=niXXiebot-Foster
+
+[Nozilla/P.N (Just for IDS woring)]
+Parent=General Crawlers
+Browser=Nozilla/P.N
+isBanned=true
+
+[Nudelsalat/*]
+Parent=General Crawlers
+Browser=Nudelsalat
+isBanned=true
+
+[NV32ts]
+Parent=General Crawlers
+Browser=NV32ts
+isBanned=true
+
+[Ocelli/*]
+Parent=General Crawlers
+Browser=Ocelli
+
+[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)]
+Parent=General Crawlers
+Browser=OpenTaggerBot
+
+[Oracle Enterprise Search]
+Parent=General Crawlers
+Browser=Oracle Enterprise Search
+isBanned=true
+
+[Oracle Ultra Search]
+Parent=General Crawlers
+Browser=Oracle Ultra Search
+
+[Pajaczek/*]
+Parent=General Crawlers
+Browser=Pajaczek
+isBanned=true
+
+[panscient.com]
+Parent=General Crawlers
+Browser=panscient.com
+isBanned=true
+
+[Patwebbot (http://www.herz-power.de/technik.html)]
+Parent=General Crawlers
+Browser=Patwebbot
+
+[PDFBot (crawler@pdfind.com)]
+Parent=General Crawlers
+Browser=PDFBot
+
+[Pete-Spider/1.*]
+Parent=General Crawlers
+Browser=Pete-Spider
+isBanned=true
+
+[PhpDig/*]
+Parent=General Crawlers
+Browser=PhpDig
+
+[PlantyNet_WebRobot*]
+Parent=General Crawlers
+Browser=PlantyNet
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt
+
+[PluckItCrawler/1.0 (*)]
+Parent=General Crawlers
+isMobileDevice=true
+
+[PMAFind]
+Parent=General Crawlers
+Browser=PMAFind
+isBanned=true
+
+[Poodle_predictor_1.0]
+Parent=General Crawlers
+Browser=Poodle Predictor
+
+[QuickFinder Crawler]
+Parent=General Crawlers
+Browser=QuickFinder
+isBanned=true
+
+[Radiation Retriever*]
+Parent=General Crawlers
+Browser=Radiation Retriever
+isBanned=true
+
+[RedCarpet/*]
+Parent=General Crawlers
+Browser=RedCarpet
+isBanned=true
+
+[RixBot (http://babelserver.org/rix)]
+Parent=General Crawlers
+Browser=RixBot
+
+[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*]
+Parent=General Crawlers
+Browser=TinyURL
+
+[SBIder/*]
+Parent=General Crawlers
+Browser=SiteSell
+
+[ScollSpider/2.*]
+Parent=General Crawlers
+Browser=ScollSpider
+isBanned=true
+
+[Search Fst]
+Parent=General Crawlers
+Browser=Search Fst
+
+[searchbot admin@google.com]
+Parent=General Crawlers
+Browser=searchbot
+isBanned=true
+
+[Seeker.lookseek.com]
+Parent=General Crawlers
+Browser=LookSeek
+isBanned=true
+
+[semanticdiscovery/*]
+Parent=General Crawlers
+Browser=Semantic Discovery
+
+[SeznamBot/*]
+Parent=General Crawlers
+Browser=SeznamBot
+isBanned=true
+
+[Shelob (shelob@gmx.net)]
+Parent=General Crawlers
+Browser=Shelob
+isBanned=true
+
+[shelob v1.*]
+Parent=General Crawlers
+Browser=shelob
+isBanned=true
+
+[ShopWiki/1.0*]
+Parent=General Crawlers
+Browser=ShopWiki
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[ShowXML/1.0 libwww/5.4.0]
+Parent=General Crawlers
+Browser=ShowXML
+isBanned=true
+
+[sitecheck.internetseer.com*]
+Parent=General Crawlers
+Browser=Internetseer
+
+[SMBot/*]
+Parent=General Crawlers
+Browser=SMBot
+
+[sohu*]
+Parent=General Crawlers
+Browser=sohu-search
+isBanned=true
+
+[SpankBot*]
+Parent=General Crawlers
+Browser=SpankBot
+isBanned=true
+
+[spider (tspyyp@tom.com)]
+Parent=General Crawlers
+Browser=spider (tspyyp@tom.com)
+isBanned=true
+
+[Sunrise/0.*]
+Parent=General Crawlers
+Browser=Sunrise
+isBanned=true
+
+[Superpages URL Verification Engine]
+Parent=General Crawlers
+Browser=Superpages
+
+[Surf Knight]
+Parent=General Crawlers
+Browser=Surf Knight
+isBanned=true
+
+[SurveyBot/*]
+Parent=General Crawlers
+Browser=SurveyBot
+isBanned=true
+
+[SynapticSearch/AI Crawler 1.?]
+Parent=General Crawlers
+Browser=SynapticSearch
+isBanned=true
+
+[SyncMgr]
+Parent=General Crawlers
+Browser=SyncMgr
+
+[Tagyu Agent/1.0]
+Parent=General Crawlers
+Browser=Tagyu
+
+[Talkro Web-Shot/*]
+Parent=General Crawlers
+Browser=Talkro Web-Shot
+isBanned=true
+
+[Tecomi Bot (http://www.tecomi.com/bot.htm)]
+Parent=General Crawlers
+Browser=Tecomi
+
+[TheInformant*]
+Parent=General Crawlers
+Browser=TheInformant
+isBanned=true
+
+[Toata dragostea*]
+Parent=General Crawlers
+Browser=Toata dragostea
+isBanned=true
+
+[Tutorial Crawler*]
+Parent=General Crawlers
+isBanned=true
+
+[UbiCrawler/*]
+Parent=General Crawlers
+Browser=UbiCrawler
+
+[UCmore]
+Parent=General Crawlers
+Browser=UCmore
+
+[User*Agent:*]
+Parent=General Crawlers
+isBanned=true
+
+[USER_AGENT]
+Parent=General Crawlers
+Browser=USER_AGENT
+isBanned=true
+
+[VadixBot]
+Parent=General Crawlers
+Browser=VadixBot
+
+[VengaBot/*]
+Parent=General Crawlers
+Browser=VengaBot
+isBanned=true
+
+[Visicom Toolbar]
+Parent=General Crawlers
+Browser=Visicom Toolbar
+
+[W3C-WebCon/*]
+Parent=General Crawlers
+Browser=W3C-WebCon
+
+[Webclipping.com]
+Parent=General Crawlers
+Browser=Webclipping.com
+isBanned=true
+
+[webcollage/*]
+Parent=General Crawlers
+Browser=WebCollage
+isBanned=true
+
+[WebCrawler_1.*]
+Parent=General Crawlers
+Browser=WebCrawler
+
+[WebFilter Robot*]
+Parent=General Crawlers
+Browser=WebFilter Robot
+
+[WeBoX/*]
+Parent=General Crawlers
+Browser=WeBoX
+
+[WebTrends/*]
+Parent=General Crawlers
+Browser=WebTrends
+
+[West Wind Internet Protocols*]
+Parent=General Crawlers
+Browser=Versatel
+isBanned=true
+
+[WhizBang]
+Parent=General Crawlers
+Browser=WhizBang
+
+[Willow Internet Crawler by Twotrees V*]
+Parent=General Crawlers
+Browser=Willow Internet Crawler
+
+[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)]
+Parent=General Crawlers
+Browser=WIRE
+isBanned=true
+
+[www.fi crawler, contact crawler@www.fi]
+Parent=General Crawlers
+Browser=www.fi crawler
+
+[Xerka WebBot v1.*]
+Parent=General Crawlers
+Browser=Xerka
+isBanned=true
+
+[XML Sitemaps Generator*]
+Parent=General Crawlers
+Browser=XML Sitemaps Generator
+
+[XSpider*]
+Parent=General Crawlers
+Browser=XSpider
+isBanned=true
+
+[YooW!/* (?http://www.yoow.eu)]
+Parent=General Crawlers
+Browser=YooW!
+isBanned=true
+
+[HiddenMarket-*]
+Parent=General RSS
+Browser=HiddenMarket
+isBanned=true
+
+[FOTOCHECKER]
+Parent=Image Crawlers
+Browser=FOTOCHECKER
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines
+
+[Search Engines]
+Parent=DefaultProperties
+Browser=Search Engines
+Crawler=true
+
+[*FDSE robot*]
+Parent=Search Engines
+Browser=FDSE Robot
+
+[*Fluffy the spider*]
+Parent=Search Engines
+Browser=SearchHippo
+
+[Abacho*]
+Parent=Search Engines
+Browser=Abacho
+
+[ah-ha.com crawler (crawler@ah-ha.com)]
+Parent=Search Engines
+Browser=Ah-Ha
+
+[AIBOT/*]
+Parent=Search Engines
+Browser=21Seek.Com
+
+[ALeadSoftbot/*]
+Parent=Search Engines
+Browser=ALeadSoftbot
+
+[Amfibibot/*]
+Parent=Search Engines
+Browser=Amfibi
+
+[AnswerBus (http://www.answerbus.com/)]
+Parent=Search Engines
+
+[antibot-V*]
+Parent=Search Engines
+Browser=antibot
+
+[appie*(www.walhello.com)]
+Parent=Search Engines
+Browser=Walhello
+
+[ASPSeek/*]
+Parent=Search Engines
+Browser=ASPSeek
+
+[BigCliqueBOT/*]
+Parent=Search Engines
+Browser=BigClique.com/BigClic.com
+
+[Blaiz-Bee/*]
+Parent=Search Engines
+Browser=RawGrunt
+
+[btbot/*]
+Parent=Search Engines
+Browser=Bit Torrent Search Engine
+
+[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)]
+Parent=Search Engines
+Browser=Busiversebot
+isBanned=true
+
+[CatchBot/*;  http://www.catchbot.com]
+Parent=Search Engines
+Browser=CatchBot
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[CipinetBot (http://www.cipinet.com/bot.html)]
+Parent=Search Engines
+Browser=CipinetBot
+
+[Cogentbot/1.?*]
+Parent=Search Engines
+Browser=Cogentbot
+
+[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)]
+Parent=Search Engines
+Browser=SqwidgeBot
+
+[cosmos*]
+Parent=Search Engines
+Browser=Xyleme
+
+[Deepindex]
+Parent=Search Engines
+Browser=Deepindex
+
+[DiamondBot]
+Parent=Search Engines
+Browser=DiamondBot
+
+[Dumbot*]
+Parent=Search Engines
+Browser=Dumbot
+Version=0.2
+MajorVer=0
+MinorVer=2
+Beta=true
+
+[Eule?Robot*]
+Parent=Search Engines
+Browser=Eule-Robot
+
+[Faxobot/*]
+Parent=Search Engines
+Browser=Faxo
+
+[Filangy/*]
+Parent=Search Engines
+Browser=Filangy
+
+[flatlandbot/*]
+Parent=Search Engines
+Browser=Flatland
+
+[Fooky.com/ScorpionBot/ScoutOut;*]
+Parent=Search Engines
+Browser=ScorpionBot
+isBanned=true
+
+[FyberSpider*]
+Parent=Search Engines
+Browser=FyberSpider
+isBanned=true
+
+[Gaisbot/*]
+Parent=Search Engines
+Browser=Gaisbot
+
+[gazz/*(gazz@nttr.co.jp)]
+Parent=Search Engines
+Browser=gazz
+
+[geniebot*]
+Parent=Search Engines
+Browser=GenieKnows
+
+[GOFORITBOT (?http://www.goforit.com/about/?)]
+Parent=Search Engines
+Browser=GoForIt
+
+[GoGuidesBot/*]
+Parent=Search Engines
+Browser=GoGuidesBot
+
+[GroschoBot/*]
+Parent=Search Engines
+Browser=GroschoBot
+
+[GurujiBot/1.*]
+Parent=Search Engines
+Browser=GurujiBot
+isBanned=true
+
+[HenryTheMiragoRobot*]
+Parent=Search Engines
+Browser=Mirago
+
+[HolmesBot (http://holmes.ge)]
+Parent=Search Engines
+Browser=HolmesBot
+
+[Hotzonu/*]
+Parent=Search Engines
+Browser=Hotzonu
+
+[HyperEstraier/*]
+Parent=Search Engines
+Browser=HyperEstraier
+isBanned=true
+
+[i1searchbot/*]
+Parent=Search Engines
+Browser=i1searchbot
+
+[IIITBOT/1.*]
+Parent=Search Engines
+Browser=Indian Language Web Search Engine
+
+[Iltrovatore-?etaccio/*]
+Parent=Search Engines
+Browser=Iltrovatore-Setaccio
+
+[InfociousBot (?http://corp.infocious.com/tech_crawler.php)]
+Parent=Search Engines
+Browser=InfociousBot
+isBanned=true
+
+[Infoseek SideWinder/*]
+Parent=Search Engines
+Browser=Infoseek
+
+[iSEEKbot/*]
+Parent=Search Engines
+Browser=iSEEKbot
+
+[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)]
+Parent=Search Engines
+Browser=Knight
+
+[Kolinka Forum Search (www.kolinka.com)]
+Parent=Search Engines
+Browser=Kolinka Forum Search
+isBanned=true
+
+[KRetrieve/]
+Parent=Search Engines
+Browser=KRetrieve
+isBanned=true
+
+[LapozzBot/*]
+Parent=Search Engines
+Browser=LapozzBot
+
+[Linknzbot*]
+Parent=Search Engines
+Browser=Linknzbot
+
+[LocalcomBot/*]
+Parent=Search Engines
+Browser=LocalcomBot
+
+[Mail.Ru/1.0]
+Parent=Search Engines
+Browser=Mail.Ru
+
+[MaSagool/*]
+Parent=Search Engines
+Browser=Sagoo
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[miniRank/*]
+Parent=Search Engines
+Browser=miniRank
+
+[Mnogosearch*]
+Parent=Search Engines
+Browser=Mnogosearch
+
+[Mozilla/0.9* no dos :) (Linux)]
+Parent=Search Engines
+Browser=goliat
+isBanned=true
+
+[Mozilla/4.0 (compatible; Arachmo)]
+Parent=Search Engines
+Browser=Arachmo
+
+[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)]
+Parent=Search Engines
+Browser=ThunderStone
+isBanned=true
+
+[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)]
+Parent=Search Engines
+Browser=Girafabot
+Win32=true
+
+[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)]
+Parent=Search Engines
+Browser=Vagabondo
+
+[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)]
+Parent=Search Engines
+Browser=Qihoo
+
+[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)]
+Parent=Search Engines
+Browser=Inxight Software
+
+[Mozilla/5.0 (*) VoilaBot*]
+Parent=Search Engines
+Browser=VoilaBot
+isBanned=true
+
+[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)]
+Parent=Search Engines
+Browser=ActiveTouristBot
+
+[Mozilla/5.0 (compatible; Butterfly/1.0; *)*]
+Parent=Search Engines
+Browser=Butterfly
+
+[Mozilla/5.0 (compatible; Charlotte/*; *)]
+Parent=Search Engines
+Browser=Charlotte
+Beta=true
+isBanned=true
+
+[Mozilla/5.0 (compatible; CXL-FatAssANT*)]
+Parent=Search Engines
+Browser=FatAssANT
+
+[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)]
+Parent=Search Engines
+Browser=DBLBot
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (compatible; EARTHCOM.info/*)]
+Parent=Search Engines
+Browser=EARTHCOM
+
+[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)]
+Parent=Search Engines
+Browser=Lipperhey Spider
+
+[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)]
+Parent=Search Engines
+Browser=MojeekBot
+
+[Mozilla/5.0 (compatible; NLCrawler/*]
+Parent=Search Engines
+Browser=Northern Light Web Search
+
+[Mozilla/5.0 (compatible; OsO;*]
+Parent=Search Engines
+Browser=Octopodus
+isBanned=true
+
+[Mozilla/5.0 (compatible; Pogodak.*)]
+Parent=Search Engines
+Browser=Pogodak
+
+[Mozilla/5.0 (compatible; Quantcastbot/1.*)]
+Parent=Search Engines
+Browser=Quantcastbot
+
+[Mozilla/5.0 (compatible; ScoutJet;  *http://www.scoutjet.com/)]
+Parent=Search Engines
+Browser=ScoutJet
+
+[Mozilla/5.0 (compatible; Scrubby/*;  http://www.scrubtheweb.com/abs/meta-check.html)]
+Parent=Search Engines
+Browser=Scrubby
+isBanned=true
+
+[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)]
+Parent=Search Engines
+Browser=YoudaoBot
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (Twiceler*)]
+Parent=Search Engines
+Browser=Twiceler
+isBanned=true
+
+[Mozilla/5.0 CostaCider Search*]
+Parent=Search Engines
+Browser=CostaCider Search
+
+[Mozilla/5.0 GurujiBot/1.0 (*)]
+Parent=Search Engines
+Browser=GurujiBot
+
+[NavissoBot]
+Parent=Search Engines
+Browser=NavissoBot
+
+[NextGenSearchBot*(for information visit *)]
+Parent=Search Engines
+Browser=ZoomInfo
+isBanned=true
+
+[Norbert the Spider(Burf.com)]
+Parent=Search Engines
+Browser=Norbert the Spider
+
+[NuSearch Spider*]
+Parent=Search Engines
+Browser=nuSearch
+
+[ObjectsSearch/*]
+Parent=Search Engines
+Browser=ObjectsSearch
+
+[OpenISearch/1.*]
+Parent=Search Engines
+Browser=OpenISearch (Amazon)
+
+[Pagebull http://www.pagebull.com/]
+Parent=Search Engines
+Browser=Pagebull
+
+[PEERbot*]
+Parent=Search Engines
+Browser=PEERbot
+
+[Pompos/*]
+Parent=Search Engines
+Browser=Pompos
+
+[Popdexter/*]
+Parent=Search Engines
+Browser=Popdex
+
+[Qweery*]
+Parent=Search Engines
+Browser=QweeryBot
+
+[RedCell/* (*)]
+Parent=Search Engines
+Browser=RedCell
+
+[Scrubby/*]
+Parent=Search Engines
+Browser=Scrub The Web
+
+[Search-10/*]
+Parent=Search Engines
+Browser=Search-10
+
+[search.ch*]
+Parent=Search Engines
+Browser=Swiss Search Engine
+
+[Searchmee! Spider*]
+Parent=Search Engines
+Browser=Searchmee!
+
+[Seekbot/*]
+Parent=Search Engines
+Browser=Seekbot
+
+[SiteSpider  (http://www.SiteSpider.com/)]
+Parent=Search Engines
+Browser=SiteSpider
+
+[Spinne/*]
+Parent=Search Engines
+Browser=Spinne
+
+[sproose/*]
+Parent=Search Engines
+Browser=Sproose
+
+[Sqeobot/0.*]
+Parent=Search Engines
+Browser=Branzel
+isBanned=true
+
+[SquigglebotBot/*]
+Parent=Search Engines
+Browser=SquigglebotBot
+isBanned=true
+
+[StackRambler/*]
+Parent=Search Engines
+Browser=StackRambler
+
+[SygolBot*]
+Parent=Search Engines
+Browser=SygolBot
+
+[SynoBot]
+Parent=Search Engines
+Browser=SynoBot
+
+[Szukacz/*]
+Parent=Search Engines
+Browser=Szukacz
+
+[Tarantula/*]
+Parent=Search Engines
+Browser=Tarantula
+isBanned=true
+
+[TerrawizBot/*]
+Parent=Search Engines
+Browser=TerrawizBot
+isBanned=true
+
+[Tkensaku/*]
+Parent=Search Engines
+Browser=Tkensaku
+
+[TMCrawler]
+Parent=Search Engines
+Browser=TMCrawler
+isBanned=true
+
+[Twingly Recon]
+Parent=Search Engines
+Browser=Twingly Recon
+isBanned=true
+
+[updated/*]
+Parent=Search Engines
+Browser=Updated!
+
+[URL Spider Pro/*]
+Parent=Search Engines
+Browser=URL Spider Pro
+
+[URL Spider SQL*]
+Parent=Search Engines
+Browser=Innerprise Enterprise Search
+
+[VMBot/*]
+Parent=Search Engines
+Browser=VMBot
+
+[voyager/2.0 (http://www.kosmix.com/html/crawler.html)]
+Parent=Search Engines
+Browser=Voyager
+
+[wadaino.jp-crawler*]
+Parent=Search Engines
+Browser=wadaino.jp
+isBanned=true
+
+[WebAlta Crawler/*]
+Parent=Search Engines
+Browser=WebAlta Crawler
+isBanned=true
+
+[WebCorp/*]
+Parent=Search Engines
+Browser=WebCorp
+isBanned=true
+
+[webcrawl.net]
+Parent=Search Engines
+Browser=webcrawl.net
+
+[WISEbot/*]
+Parent=Search Engines
+Browser=WISEbot
+isBanned=true
+
+[Wotbox/*]
+Parent=Search Engines
+Browser=Wotbox
+
+[www.zatka.com]
+Parent=Search Engines
+Browser=Zatka
+
+[WWWeasel Robot v*]
+Parent=Search Engines
+Browser=World Wide Weasel
+
+[YadowsCrawler*]
+Parent=Search Engines
+Browser=YadowsCrawler
+
+[YodaoBot/*]
+Parent=Search Engines
+Browser=YodaoBot
+isBanned=true
+
+[ZeBot_www.ze.bz*]
+Parent=Search Engines
+Browser=ZE.bz
+
+[zibber-v*]
+Parent=Search Engines
+Browser=Zibb
+
+[ZipppBot/*]
+Parent=Search Engines
+Browser=ZipppBot
+
+[ATA-Translation-Service]
+Parent=Translators
+Browser=ATA-Translation-Service
+
+[GJK_Browser_Check]
+Parent=Version Checkers
+Browser=GJK_Browser_Check
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena
+
+[Hatena]
+Parent=DefaultProperties
+Browser=Hatena
+isBanned=true
+Crawler=true
+
+[Feed::Find/*]
+Parent=Hatena
+Browser=Feed Find
+isSyndicationReader=true
+
+[Hatena Antenna/*]
+Parent=Hatena
+Browser=Hatena Antenna
+
+[Hatena Bookmark/*]
+Parent=Hatena
+Browser=Hatena Bookmark
+
+[Hatena RSS/*]
+Parent=Hatena
+Browser=Hatena RSS
+isSyndicationReader=true
+
+[Hatena::Crawler/*]
+Parent=Hatena
+Browser=Hatena Crawler
+
+[HatenaScreenshot*]
+Parent=Hatena
+Browser=HatenaScreenshot
+
+[URI::Fetch/*]
+Parent=Hatena
+Browser=URI::Fetch
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive
+
+[Internet Archive]
+Parent=DefaultProperties
+Browser=Internet Archive
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[*heritrix*]
+Parent=Internet Archive
+Browser=Heritrix
+isBanned=true
+
+[ia_archiver*]
+Parent=Internet Archive
+Browser=Internet Archive
+
+[InternetArchive/*]
+Parent=Internet Archive
+Browser=InternetArchive
+
+[Mozilla/5.0 (compatible; archive.org_bot/1.*)]
+Parent=Internet Archive
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch
+
+[Nutch]
+Parent=DefaultProperties
+Browser=Nutch
+isBanned=true
+Crawler=true
+
+[*Nutch*]
+Parent=Nutch
+isBanned=true
+
+[CazoodleBot/*]
+Parent=Nutch
+Browser=CazoodleBot
+
+[LOOQ/0.1*]
+Parent=Nutch
+Browser=LOOQ
+
+[Nutch/0.? (OpenX Spider)]
+Parent=Nutch
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo
+
+[Webaroo]
+Parent=DefaultProperties
+Browser=Webaroo
+
+[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)]
+Parent=Webaroo
+Browser=Webaroo
+
+[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*]
+Parent=Webaroo
+Browser=Webaroo
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press
+
+[Word Press]
+Parent=DefaultProperties
+Browser=Word Press
+Alpha=true
+Beta=true
+Win16=true
+Win32=true
+Win64=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+isBanned=true
+isMobileDevice=true
+isSyndicationReader=true
+Crawler=true
+
+[WordPress-B-/2.*]
+Parent=Word Press
+Browser=WordPress-B
+
+[WordPress-Do-P-/2.*]
+Parent=Word Press
+Browser=WordPress-Do-P
+
+[BlueCoat ProxySG]
+Parent=Blue Coat Systems
+Browser=BlueCoat ProxySG
+
+[CerberianDrtrs/*]
+Parent=Blue Coat Systems
+Browser=Cerberian
+
+[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)]
+Parent=Blue Coat Systems
+Browser=Cerberian
+
+[Mozilla/4.0 (compatible; Cerberian Drtrs*)]
+Parent=Blue Coat Systems
+Browser=Cerberian
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)]
+Parent=Blue Coat Systems
+Browser=Bluecoat
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism
+
+[Copyright/Plagiarism]
+Parent=DefaultProperties
+Browser=Copyright/Plagiarism
+isBanned=true
+Crawler=true
+
+[BDFetch]
+Parent=Copyright/Plagiarism
+Browser=BDFetch
+
+[copyright sheriff (*)]
+Parent=Copyright/Plagiarism
+Browser=copyright sheriff
+
+[CopyRightCheck*]
+Parent=Copyright/Plagiarism
+Browser=CopyRightCheck
+
+[FairAd Client*]
+Parent=Copyright/Plagiarism
+Browser=FairAd Client
+
+[iCopyright Conductor*]
+Parent=Copyright/Plagiarism
+Browser=iCopyright Conductor
+
+[IPiumBot laurion(dot)com]
+Parent=Copyright/Plagiarism
+Browser=IPiumBot
+
+[IWAgent/*]
+Parent=Copyright/Plagiarism
+Browser=Brand Protect
+
+[Mozilla/5.0 (compatible; DKIMRepBot/*)]
+Parent=Copyright/Plagiarism
+Browser=DKIMRepBot
+
+[oBot]
+Parent=Copyright/Plagiarism
+Browser=oBot
+
+[SlySearch/*]
+Parent=Copyright/Plagiarism
+Browser=SlySearch
+
+[TurnitinBot/*]
+Parent=Copyright/Plagiarism
+Browser=TurnitinBot
+
+[TutorGigBot/*]
+Parent=Copyright/Plagiarism
+Browser=TutorGig
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools
+
+[DNS Tools]
+Parent=DefaultProperties
+Browser=DNS Tools
+Crawler=true
+
+[Domain Dossier utility*]
+Parent=DNS Tools
+Browser=Domain Dossier
+
+[Mozilla/5.0 (compatible; DNS-Digger/*)]
+Parent=DNS Tools
+Browser=DNS-Digger
+
+[OpenDNS Domain Crawler noc@opendns.com]
+Parent=DNS Tools
+Browser=OpenDNS Domain Crawler
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers
+
+[Download Managers]
+Parent=DefaultProperties
+Browser=Download Managers
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[AndroidDownloadManager]
+Parent=Download Managers
+Browser=Android Download Manager
+
+[AutoMate5]
+Parent=Download Managers
+Browser=AutoMate5
+
+[Beamer*]
+Parent=Download Managers
+Browser=Beamer
+
+[BitBeamer/*]
+Parent=Download Managers
+Browser=BitBeamer
+
+[BitTorrent/*]
+Parent=Download Managers
+Browser=BitTorrent
+
+[DA *]
+Parent=Download Managers
+Browser=Download Accelerator
+
+[Download Demon*]
+Parent=Download Managers
+Browser=Download Demon
+
+[Download Express*]
+Parent=Download Managers
+Browser=Download Express
+
+[Download Master*]
+Parent=Download Managers
+Browser=Download Master
+
+[Download Ninja*]
+Parent=Download Managers
+Browser=Download Ninja
+
+[Download Wonder*]
+Parent=Download Managers
+Browser=Download Wonder
+
+[DownloadSession*]
+Parent=Download Managers
+Browser=DownloadSession
+
+[EasyDL/*]
+Parent=Download Managers
+Browser=EasyDL
+
+[FDM 1.x]
+Parent=Download Managers
+Browser=Free Download Manager
+
+[FlashGet]
+Parent=Download Managers
+Browser=FlashGet
+
+[FreshDownload/*]
+Parent=Download Managers
+Browser=FreshDownload
+
+[GetRight/*]
+Parent=Download Managers
+Browser=GetRight
+
+[GetRightPro/*]
+Parent=Download Managers
+Browser=GetRightPro
+
+[GetSmart/*]
+Parent=Download Managers
+Browser=GetSmart
+
+[Go!Zilla*]
+Parent=Download Managers
+Browser=GoZilla
+
+[Gozilla/*]
+Parent=Download Managers
+Browser=Gozilla
+
+[Internet Ninja*]
+Parent=Download Managers
+Browser=Internet Ninja
+
+[Kontiki Client*]
+Parent=Download Managers
+Browser=Kontiki Client
+
+[lftp/3.2.1]
+Parent=Download Managers
+Browser=lftp
+
+[LightningDownload/*]
+Parent=Download Managers
+Browser=LightningDownload
+
+[LMQueueBot/*]
+Parent=Download Managers
+Browser=LMQueueBot
+
+[MetaProducts Download Express/*]
+Parent=Download Managers
+Browser=Download Express
+
+[Mozilla/4.0 (compatible; Getleft*)]
+Parent=Download Managers
+Browser=Getleft
+
+[Myzilla]
+Parent=Download Managers
+Browser=Myzilla
+
+[Net Vampire/*]
+Parent=Download Managers
+Browser=Net Vampire
+
+[Net_Vampire*]
+Parent=Download Managers
+Browser=Net_Vampire
+
+[NetAnts*]
+Parent=Download Managers
+Browser=NetAnts
+
+[NetPumper*]
+Parent=Download Managers
+Browser=NetPumper
+
+[NetSucker*]
+Parent=Download Managers
+Browser=NetSucker
+
+[NetZip Downloader*]
+Parent=Download Managers
+Browser=NetZip Downloader
+
+[NexTools WebAgent*]
+Parent=Download Managers
+Browser=NexTools WebAgent
+
+[Offline Downloader*]
+Parent=Download Managers
+Browser=Offline Downloader
+
+[P3P Client]
+Parent=Download Managers
+Browser=P3P Client
+
+[PageDown*]
+Parent=Download Managers
+Browser=PageDown
+
+[PicaLoader*]
+Parent=Download Managers
+Browser=PicaLoader
+
+[Prozilla*]
+Parent=Download Managers
+Browser=Prozilla
+
+[RealDownload/*]
+Parent=Download Managers
+Browser=RealDownload
+
+[sEasyDL/*]
+Parent=Download Managers
+Browser=EasyDL
+
+[shareaza*]
+Parent=Download Managers
+Browser=shareaza
+
+[SmartDownload/*]
+Parent=Download Managers
+Browser=SmartDownload
+
+[SpeedDownload/*]
+Parent=Download Managers
+Browser=Speed Download
+
+[Star*Downloader/*]
+Parent=Download Managers
+Browser=StarDownloader
+
+[STEROID Download]
+Parent=Download Managers
+Browser=STEROID Download
+
+[SuperBot/*]
+Parent=Download Managers
+Browser=SuperBot
+
+[Vegas95/*]
+Parent=Download Managers
+Browser=Vegas95
+
+[WebZIP*]
+Parent=Download Managers
+Browser=WebZIP
+
+[Wget*]
+Parent=Download Managers
+Browser=Wget
+
+[WinTools]
+Parent=Download Managers
+Browser=WinTools
+
+[Xaldon WebSpider*]
+Parent=Download Managers
+Browser=Xaldon WebSpider
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters
+
+[E-Mail Harvesters]
+Parent=DefaultProperties
+Browser=E-Mail Harvesters
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[*E-Mail Address Extractor*]
+Parent=E-Mail Harvesters
+Browser=E-Mail Address Extractor
+
+[*Larbin*]
+Parent=E-Mail Harvesters
+Browser=Larbin
+
+[*www4mail/*]
+Parent=E-Mail Harvesters
+Browser=www4mail
+
+[8484 Boston Project*]
+Parent=E-Mail Harvesters
+Browser=8484 Boston Project
+
+[CherryPicker*/*]
+Parent=E-Mail Harvesters
+Browser=CherryPickerElite
+
+[Chilkat/*]
+Parent=E-Mail Harvesters
+Browser=Chilkat
+
+[ContactBot/*]
+Parent=E-Mail Harvesters
+Browser=ContactBot
+
+[eCatch*]
+Parent=E-Mail Harvesters
+Browser=eCatch
+
+[EmailCollector*]
+Parent=E-Mail Harvesters
+Browser=E-Mail Collector
+
+[EMAILsearcher]
+Parent=E-Mail Harvesters
+Browser=EMAILsearcher
+
+[EmailSiphon*]
+Parent=E-Mail Harvesters
+Browser=E-Mail Siphon
+
+[EmailWolf*]
+Parent=E-Mail Harvesters
+Browser=EMailWolf
+
+[Epsilon SoftWorks' MailMunky]
+Parent=E-Mail Harvesters
+Browser=MailMunky
+
+[ExtractorPro*]
+Parent=E-Mail Harvesters
+Browser=ExtractorPro
+
+[Franklin Locator*]
+Parent=E-Mail Harvesters
+Browser=Franklin Locator
+
+[Missigua Locator*]
+Parent=E-Mail Harvesters
+Browser=Missigua Locator
+
+[Mozilla/4.0 (compatible; Advanced Email Extractor*)]
+Parent=E-Mail Harvesters
+Browser=Advanced Email Extractor
+
+[Netprospector*]
+Parent=E-Mail Harvesters
+Browser=Netprospector
+
+[ProWebWalker*]
+Parent=E-Mail Harvesters
+Browser=ProWebWalker
+
+[sna-0.0.*]
+Parent=E-Mail Harvesters
+Browser=Mike Elliott's E-Mail Harvester
+
+[WebEnhancer*]
+Parent=E-Mail Harvesters
+Browser=WebEnhancer
+
+[WebMiner*]
+Parent=E-Mail Harvesters
+Browser=WebMiner
+
+[ZIBB Crawler (email address / WWW address)]
+Parent=E-Mail Harvesters
+Browser=ZIBB Crawler
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs
+
+[Feeds Blogs]
+Parent=DefaultProperties
+Browser=Feeds Blogs
+isSyndicationReader=true
+Crawler=true
+
+[Bloglines Title Fetch/*]
+Parent=Feeds Blogs
+Browser=Bloglines Title Fetch
+
+[Bloglines/* (http://www.bloglines.com*)]
+Parent=Feeds Blogs
+Browser=BlogLines Web
+
+[BlogPulseLive (support@blogpulse.com)]
+Parent=Feeds Blogs
+Browser=BlogPulseLive
+
+[blogsearchbot-pumpkin-2]
+Parent=Feeds Blogs
+Browser=blogsearchbot-pumpkin
+isSyndicationReader=false
+
+[Irish Blogs Aggregator/*1.0*]
+Parent=Feeds Blogs
+Browser=Irish Blogs Aggregator
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[kinjabot (http://www.kinja.com; *)]
+Parent=Feeds Blogs
+Browser=kinjabot
+
+[Net::Trackback/*]
+Parent=Feeds Blogs
+Browser=Net::Trackback
+
+[Reblog*]
+Parent=Feeds Blogs
+Browser=Reblog
+
+[WordPress/*]
+Parent=Feeds Blogs
+Browser=WordPress
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators
+
+[Feeds Syndicators]
+Parent=DefaultProperties
+Browser=Feeds Syndicators
+isSyndicationReader=true
+
+[*LinkLint*]
+Parent=Feeds Syndicators
+Browser=LinkLint
+
+[*NetNewsWire/*]
+Parent=Feeds Syndicators
+
+[*NetVisualize*]
+Parent=Feeds Syndicators
+Browser=NetVisualize
+
+[AideRSS 2.* (postrank.com)]
+Parent=Feeds Syndicators
+Browser=AideRSS
+
+[AideRSS/2.0 (aiderss.com)]
+Parent=Feeds Syndicators
+Browser=AideRSS
+isBanned=true
+
+[Akregator/*]
+Parent=Feeds Syndicators
+Browser=Akregator
+
+[AppleSyndication/*]
+Parent=Feeds Syndicators
+Browser=Safari RSS
+Platform=MacOSX
+
+[Cocoal.icio.us/* (*)*]
+Parent=Feeds Syndicators
+Browser=Cocoal.icio.us
+isBanned=true
+
+[Feed43 Proxy/* (*)]
+Parent=Feeds Syndicators
+Browser=Feed For Free
+
+[FeedBurner/*]
+Parent=Feeds Syndicators
+Browser=FeedBurner
+
+[FeedDemon/* (*)]
+Parent=Feeds Syndicators
+Browser=FeedDemon
+Platform=Win32
+
+[FeedDigest/* (*)]
+Parent=Feeds Syndicators
+Browser=FeedDigest
+
+[FeedGhost/1.*]
+Parent=Feeds Syndicators
+Browser=FeedGhost
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)]
+Parent=Feeds Syndicators
+Browser=FeedOnFeeds
+Version=0.1
+MajorVer=0
+MinorVer=1
+
+[Feedreader * (Powered by Newsbrain)]
+Parent=Feeds Syndicators
+Browser=Newsbrain
+
+[Feedshow/* (*)]
+Parent=Feeds Syndicators
+Browser=Feedshow
+
+[Feedster Crawler/?.0; Feedster, Inc.]
+Parent=Feeds Syndicators
+Browser=Feedster
+
+[GreatNews/1.0]
+Parent=Feeds Syndicators
+Browser=GreatNews
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Gregarius/*]
+Parent=Feeds Syndicators
+Browser=Gregarius
+
+[intraVnews/*]
+Parent=Feeds Syndicators
+Browser=intraVnews
+
+[JetBrains Omea Reader*]
+Parent=Feeds Syndicators
+Browser=Omea Reader
+isBanned=true
+
+[Liferea/1.5* (Linux; *; http://liferea.sf.net/)]
+Parent=Feeds Syndicators
+Browser=Liferea
+isBanned=true
+
+[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)]
+Parent=Feeds Syndicators
+Browser=FeedFetcher
+Version=0.0
+MajorVer=0
+MinorVer=0
+
+[MagpieRSS/* (*)]
+Parent=Feeds Syndicators
+Browser=MagpieRSS
+
+[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)]
+Parent=Feeds Syndicators
+Browser=Mobitype
+Platform=Win32
+
+[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*]
+Parent=Feeds Syndicators
+Browser=Rojo
+
+[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*]
+Parent=Feeds Syndicators
+Browser=TailRank
+
+[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)]
+Parent=Feeds Syndicators
+Browser=Podtech Network
+
+[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)]
+Parent=Feeds Syndicators
+Browser=Newz Crawler
+
+[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)]
+Parent=Feeds Syndicators
+Browser=RSSMicro
+
+[Mozilla/5.0 (compatible;*newstin.com;*)]
+Parent=Feeds Syndicators
+Browser=NewsTin
+
+[Mozilla/5.0 (RSS Reader Panel)]
+Parent=Feeds Syndicators
+Browser=RSS Reader Panel
+
+[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*]
+Parent=Feeds Syndicators
+Browser=FeedParser
+
+[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*]
+Parent=Feeds Syndicators
+Browser=NewsMonster
+
+[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*]
+Parent=Feeds Syndicators
+Browser=Rojo
+
+[Netvibes (*)]
+Parent=Feeds Syndicators
+Browser=Netvibes
+
+[NewsAlloy/* (*)]
+Parent=Feeds Syndicators
+Browser=NewsAlloy
+
+[Omnipelagos*]
+Parent=Feeds Syndicators
+Browser=Omnipelagos
+
+[Particls]
+Parent=Feeds Syndicators
+Browser=Particls
+
+[Protopage/* (*)]
+Parent=Feeds Syndicators
+Browser=Protopage
+
+[PubSub-RSS-Reader/* (*)]
+Parent=Feeds Syndicators
+Browser=PubSub-RSS-Reader
+
+[RSS Menu/*]
+Parent=Feeds Syndicators
+Browser=RSS Menu
+
+[RssBandit/*]
+Parent=Feeds Syndicators
+Browser=RssBandit
+
+[RssBar/1.2*]
+Parent=Feeds Syndicators
+Browser=RssBar
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[SharpReader/*]
+Parent=Feeds Syndicators
+Browser=SharpReader
+
+[SimplePie/*]
+Parent=Feeds Syndicators
+Browser=SimplePie
+
+[Strategic Board Bot (?http://www.strategicboard.com)]
+Parent=Feeds Syndicators
+Browser=Strategic Board Bot
+isBanned=true
+
+[TargetYourNews.com bot]
+Parent=Feeds Syndicators
+Browser=TargetYourNews
+
+[Technoratibot/*]
+Parent=Feeds Syndicators
+Browser=Technoratibot
+
+[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)]
+Parent=Feeds Syndicators
+Browser=Tumblr RSS syndication
+
+[Windows-RSS-Platform/1.0*]
+Parent=Feeds Syndicators
+Browser=Windows-RSS-Platform
+Version=1.0
+MajorVer=1
+MinorVer=0
+Win32=true
+
+[Wizz RSS News Reader]
+Parent=Feeds Syndicators
+Browser=Wizz
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS
+
+[General RSS]
+Parent=DefaultProperties
+Browser=General RSS
+isSyndicationReader=true
+
+[AideRSS/1.0 (aiderss.com); * subscribers]
+Parent=General RSS
+Browser=AideRSS
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper]
+Parent=General RSS
+Browser=CC Metadata Scaper
+
+[Mozilla/5.0 (compatible) GM RSS Panel]
+Parent=General RSS
+Browser=RSS Panel
+
+[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com]
+Parent=General RSS
+Browser=Inclue
+
+[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*]
+Parent=General RSS
+Browser=Ruunk
+
+[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)]
+Parent=General RSS
+Browser=Windows-RSS-Platform
+Platform=WinVista
+
+[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*)  Arora/0.4]
+Parent=Google Code
+Browser=Arora
+Version=0.4
+MajorVer=0
+MinorVer=4
+Platform=Linux
+CssVersion=2
+supportsCSS=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers
+
+[HTML Validators]
+Parent=DefaultProperties
+Browser=HTML Validators
+Frames=true
+IFrames=true
+Tables=true
+Crawler=true
+
+[(HTML Validator http://www.searchengineworld.com/validator/)]
+Parent=HTML Validators
+Browser=Search Engine World HTML Validator
+
+[FeedValidator/1.3]
+Parent=HTML Validators
+Browser=FeedValidator
+Version=1.3
+MajorVer=1
+MinorVer=3
+
+[Jigsaw/* W3C_CSS_Validator_JFouffa/*]
+Parent=HTML Validators
+Browser=Jigsaw CSS Validator
+
+[Search Engine World Robots.txt Validator*]
+Parent=HTML Validators
+Browser=Search Engine World Robots.txt Validator
+
+[W3C_Validator/*]
+Parent=HTML Validators
+Browser=W3C Validator
+
+[W3CLineMode/*]
+Parent=HTML Validators
+Browser=W3C Line Mode
+
+[Weblide/2.? beta*]
+Parent=HTML Validators
+Browser=Weblide
+Version=2.0
+MajorVer=2
+MinorVer=0
+Beta=true
+
+[WebmasterWorld StickyMail Server Header Checker*]
+Parent=HTML Validators
+Browser=WebmasterWorld Server Header Checker
+
+[WWWC/*]
+Parent=HTML Validators
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers
+
+[Image Crawlers]
+Parent=DefaultProperties
+Browser=Image Crawlers
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[*CFNetwork*]
+Parent=Image Crawlers
+Browser=CFNetwork
+
+[*PhotoStickies/*]
+Parent=Image Crawlers
+Browser=PhotoStickies
+
+[Camcrawler*]
+Parent=Image Crawlers
+Browser=Camcrawler
+
+[CydralSpider/*]
+Parent=Image Crawlers
+Browser=Cydral Web Image Search
+isBanned=true
+
+[Der gro\xdfe BilderSauger*]
+Parent=Image Crawlers
+Browser=Gallery Grabber
+
+[Extreme Picture Finder]
+Parent=Image Crawlers
+Browser=Extreme Picture Finder
+
+[FLATARTS_FAVICO]
+Parent=Image Crawlers
+Browser=FlatArts Favorites Icon Tool
+
+[HTML2JPG Blackbox, http://www.html2jpg.com]
+Parent=Image Crawlers
+Browser=HTML2JPG
+
+[IconSurf/2.*]
+Parent=Image Crawlers
+Browser=IconSurf
+
+[kalooga/KaloogaBot*]
+Parent=Image Crawlers
+Browser=KaloogaBot
+
+[Mister PIX*]
+Parent=Image Crawlers
+Browser=Mister PIX
+
+[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*]
+Parent=Image Crawlers
+Browser=Pandora
+
+[naoFavicon4IE*]
+Parent=Image Crawlers
+Browser=naoFavicon4IE
+
+[pixfinder/*]
+Parent=Image Crawlers
+Browser=pixfinder
+
+[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)]
+Parent=Image Crawlers
+Browser=rssImagesBot
+
+[Web Image Collector*]
+Parent=Image Crawlers
+Browser=Web Image Collector
+
+[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)]
+Parent=Image Crawlers
+Browser=WebImages
+
+[WebPix*]
+Parent=Image Crawlers
+Browser=Custo
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers
+
+[Link Checkers]
+Parent=DefaultProperties
+Browser=Link Checkers
+Frames=true
+IFrames=true
+Tables=true
+Crawler=true
+
+[!Susie (http://www.sync2it.com/susie)]
+Parent=Link Checkers
+Browser=!Susie
+
+[*AgentName/*]
+Parent=Link Checkers
+Browser=AgentName
+
+[*Linkman*]
+Parent=Link Checkers
+Browser=Linkman
+
+[*LinksManager.com*]
+Parent=Link Checkers
+Browser=LinksManager
+
+[*Powermarks/*]
+Parent=Link Checkers
+Browser=Powermarks
+
+[*W3C-checklink/*]
+Parent=Link Checkers
+Browser=W3C Link Checker
+
+[*Web Link Validator*]
+Parent=Link Checkers
+Browser=Web Link Validator
+
+[*Zeus*]
+Parent=Link Checkers
+Browser=Zeus
+isBanned=true
+
+[ActiveBookmark *]
+Parent=Link Checkers
+Browser=ActiveBookmark
+
+[Bookdog/*]
+Parent=Link Checkers
+Browser=Bookdog
+
+[Bookmark Buddy*]
+Parent=Link Checkers
+Browser=Bookmark Buddy
+
+[Bookmark Renewal Check Agent*]
+Parent=Link Checkers
+Browser=Bookmark Renewal Check Agent
+
+[Bookmark search tool*]
+Parent=Link Checkers
+Browser=Bookmark search tool
+
+[Bookmark-Manager]
+Parent=Link Checkers
+Browser=Bookmark-Manager
+
+[Checkbot*]
+Parent=Link Checkers
+Browser=Checkbot
+
+[CheckLinks/*]
+Parent=Link Checkers
+Browser=CheckLinks
+
+[CyberSpyder Link Test/*]
+Parent=Link Checkers
+Browser=CyberSpyder Link Test
+
+[DLC/*]
+Parent=Link Checkers
+Browser=DLC
+
+[DocWeb Link Crawler (http://doc.php.net)]
+Parent=Link Checkers
+Browser=DocWeb Link Crawler
+
+[FavOrg]
+Parent=Link Checkers
+Browser=FavOrg
+
+[Favorites Sweeper v.3.*]
+Parent=Link Checkers
+Browser=Favorites Sweeper
+
+[FindLinks/*]
+Parent=Link Checkers
+Browser=FindLinks
+
+[Funnel Web Profiler*]
+Parent=Link Checkers
+Browser=Funnel Web Profiler
+
+[Html Link Validator (www.lithopssoft.com)]
+Parent=Link Checkers
+Browser=HTML Link Validator
+
+[IECheck]
+Parent=Link Checkers
+Browser=IECheck
+
+[JCheckLinks/*]
+Parent=Link Checkers
+Browser=JCheckLinks
+
+[JRTwine Software Check Favorites Utility]
+Parent=Link Checkers
+Browser=JRTwine
+
+[Link Valet Online*]
+Parent=Link Checkers
+Browser=Link Valet
+isBanned=true
+
+[LinkAlarm/*]
+Parent=Link Checkers
+Browser=LinkAlarm
+
+[Linkbot*]
+Parent=Link Checkers
+Browser=Linkbot
+
+[LinkChecker/*]
+Parent=Link Checkers
+Browser=LinkChecker
+
+[LinkextractorPro*]
+Parent=Link Checkers
+Browser=LinkextractorPro
+isBanned=true
+
+[LinkLint-checkonly/*]
+Parent=Link Checkers
+Browser=LinkLint
+
+[LinkScan/*]
+Parent=Link Checkers
+Browser=LinkScan
+
+[LinkSweeper/*]
+Parent=Link Checkers
+Browser=LinkSweeper
+
+[LinkWalker*]
+Parent=Link Checkers
+Browser=LinkWalker
+
+[MetaGer-LinkChecker]
+Parent=Link Checkers
+Browser=MetaGer-LinkChecker
+
+[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)]
+Parent=Link Checkers
+Browser=LinkTiger
+isBanned=true
+
+[Mozilla/4.0 (Compatible); URLBase*]
+Parent=Link Checkers
+Browser=URLBase
+
+[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)]
+Parent=Link Checkers
+Browser=NetPromoter Link Utility
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*]
+Parent=Link Checkers
+Browser=Web Link Validator
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0]
+Parent=Link Checkers
+Browser=Link Commander
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=Win32
+
+[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)]
+Parent=Link Checkers
+Browser=smartBot
+
+[Mozilla/4.0 (compatible; SuperCleaner*;*)]
+Parent=Link Checkers
+Browser=SuperCleaner
+
+[Mozilla/5.0 gURLChecker/*]
+Parent=Link Checkers
+Browser=gURLChecker
+isBanned=true
+
+[Newsgroupreporter LinkCheck]
+Parent=Link Checkers
+Browser=Newsgroupreporter LinkCheck
+
+[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de]
+Parent=Link Checkers
+Browser=onCHECK Linkchecker
+
+[online link validator (http://www.dead-links.com/)]
+Parent=Link Checkers
+Browser=Dead-Links.com
+isBanned=true
+
+[REL Link Checker*]
+Parent=Link Checkers
+Browser=REL Link Checker
+
+[RLinkCheker*]
+Parent=Link Checkers
+Browser=RLinkCheker
+
+[Robozilla/*]
+Parent=Link Checkers
+Browser=Robozilla
+
+[RPT-HTTPClient/*]
+Parent=Link Checkers
+Browser=RPT-HTTPClient
+isBanned=true
+
+[SafariBookmarkChecker*(?http://www.coriolis.ch/)]
+Parent=Link Checkers
+Browser=SafariBookmarkChecker
+Platform=MacOSX
+CssVersion=2
+supportsCSS=true
+
+[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)]
+Parent=Link Checkers
+Browser=Simpy
+
+[SiteBar/*]
+Parent=Link Checkers
+Browser=SiteBar
+
+[Susie (http://www.sync2it.com/bms/susie.php]
+Parent=Link Checkers
+Browser=Susie
+
+[URLBase/6.*]
+Parent=Link Checkers
+
+[VSE/*]
+Parent=Link Checkers
+Browser=VSE Link Tester
+
+[WebTrends Link Analyzer]
+Parent=Link Checkers
+Browser=WebTrends Link Analyzer
+
+[WorQmada/*]
+Parent=Link Checkers
+Browser=WorQmada
+
+[Xenu* Link Sleuth*]
+Parent=Link Checkers
+Browser=Xenu's Link Sleuth
+isBanned=true
+
+[Z-Add Link Checker*]
+Parent=Link Checkers
+Browser=Z-Add Link Checker
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft
+
+[Microsoft]
+Parent=DefaultProperties
+Browser=Microsoft
+isBanned=true
+
+[Live (http://www.live.com/)]
+Parent=Microsoft
+Browser=Microsoft Live
+isBanned=false
+isSyndicationReader=true
+
+[MFC Foundation Class Library*]
+Parent=Microsoft
+Browser=MFC Foundation Class Library
+
+[MFHttpScan]
+Parent=Microsoft
+Browser=MFHttpScan
+
+[Microsoft BITS/*]
+Parent=Microsoft
+Browser=BITS
+
+[Microsoft Data Access Internet Publishing Provider Cache Manager]
+Parent=Microsoft
+Browser=MS IPP
+
+[Microsoft Data Access Internet Publishing Provider DAV*]
+Parent=Microsoft
+Browser=MS IPP DAV
+
+[Microsoft Data Access Internet Publishing Provider Protocol Discovery]
+Parent=Microsoft
+Browser=MS IPPPD
+
+[Microsoft Internet Explorer]
+Parent=Microsoft
+Browser=Fake IE
+
+[Microsoft Office Existence Discovery]
+Parent=Microsoft
+Browser=Microsoft Office Existence Discovery
+
+[Microsoft Office Protocol Discovery]
+Parent=Microsoft
+Browser=MS OPD
+
+[Microsoft Office/* (*Picture Manager*)]
+Parent=Microsoft
+Browser=Microsoft Office Picture Manager
+
+[Microsoft URL Control*]
+Parent=Microsoft
+Browser=Microsoft URL Control
+
+[Microsoft Visio MSIE]
+Parent=Microsoft
+Browser=Microsoft Visio
+
+[Microsoft-WebDAV-MiniRedir/*]
+Parent=Microsoft
+Browser=Microsoft-WebDAV
+
+[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*]
+Parent=Microsoft
+Browser=Microsoft Excel
+Version=12.0
+MajorVer=12
+MinorVer=0
+Platform=MacOSX
+
+[MSN Feed Manager]
+Parent=Microsoft
+Browser=MSN Feed Manager
+isBanned=false
+isSyndicationReader=true
+
+[MSProxy/*]
+Parent=Microsoft
+Browser=MS Proxy
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers
+
+[Miscellaneous Browsers]
+Parent=DefaultProperties
+Browser=Miscellaneous Browsers
+Frames=true
+Tables=true
+Cookies=true
+
+[*Amiga*]
+Parent=Miscellaneous Browsers
+Browser=Amiga
+Platform=Amiga
+
+[*avantbrowser*]
+Parent=Miscellaneous Browsers
+Browser=Avant Browser
+
+[12345]
+Parent=Miscellaneous Browsers
+Browser=12345
+isBanned=true
+
+[Ace Explorer]
+Parent=Miscellaneous Browsers
+Browser=Ace Explorer
+
+[Enigma Browser*]
+Parent=Miscellaneous Browsers
+Browser=Enigma Browser
+
+[EVE-minibrowser/*]
+Parent=Miscellaneous Browsers
+Browser=EVE-minibrowser
+IFrames=false
+Tables=false
+BackgroundSounds=false
+VBScript=false
+JavaApplets=false
+JavaScript=false
+ActiveXControls=false
+isBanned=false
+Crawler=false
+
+[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*]
+Parent=Miscellaneous Browsers
+Browser=Godzilla
+
+[GreenBrowser]
+Parent=Miscellaneous Browsers
+Browser=GreenBrowser
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+
+[Kopiczek/* (WyderOS*; *)]
+Parent=Miscellaneous Browsers
+Browser=Kopiczek
+Platform=WyderOS
+IFrames=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (*) - BrowseX (*)]
+Parent=Miscellaneous Browsers
+Browser=BrowseX
+
+[Mozilla/* (Win32;*Escape?*; ?)]
+Parent=Miscellaneous Browsers
+Browser=Escape
+Platform=Win32
+
+[Mozilla/4.0 (compatible; ibisBrowser)]
+Parent=Miscellaneous Browsers
+Browser=ibisBrowser
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*]
+Parent=Miscellaneous Browsers
+Browser=HistoryHound
+
+[NetRecorder*]
+Parent=Miscellaneous Browsers
+Browser=NetRecorder
+
+[NetSurfer*]
+Parent=Miscellaneous Browsers
+Browser=NetSurfer
+
+[ogeb browser , Version 1.1.0]
+Parent=Miscellaneous Browsers
+Browser=ogeb browser
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[SCEJ PSP BROWSER 0102pspNavigator]
+Parent=Miscellaneous Browsers
+Browser=Wipeout Pure
+
+[SlimBrowser]
+Parent=Miscellaneous Browsers
+Browser=SlimBrowser
+
+[WWW_Browser/*]
+Parent=Miscellaneous Browsers
+Browser=WWW Browser
+Version=1.69
+MajorVer=1
+MinorVer=69
+Platform=Win16
+CssVersion=3
+supportsCSS=true
+
+[*Netcraft Webserver Survey*]
+Parent=Netcraft
+Browser=Netcraft Webserver Survey
+isBanned=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers
+
+[Offline Browsers]
+Parent=DefaultProperties
+Browser=Offline Browsers
+Frames=true
+Tables=true
+Cookies=true
+isBanned=true
+Crawler=true
+
+[*Check&Get*]
+Parent=Offline Browsers
+Browser=Check&Get
+
+[*HTTrack*]
+Parent=Offline Browsers
+Browser=HTTrack
+
+[*MSIECrawler*]
+Parent=Offline Browsers
+Browser=IE Offline Browser
+
+[*TweakMASTER*]
+Parent=Offline Browsers
+Browser=TweakMASTER
+
+[BackStreet Browser *]
+Parent=Offline Browsers
+Browser=BackStreet Browser
+
+[Go-Ahead-Got-It*]
+Parent=Offline Browsers
+Browser=Go Ahead Got-It
+
+[iGetter/*]
+Parent=Offline Browsers
+Browser=iGetter
+
+[Teleport*]
+Parent=Offline Browsers
+Browser=Teleport
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners
+
+[Online Scanners]
+Parent=DefaultProperties
+Browser=Online Scanners
+isBanned=true
+
+[JoeDog/* (X11; I; Siege *)]
+Parent=Online Scanners
+Browser=JoeDog
+isBanned=false
+
+[Morfeus Fucking Scanner]
+Parent=Online Scanners
+Browser=Morfeus Fucking Scanner
+
+[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*]
+Parent=Online Scanners
+Browser=Trend Micro
+
+[Titanium 2005 (4.02.01)]
+Parent=Online Scanners
+Browser=Panda Antivirus Titanium
+
+[virus_detector*]
+Parent=Online Scanners
+Browser=Secure Computing Corporation
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers
+
+[Proxy Servers]
+Parent=DefaultProperties
+Browser=Proxy Servers
+isBanned=true
+
+[*squid*]
+Parent=Proxy Servers
+Browser=Squid
+
+[Anonymisiert*]
+Parent=Proxy Servers
+Browser=Anonymizied
+
+[Anonymizer/*]
+Parent=Proxy Servers
+Browser=Anonymizer
+
+[Anonymizied*]
+Parent=Proxy Servers
+Browser=Anonymizied
+
+[Anonymous*]
+Parent=Proxy Servers
+Browser=Anonymous
+
+[Anonymous/*]
+Parent=Proxy Servers
+Browser=Anonymous
+
+[CE-Preload]
+Parent=Proxy Servers
+Browser=CE-Preload
+
+[http://Anonymouse.org/*]
+Parent=Proxy Servers
+Browser=Anonymouse
+
+[IE/6.01 (CP/M; 8-bit*)]
+Parent=Proxy Servers
+Browser=Squid
+
+[Mozilla/* (TuringOS; Turing Machine; 0.0)]
+Parent=Proxy Servers
+Browser=Anonymizer
+
+[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)]
+Parent=Proxy Servers
+Browser=SaferSurf
+
+[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)]
+Parent=Proxy Servers
+Browser=Yahoo!
+isBanned=true
+Crawler=true
+
+[Nutscrape]
+Parent=Proxy Servers
+Browser=Squid
+
+[Nutscrape/* (CP/M; 8-bit*)]
+Parent=Proxy Servers
+Browser=Squid
+
+[Privoxy/*]
+Parent=Proxy Servers
+Browser=Privoxy
+
+[ProxyTester*]
+Parent=Proxy Servers
+Browser=ProxyTester
+isBanned=true
+Crawler=true
+
+[SilentSurf*]
+Parent=Proxy Servers
+Browser=SilentSurf
+
+[SmallProxy*]
+Parent=Proxy Servers
+Browser=SmallProxy
+
+[Space*Bison/*]
+Parent=Proxy Servers
+Browser=Proxomitron
+
+[Sqworm/*]
+Parent=Proxy Servers
+Browser=Websense
+
+[SurfControl]
+Parent=Proxy Servers
+Browser=SurfControl
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects
+
+[Research Projects]
+Parent=DefaultProperties
+Browser=Research Projects
+isBanned=true
+Crawler=true
+
+[*research*]
+Parent=Research Projects
+
+[AcadiaUniversityWebCensusClient]
+Parent=Research Projects
+Browser=AcadiaUniversityWebCensusClient
+
+[Amico Alpha * (*) Gecko/* AmicoAlpha/*]
+Parent=Research Projects
+Browser=Amico Alpha
+
+[annotate_google; http://ponderer.org/*]
+Parent=Research Projects
+Browser=Annotate Google
+
+[CMS crawler (?http://buytaert.net/crawler/)]
+Parent=Research Projects
+
+[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)]
+Parent=Research Projects
+Browser=e-SocietyRobot
+
+[Forschungsportal/*]
+Parent=Research Projects
+Browser=Forschungsportal
+
+[Gulper Web *]
+Parent=Research Projects
+Browser=Gulper Web Bot
+
+[HooWWWer/*]
+Parent=Research Projects
+Browser=HooWWWer
+
+[http://buytaert.net/crawler]
+Parent=Research Projects
+
+[inetbot/* (?http://www.inetbot.com/bot.html)]
+Parent=Research Projects
+Browser=inetbot
+
+[IRLbot/*]
+Parent=Research Projects
+Browser=IRLbot
+
+[Lachesis]
+Parent=Research Projects
+Browser=Lachesis
+
+[Mozilla/5.0 (compatible; nextthing.org/*)]
+Parent=Research Projects
+Browser=nextthing.org
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (compatible; Theophrastus/*)]
+Parent=Research Projects
+Browser=Theophrastus
+
+[Mozilla/5.0 (compatible; Webscan v0.*;  http://otc.dyndns.org/webscan/)]
+Parent=Research Projects
+Browser=Webscan
+
+[MQbot*]
+Parent=Research Projects
+Browser=MQbot
+
+[OutfoxBot/*]
+Parent=Research Projects
+Browser=OutfoxBot
+
+[polybot?*]
+Parent=Research Projects
+Browser=Polybot
+
+[Shim?Crawler*]
+Parent=Research Projects
+Browser=Shim Crawler
+
+[Steeler/*]
+Parent=Research Projects
+Browser=Steeler
+
+[Taiga web spider]
+Parent=Research Projects
+Browser=Taiga
+
+[Theme Spider*]
+Parent=Research Projects
+Browser=Theme Spider
+
+[UofTDB_experiment* (leehyun@cs.toronto.edu)]
+Parent=Research Projects
+Browser=UofTDB Experiment
+
+[USyd-NLP-Spider*]
+Parent=Research Projects
+Browser=USyd-NLP-Spider
+
+[woriobot*]
+Parent=Research Projects
+Browser=woriobot
+
+[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)]
+Parent=Research Projects
+Browser=wwwster
+Beta=true
+
+[Zao-Crawler]
+Parent=Research Projects
+Browser=Zao-Crawler
+
+[Zao/*]
+Parent=Research Projects
+Browser=Zao
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers
+
+[Rippers]
+Parent=DefaultProperties
+Browser=Rippers
+Frames=true
+IFrames=true
+Tables=true
+isBanned=true
+Crawler=true
+
+[*grub*]
+Parent=Rippers
+Browser=grub
+
+[*ickHTTP*]
+Parent=Rippers
+Browser=IP*Works
+
+[*java*]
+Parent=Rippers
+
+[*libwww-perl*]
+Parent=Rippers
+Browser=libwww-perl
+
+[*WebGrabber*]
+Parent=Rippers
+
+[*WinHttpRequest*]
+Parent=Rippers
+Browser=WinHttp
+
+[3D-FTP/*]
+Parent=Rippers
+Browser=3D-FTP
+
+[3wGet/*]
+Parent=Rippers
+Browser=3wGet
+
+[ActiveRefresh*]
+Parent=Rippers
+Browser=ActiveRefresh
+
+[Artera (Version *)]
+Parent=Rippers
+Browser=Artera
+
+[AutoHotkey]
+Parent=Rippers
+Browser=AutoHotkey
+
+[b2w/*]
+Parent=Rippers
+Browser=b2w
+
+[BasicHTTP/*]
+Parent=Rippers
+Browser=BasicHTTP
+
+[BlockNote.Net]
+Parent=Rippers
+Browser=BlockNote.Net
+
+[CAST]
+Parent=Rippers
+Browser=CAST
+
+[CFNetwork/*]
+Parent=Rippers
+Browser=CFNetwork
+
+[CFSCHEDULE*]
+Parent=Rippers
+Browser=ColdFusion Task Scheduler
+
+[CobWeb/*]
+Parent=Rippers
+Browser=CobWeb
+
+[ColdFusion*]
+Parent=Rippers
+Browser=ColdFusion
+
+[Crawl_Application]
+Parent=Rippers
+Browser=Crawl_Application
+
+[curl/*]
+Parent=Rippers
+Browser=cURL
+
+[Custo*]
+Parent=Rippers
+Browser=Custo
+
+[DataCha0s/*]
+Parent=Rippers
+Browser=DataCha0s
+
+[DeepIndexer*]
+Parent=Rippers
+Browser=DeepIndexer
+
+[DISCo Pump *]
+Parent=Rippers
+Browser=DISCo Pump
+
+[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)]
+Parent=Rippers
+Browser=eStyleSearch
+Win32=true
+
+[ezic.com http agent *]
+Parent=Rippers
+Browser=Ezic.com
+
+[fetch libfetch/*]
+Parent=Rippers
+
+[FGet*]
+Parent=Rippers
+Browser=FGet
+
+[Flaming AttackBot*]
+Parent=Rippers
+Browser=Flaming AttackBot
+
+[Foobot*]
+Parent=Rippers
+Browser=Foobot
+
+[GameSpyHTTP/*]
+Parent=Rippers
+Browser=GameSpyHTTP
+
+[gnome-vfs/*]
+Parent=Rippers
+Browser=gnome-vfs
+
+[Harvest/*]
+Parent=Rippers
+Browser=Harvest
+
+[hcat/*]
+Parent=Rippers
+Browser=hcat
+
+[HLoader]
+Parent=Rippers
+Browser=HLoader
+
+[Holmes/*]
+Parent=Rippers
+Browser=Holmes
+
+[HTMLParser/*]
+Parent=Rippers
+Browser=HTMLParser
+
+[http generic]
+Parent=Rippers
+Browser=http generic
+
+[httpclient*]
+Parent=Rippers
+
+[httperf/*]
+Parent=Rippers
+Browser=httperf
+
+[HTTPFetch/*]
+Parent=Rippers
+Browser=HTTPFetch
+
+[HTTPGrab]
+Parent=Rippers
+Browser=HTTPGrab
+
+[HttpSession]
+Parent=Rippers
+Browser=HttpSession
+
+[httpunit/*]
+Parent=Rippers
+Browser=HttpUnit
+
+[ICE_GetFile]
+Parent=Rippers
+Browser=ICE_GetFile
+
+[iexplore.exe]
+Parent=Rippers
+
+[Inet - Eureka App]
+Parent=Rippers
+Browser=Inet - Eureka App
+
+[INetURL/*]
+Parent=Rippers
+Browser=INetURL
+
+[InetURL:/*]
+Parent=Rippers
+Browser=InetURL
+
+[Internet Exploiter/*]
+Parent=Rippers
+
+[Internet Explore *]
+Parent=Rippers
+Browser=Fake IE
+
+[Internet Explorer *]
+Parent=Rippers
+Browser=Fake IE
+
+[IP*Works!*/*]
+Parent=Rippers
+Browser=IP*Works!
+
+[IrssiUrlLog/*]
+Parent=Rippers
+Browser=IrssiUrlLog
+
+[JPluck/*]
+Parent=Rippers
+Browser=JPluck
+
+[Kapere (http://www.kapere.com)]
+Parent=Rippers
+Browser=Kapere
+
+[LeechFTP]
+Parent=Rippers
+Browser=LeechFTP
+
+[LeechGet*]
+Parent=Rippers
+Browser=LeechGet
+
+[libcurl-agent/*]
+Parent=Rippers
+Browser=libcurl
+
+[libWeb/clsHTTP*]
+Parent=Rippers
+Browser=libWeb/clsHTTP
+
+[lwp*]
+Parent=Rippers
+
+[MFC_Tear_Sample]
+Parent=Rippers
+Browser=MFC_Tear_Sample
+
+[Moozilla]
+Parent=Rippers
+Browser=Moozilla
+
+[MovableType/*]
+Parent=Rippers
+Browser=MovableType Web Log
+
+[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)]
+Parent=Rippers
+Browser=NEWT ActiveX
+Platform=Win32
+
+[Mozilla/3.0 (compatible)]
+Parent=Rippers
+
+[Mozilla/3.0 (compatible; Indy Library)]
+Parent=Rippers
+Cookies=true
+
+[Mozilla/3.01 (compatible;)]
+Parent=Rippers
+
+[Mozilla/4.0 (compatible; BorderManager*)]
+Parent=Rippers
+Browser=Novell BorderManager
+
+[Mozilla/4.0 (compatible;)]
+Parent=Rippers
+
+[Mozilla/5.0 (compatible; IPCheck Server Monitor*)]
+Parent=Rippers
+Browser=IPCheck Server Monitor
+
+[OCN-SOC/*]
+Parent=Rippers
+Browser=OCN-SOC
+
+[Offline Explorer*]
+Parent=Rippers
+Browser=Offline Explorer
+
+[Open Web Analytics Bot*]
+Parent=Rippers
+Browser=Open Web Analytics Bot
+
+[OSSProxy*]
+Parent=Rippers
+Browser=OSSProxy
+
+[Pageload*]
+Parent=Rippers
+Browser=PageLoad
+
+[PageNest/*]
+Parent=Rippers
+Browser=PageNest
+
+[pavuk/*]
+Parent=Rippers
+Browser=Pavuk
+
+[PEAR HTTP_Request*]
+Parent=Rippers
+Browser=PEAR-PHP
+
+[PHP*]
+Parent=Rippers
+Browser=PHP
+
+[PigBlock (Windows NT 5.1; U)*]
+Parent=Rippers
+Browser=PigBlock
+Win32=true
+
+[Pockey*]
+Parent=Rippers
+Browser=Pockey-GetHTML
+
+[POE-Component-Client-HTTP/*]
+Parent=Rippers
+Browser=POE-Component-Client-HTTP
+
+[PycURL/*]
+Parent=Rippers
+Browser=PycURL
+
+[Python*]
+Parent=Rippers
+Browser=Python
+
+[RepoMonkey*]
+Parent=Rippers
+Browser=RepoMonkey
+
+[SBL-BOT*]
+Parent=Rippers
+Browser=BlackWidow
+
+[ScoutAbout*]
+Parent=Rippers
+Browser=ScoutAbout
+
+[sherlock/*]
+Parent=Rippers
+Browser=Sherlock
+
+[SiteParser/*]
+Parent=Rippers
+Browser=SiteParser
+
+[SiteSnagger*]
+Parent=Rippers
+Browser=SiteSnagger
+
+[SiteSucker/*]
+Parent=Rippers
+Browser=SiteSucker
+
+[SiteWinder*]
+Parent=Rippers
+Browser=SiteWinder
+
+[Snoopy*]
+Parent=Rippers
+Browser=Snoopy
+
+[SOFTWING_TEAR_AGENT*]
+Parent=Rippers
+Browser=AspTear
+
+[SuperHTTP/*]
+Parent=Rippers
+Browser=SuperHTTP
+
+[Tcl http client package*]
+Parent=Rippers
+Browser=Tcl http client package
+
+[Twisted PageGetter]
+Parent=Rippers
+Browser=Twisted PageGetter
+
+[URL2File/*]
+Parent=Rippers
+Browser=URL2File
+
+[UtilMind HTTPGet]
+Parent=Rippers
+Browser=UtilMind HTTPGet
+
+[VCI WebViewer*]
+Parent=Rippers
+Browser=VCI WebViewer
+
+[W3CRobot/*]
+Parent=Rippers
+Browser=W3CRobot
+
+[Web Downloader*]
+Parent=Rippers
+Browser=Web Downloader
+
+[Web Downloader/*]
+Parent=Rippers
+Browser=Web Downloader
+
+[Web Magnet*]
+Parent=Rippers
+Browser=Web Magnet
+
+[WebAuto/*]
+Parent=Rippers
+
+[webbandit/*]
+Parent=Rippers
+Browser=webbandit
+
+[WebCopier*]
+Parent=Rippers
+Browser=WebCopier
+
+[WebDownloader*]
+Parent=Rippers
+Browser=WebDownloader
+
+[WebFetch]
+Parent=Rippers
+Browser=WebFetch
+
+[webfetch/*]
+Parent=Rippers
+Browser=WebFetch
+
+[WebGatherer*]
+Parent=Rippers
+Browser=WebGatherer
+
+[WebGet]
+Parent=Rippers
+Browser=WebGet
+
+[WebReaper*]
+Parent=Rippers
+Browser=WebReaper
+
+[WebRipper]
+Parent=Rippers
+Browser=WebRipper
+
+[WebSauger*]
+Parent=Rippers
+Browser=WebSauger
+
+[Website Downloader*]
+Parent=Rippers
+Browser=Website Downloader
+
+[Website eXtractor*]
+Parent=Rippers
+Browser=Website eXtractor
+
+[Website Quester]
+Parent=Rippers
+Browser=Website Quester
+
+[WebsiteExtractor*]
+Parent=Rippers
+Browser=Website eXtractor
+
+[WebSnatcher*]
+Parent=Rippers
+Browser=WebSnatcher
+
+[Webster Pro*]
+Parent=Rippers
+Browser=Webster Pro
+
+[WebStripper*]
+Parent=Rippers
+Browser=WebStripper
+
+[WebWhacker*]
+Parent=Rippers
+Browser=WebWhacker
+
+[WinScripter iNet Tools]
+Parent=Rippers
+Browser=WinScripter iNet Tools
+
+[WWW-Mechanize/*]
+Parent=Rippers
+Browser=WWW-Mechanize
+
+[Zend_Http_Client]
+Parent=Rippers
+Browser=Zend_Http_Client
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors
+
+[Site Monitors]
+Parent=DefaultProperties
+Browser=Site Monitors
+Cookies=true
+isBanned=true
+Crawler=true
+
+[*EasyRider*]
+Parent=Site Monitors
+Browser=EasyRider
+
+[*maxamine.com--robot*]
+Parent=Site Monitors
+Browser=maxamine.com--robot
+isBanned=true
+
+[*WebMon ?.*]
+Parent=Site Monitors
+Browser=WebMon
+
+[Kenjin Spider*]
+Parent=Site Monitors
+Browser=Kenjin Spider
+
+[Kevin http://*]
+Parent=Site Monitors
+Browser=Kevin
+isBanned=true
+
+[Mozilla/4.0 (compatible; ChangeDetection/*]
+Parent=Site Monitors
+Browser=ChangeDetection
+
+[Myst Monitor Service v*]
+Parent=Site Monitors
+Browser=Myst Monitor Service
+
+[Net Probe]
+Parent=Site Monitors
+Browser=Net Probe
+
+[NetMechanic*]
+Parent=Site Monitors
+Browser=NetMechanic
+
+[NetReality*]
+Parent=Site Monitors
+Browser=NetReality
+
+[Pingdom GIGRIB*]
+Parent=Site Monitors
+Browser=Pingdom
+
+[Site Valet Online*]
+Parent=Site Monitors
+Browser=Site Valet
+isBanned=true
+
+[SITECHECKER]
+Parent=Site Monitors
+Browser=SITECHECKER
+
+[sitemonitor@dnsvr.com/*]
+Parent=Site Monitors
+Browser=ZoneEdit Failover Monitor
+isBanned=false
+
+[UpTime Checker*]
+Parent=Site Monitors
+Browser=UpTime Checker
+
+[URL Control*]
+Parent=Site Monitors
+Browser=URL Control
+
+[URL_Access/*]
+Parent=Site Monitors
+
+[URLCHECK]
+Parent=Site Monitors
+Browser=URLCHECK
+
+[URLy Warning*]
+Parent=Site Monitors
+Browser=URLy Warning
+
+[Webcheck *]
+Parent=Site Monitors
+Browser=Webcheck
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[WebPatrol/*]
+Parent=Site Monitors
+Browser=WebPatrol
+
+[websitepulse checker/*]
+Parent=Site Monitors
+Browser=websitepulse checker
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers
+
+[Social Bookmarkers]
+Parent=DefaultProperties
+Browser=Social Bookmarkers
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[BookmarkBase(2/;http://bookmarkbase.com)]
+Parent=Social Bookmarkers
+Browser=BookmarkBase
+
+[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)]
+Parent=Social Bookmarkers
+Browser=Cocoalicious
+
+[Mozilla/5.0 (compatible; FriendFeedBot/0.*;  Http://friendfeed.com/about/bot)]
+Parent=Social Bookmarkers
+Browser=FriendFeedBot
+
+[Twitturly*]
+Parent=Social Bookmarkers
+Browser=Twitturly
+
+[WinkBot/*]
+Parent=Social Bookmarkers
+Browser=WinkBot
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators
+
+[Translators]
+Parent=DefaultProperties
+Browser=Translators
+Frames=true
+Tables=true
+Cookies=true
+
+[Seram Server]
+Parent=Translators
+Browser=Seram Server
+
+[TeragramWebcrawler/*]
+Parent=Translators
+Browser=TeragramWebcrawler
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[WebIndexer/* (Web Indexer; *)]
+Parent=Translators
+Browser=WorldLingo
+
+[WebTrans]
+Parent=Translators
+Browser=WebTrans
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers
+
+[Version Checkers]
+Parent=DefaultProperties
+Browser=Version Checkers
+Crawler=true
+
+[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca]
+Parent=Version Checkers
+Browser=Automated Browscap.ini Updater
+
+[BMC Link Validator (http://www.briansmodelcars.com/links/)]
+Parent=Version Checkers
+Browser=BMC Link Validator
+MajorVer=1
+MinorVer=0
+Platform=Win2000
+
+[Browscap updater]
+Parent=Version Checkers
+Browser=Browscap updater
+
+[BrowscapUpdater1.0]
+Parent=Version Checkers
+
+[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)]
+Parent=Version Checkers
+Browser=Gary Keith's Version Checker
+
+[Browser Capabilities Project AutoDownloader]
+Parent=Version Checkers
+Browser=TKC AutoDownloader
+
+[browsers.garykeith.com browscap.ini bot BETA]
+Parent=Version Checkers
+
+[Code Sample Web Client]
+Parent=Version Checkers
+Browser=Code Sample Web Client
+
+[Desktop Sidebar*]
+Parent=Version Checkers
+Browser=Desktop Sidebar
+isBanned=true
+
+[Mono Browser Capabilities Updater*]
+Parent=Version Checkers
+Browser=Mono Browser Capabilities Updater
+isBanned=true
+
+[Rewmi/*]
+Parent=Version Checkers
+isBanned=true
+
+[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)]
+Parent=Version Checkers
+Browser=Subtext
+
+[TherapeuticResearch]
+Parent=Version Checkers
+Browser=TherapeuticResearch
+
+[UpdateBrowscap*]
+Parent=Version Checkers
+Browser=UpdateBrowscap
+
+[www.garykeith.com browscap.ini bot*]
+Parent=Version Checkers
+Browser=clarkson.edu 
+
+[www.substancia.com AutoHTTPAgent (ver *)]
+Parent=Version Checkers
+Browser=Substância
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become
+
+[Become]
+Parent=DefaultProperties
+Browser=Become
+Frames=true
+Tables=true
+isSyndicationReader=true
+Crawler=true
+
+[*BecomeBot/*]
+Parent=Become
+Browser=BecomeBot
+
+[*BecomeBot@exava.com*]
+Parent=Become
+Browser=BecomeBot
+
+[*Exabot@exava.com*]
+Parent=Become
+Browser=Exabot
+
+[MonkeyCrawl/*]
+Parent=Become
+Browser=MonkeyCrawl
+
+[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)]
+Parent=Become
+Browser=BecomeJPBot
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems
+
+[Blue Coat Systems]
+Parent=DefaultProperties
+Browser=Blue Coat Systems
+isBanned=true
+Crawler=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers
+
+[Browscap Abusers]
+Parent=DefaultProperties
+Browser=Browscap Abusers
+isBanned=true
+
+[Apple-PubSub/*]
+Parent=Browscap Abusers
+Browser=Apple-PubSub
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub
+
+[FeedHub]
+Parent=DefaultProperties
+Browser=FeedHub
+isSyndicationReader=true
+
+[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)]
+Parent=FeedHub
+Browser=FeedHub FeedDiscovery
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)]
+Parent=FeedHub
+Browser=FeedHub FeedFetcher
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)]
+Parent=FeedHub
+Browser=FeedHub MetaDataFetcher
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Internet Content Rating Association]
+Parent=DefaultProperties
+Browser=
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+Crawler=true
+
+[ICRA_label_generator/1.?]
+Parent=Internet Content Rating Association
+Browser=ICRA_label_generator
+
+[ICRA_Semantic_spider/0.?]
+Parent=Internet Content Rating Association
+Browser=ICRA_Semantic_spider
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect
+
+[NameProtect]
+Parent=DefaultProperties
+Browser=NameProtect
+isBanned=true
+Crawler=true
+
+[abot/*]
+Parent=NameProtect
+Browser=NameProtect
+
+[NP/*]
+Parent=NameProtect
+Browser=NameProtect
+
+[NPBot*]
+Parent=NameProtect
+Browser=NameProtect
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft
+
+[Netcraft]
+Parent=DefaultProperties
+Browser=Netcraft
+isBanned=true
+Crawler=true
+
+[*Netcraft Web Server Survey*]
+Parent=Netcraft
+Browser=Netcraft Webserver Survey
+isBanned=true
+
+[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0;  info@netcraft.com)]
+Parent=Netcraft
+Browser=NetcraftSurveyAgent
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator
+
+[NewsGator]
+Parent=DefaultProperties
+Browser=NewsGator
+isSyndicationReader=true
+
+[MarsEdit*]
+Parent=NewsGator
+Browser=MarsEdit
+
+[NetNewsWire*/*]
+Parent=NewsGator
+Browser=NetNewsWire
+Platform=MacOSX
+
+[NewsFire/*]
+Parent=NewsGator
+Browser=NewsFire
+
+[NewsGator FetchLinks extension/*]
+Parent=NewsGator
+Browser=NewsGator FetchLinks
+
+[NewsGator/*]
+Parent=NewsGator
+Browser=NewsGator
+isBanned=true
+
+[NewsGatorOnline/*]
+Parent=NewsGator
+Browser=NewsGatorOnline
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2
+
+[Chrome 0.2]
+Parent=DefaultProperties
+Browser=Chrome
+Version=0.2
+MinorVer=2
+Beta=true
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*]
+Parent=Chrome 0.2
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*]
+Parent=Chrome 0.2
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*]
+Parent=Chrome 0.2
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3
+
+[Chrome 0.3]
+Parent=DefaultProperties
+Browser=Chrome
+Version=0.3
+MinorVer=3
+Beta=true
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*]
+Parent=Chrome 0.3
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*]
+Parent=Chrome 0.3
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*]
+Parent=Chrome 0.3
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4
+
+[Chrome 0.4]
+Parent=DefaultProperties
+Browser=Chrome
+Version=0.4
+MinorVer=4
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*]
+Parent=Chrome 0.4
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*]
+Parent=Chrome 0.4
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*]
+Parent=Chrome 0.4
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5
+
+[Chrome 0.5]
+Parent=DefaultProperties
+Browser=Chrome
+Version=0.5
+MinorVer=5
+Beta=true
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*]
+Parent=Chrome 0.5
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*]
+Parent=Chrome 0.5
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*]
+Parent=Chrome 0.5
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0
+
+[Chrome 1.0]
+Parent=DefaultProperties
+Browser=Chrome
+Version=1.0
+MajorVer=1
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*]
+Parent=Chrome 1.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*]
+Parent=Chrome 1.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*]
+Parent=Chrome 1.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*]
+Parent=Chrome 1.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*]
+Parent=Chrome 1.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0
+
+[Chrome 2.0]
+Parent=DefaultProperties
+Browser=Chrome
+Version=2.0
+MajorVer=2
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*]
+Parent=Chrome 2.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*]
+Parent=Chrome 2.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*]
+Parent=Chrome 2.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*]
+Parent=Chrome 2.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*]
+Parent=Chrome 2.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0
+
+[Chrome 3.0]
+Parent=DefaultProperties
+Browser=Chrome
+Version=3.0
+MajorVer=3
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*]
+Parent=Chrome 3.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*]
+Parent=Chrome 3.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*]
+Parent=Chrome 3.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*]
+Parent=Chrome 3.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*]
+Parent=Chrome 3.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code
+
+[Google Code]
+Parent=DefaultProperties
+Browser=Google Code
+Tables=true
+Cookies=true
+JavaApplets=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2
+
+[Iron 0.2]
+Parent=DefaultProperties
+Browser=Iron
+Version=0.2
+MinorVer=2
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*]
+Parent=Iron 0.2
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*]
+Parent=Iron 0.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*]
+Parent=Iron 0.2
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3
+
+[Iron 0.3]
+Parent=DefaultProperties
+Browser=Iron
+Version=0.3
+MinorVer=3
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*]
+Parent=Iron 0.3
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*]
+Parent=Iron 0.3
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*]
+Parent=Iron 0.3
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4
+
+[Iron 0.4]
+Parent=DefaultProperties
+Browser=Iron
+Version=0.4
+MinorVer=4
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*]
+Parent=Iron 0.4
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*]
+Parent=Iron 0.4
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*]
+Parent=Iron 0.4
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod
+
+[iPod]
+Parent=DefaultProperties
+Browser=iPod
+Platform=iPhone OSX
+isMobileDevice=true
+
+[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*]
+Parent=iPod
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=MacOSX
+
+[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*]
+Parent=iPod
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes
+
+[iTunes]
+Parent=DefaultProperties
+Browser=iTunes
+Platform=iPhone OSX
+
+[iTunes/* (Windows; ?)]
+Parent=iTunes
+Browser=iTunes
+Platform=Win32
+Win32=true
+
+[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*]
+Parent=iTunes
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players
+
+[Media Players]
+Parent=DefaultProperties
+Browser=Media Players
+Cookies=true
+
+[Microsoft NetShow(TM) Player with RealVideo(R)]
+Parent=Media Players
+Browser=Microsoft NetShow
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer]
+Parent=Media Players
+Browser=RealPlayer
+Platform=MacOSX
+
+[MPlayer 0.9*]
+Parent=Media Players
+Browser=MPlayer
+Version=0.9
+MajorVer=0
+MinorVer=9
+
+[MPlayer 1.*]
+Parent=Media Players
+Browser=MPlayer
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[MPlayer HEAD CVS]
+Parent=Media Players
+Browser=MPlayer
+
+[RealPlayer*]
+Parent=Media Players
+Browser=RealPlayer
+
+[RMA/*]
+Parent=Media Players
+Browser=RMA
+
+[VLC media player*]
+Parent=Media Players
+Browser=VLC
+
+[vobsub]
+Parent=Media Players
+Browser=vobsub
+isBanned=true
+
+[WinampMPEG/*]
+Parent=Media Players
+Browser=WinAmp
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo
+
+[Nintendo Wii]
+Parent=DefaultProperties
+Browser=
+isMobileDevice=true
+
+[Opera/* (Nintendo DSi; Opera/*; *; *)]
+Parent=Nintendo Wii
+Browser=DSi
+
+[Opera/* (Nintendo Wii; U; *)]
+Parent=Nintendo Wii
+Browser=Wii
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player
+
+[Windows Media Player]
+Parent=DefaultProperties
+Browser=Windows Media Player
+Cookies=true
+
+[NSPlayer/10.*]
+Parent=Windows Media Player
+Version=10.0
+MajorVer=10
+MinorVer=0
+
+[NSPlayer/11.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=11.0
+MajorVer=11
+MinorVer=0
+
+[NSPlayer/4.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[NSPlayer/7.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=7.0
+MajorVer=7
+MinorVer=0
+
+[NSPlayer/8.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=8.0
+MajorVer=8
+MinorVer=0
+
+[NSPlayer/9.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=9.0
+MajorVer=9
+MinorVer=0
+
+[Windows-Media-Player/10.*]
+Parent=Windows Media Player
+Browser=Windows-Media-Player
+Version=10.0
+MajorVer=10
+MinorVer=0
+Win32=true
+
+[Windows-Media-Player/11.*]
+Parent=Windows Media Player
+Version=11.0
+MajorVer=11
+MinorVer=0
+Win32=true
+
+[Windows-Media-Player/7.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=7.0
+MajorVer=7
+MinorVer=0
+Win32=true
+
+[Windows-Media-Player/8.*]
+Parent=Windows Media Player
+Browser=Windows Media Player
+Version=8.0
+MajorVer=8
+MinorVer=0
+Win32=true
+
+[Windows-Media-Player/9.*]
+Parent=Windows Media Player
+Version=9.0
+MajorVer=9
+MinorVer=0
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune
+
+[Zune]
+Parent=DefaultProperties
+Browser=Zune
+Cookies=true
+
+[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*]
+Parent=Zune
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*]
+Parent=Zune
+Version=2.5
+MajorVer=2
+MinorVer=5
+
+[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*]
+Parent=Zune
+Version=3.0
+MajorVer=3
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0
+
+[QuickTime 7.0]
+Parent=DefaultProperties
+Browser=QuickTime
+Version=7.0
+MajorVer=7
+Cookies=true
+
+[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)]
+Parent=QuickTime 7.0
+Platform=MacOSX
+
+[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)]
+Parent=QuickTime 7.0
+Platform=MacPPC
+
+[QuickTime (qtver=7.0*;os=Windows 95*)]
+Parent=QuickTime 7.0
+Platform=Win95
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows 98*)]
+Parent=QuickTime 7.0
+Platform=Win98
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows Me*)]
+Parent=QuickTime 7.0
+Platform=WinME
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows NT 4.0*)]
+Parent=QuickTime 7.0
+Platform=WinNT
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows NT 5.0*)]
+Parent=QuickTime 7.0
+Platform=Win2000
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows NT 5.1*)]
+Parent=QuickTime 7.0
+Platform=WinXP
+Win32=true
+
+[QuickTime (qtver=7.0*;os=Windows NT 5.2*)]
+Parent=QuickTime 7.0
+Platform=Win2003
+Win32=true
+
+[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*]
+Parent=QuickTime 7.0
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1
+
+[QuickTime 7.1]
+Parent=DefaultProperties
+Browser=QuickTime
+Version=7.1
+MajorVer=7
+MinorVer=1
+Cookies=true
+
+[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)]
+Parent=QuickTime 7.1
+Platform=MacOSX
+
+[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)]
+Parent=QuickTime 7.1
+Platform=MacPPC
+
+[QuickTime (qtver=7.1*;os=Windows 98*)]
+Parent=QuickTime 7.1
+Platform=Win98
+Win32=true
+
+[QuickTime (qtver=7.1*;os=Windows NT 4.0*)]
+Parent=QuickTime 7.1
+Platform=WinNT
+Win32=true
+
+[QuickTime (qtver=7.1*;os=Windows NT 5.0*)]
+Parent=QuickTime 7.1
+Platform=Win2000
+Win32=true
+
+[QuickTime (qtver=7.1*;os=Windows NT 5.1*)]
+Parent=QuickTime 7.1
+Platform=WinXP
+Win32=true
+
+[QuickTime (qtver=7.1*;os=Windows NT 5.2*)]
+Parent=QuickTime 7.1
+Platform=Win2003
+Win32=true
+
+[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*]
+Parent=QuickTime 7.1
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2
+
+[QuickTime 7.2]
+Parent=DefaultProperties
+Browser=QuickTime
+Version=7.2
+MajorVer=7
+MinorVer=2
+Platform=MacOSX
+Cookies=true
+
+[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)]
+Parent=QuickTime 7.2
+Platform=MacOSX
+
+[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)]
+Parent=QuickTime 7.2
+Platform=MacPPC
+
+[QuickTime (qtver=7.2*;os=Windows 98*)]
+Parent=QuickTime 7.2
+Platform=Win98
+Win32=true
+
+[QuickTime (qtver=7.2*;os=Windows NT 4.0*)]
+Parent=QuickTime 7.2
+Platform=WinNT
+Win32=true
+
+[QuickTime (qtver=7.2*;os=Windows NT 5.0*)]
+Parent=QuickTime 7.2
+Platform=Win2000
+Win32=true
+
+[QuickTime (qtver=7.2*;os=Windows NT 5.1*)]
+Parent=QuickTime 7.2
+Platform=WinXP
+Win32=true
+
+[QuickTime (qtver=7.2*;os=Windows NT 5.2*)]
+Parent=QuickTime 7.2
+Platform=Win2003
+Win32=true
+
+[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*]
+Parent=QuickTime 7.2
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3
+
+[QuickTime 7.3]
+Parent=DefaultProperties
+Browser=QuickTime
+Version=7.3
+MajorVer=7
+MinorVer=3
+Platform=MacOSX
+Cookies=true
+
+[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)]
+Parent=QuickTime 7.3
+Platform=MacOSX
+
+[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)]
+Parent=QuickTime 7.3
+Platform=MacPPC
+
+[QuickTime (qtver=7.3*;os=Windows 98*)]
+Parent=QuickTime 7.3
+Platform=Win98
+Win32=true
+
+[QuickTime (qtver=7.3*;os=Windows NT 4.0*)]
+Parent=QuickTime 7.3
+Platform=WinNT
+Win32=true
+
+[QuickTime (qtver=7.3*;os=Windows NT 5.0*)]
+Parent=QuickTime 7.3
+Platform=Win2000
+Win32=true
+
+[QuickTime (qtver=7.3*;os=Windows NT 5.1*)]
+Parent=QuickTime 7.3
+Platform=WinXP
+Win32=true
+
+[QuickTime (qtver=7.3*;os=Windows NT 5.2*)]
+Parent=QuickTime 7.3
+Platform=Win2003
+Win32=true
+
+[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*]
+Parent=QuickTime 7.3
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4
+
+[QuickTime 7.4]
+Parent=DefaultProperties
+Browser=QuickTime
+Version=7.4
+MajorVer=7
+MinorVer=4
+Platform=MacOSX
+Cookies=true
+
+[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)]
+Parent=QuickTime 7.4
+Platform=MacOSX
+
+[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)]
+Parent=QuickTime 7.4
+Platform=MacPPC
+
+[QuickTime (qtver=7.4*;os=Windows 98*)]
+Parent=QuickTime 7.4
+Platform=Win98
+Win32=true
+
+[QuickTime (qtver=7.4*;os=Windows NT 4.0*)]
+Parent=QuickTime 7.4
+Platform=WinNT
+Win32=true
+
+[QuickTime (qtver=7.4*;os=Windows NT 5.0*)]
+Parent=QuickTime 7.4
+Platform=Win2000
+Win32=true
+
+[QuickTime (qtver=7.4*;os=Windows NT 5.1*)]
+Parent=QuickTime 7.4
+Platform=WinXP
+Win32=true
+
+[QuickTime (qtver=7.4*;os=Windows NT 5.2*)]
+Parent=QuickTime 7.4
+Platform=Win2003
+Win32=true
+
+[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*]
+Parent=QuickTime 7.4
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android
+
+[Android]
+Parent=DefaultProperties
+Browser=Android
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+
+[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*]
+Parent=Android
+Browser=Android
+Platform=Linux
+isMobileDevice=true
+
+[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*]
+Parent=Android
+Browser=Android
+Platform=Linux
+isMobileDevice=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry
+
+[BlackBerry]
+Parent=DefaultProperties
+Browser=BlackBerry
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+
+[*BlackBerry*]
+Parent=BlackBerry
+
+[*BlackBerrySimulator/*]
+Parent=BlackBerry
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer
+
+[Blazer]
+Parent=DefaultProperties
+Browser=Handspring Blazer
+Platform=Palm
+Frames=true
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160]
+Parent=Blazer
+Version=3.0
+MajorVer=3
+MinorVer=0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448]
+Parent=Blazer
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320]
+Parent=Blazer
+Version=4.1
+MajorVer=4
+MinorVer=1
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320]
+Parent=Blazer
+Version=4.2
+MajorVer=4
+MinorVer=2
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320]
+Parent=Blazer
+Version=4.4
+MajorVer=4
+MinorVer=4
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320]
+Parent=Blazer
+Version=4.5
+MajorVer=4
+MinorVer=5
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo
+
+[DoCoMo]
+Parent=DefaultProperties
+Browser=DoCoMo
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+
+[DoCoMo/1.0*]
+Parent=DoCoMo
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WAP
+
+[DoCoMo/2.0*]
+Parent=DoCoMo
+Version=2.0
+MajorVer=2
+MinorVer=0
+Platform=WAP
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile
+
+[IEMobile]
+Parent=DefaultProperties
+Browser=IEMobile
+Platform=WinCE
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+VBScript=true
+JavaScript=true
+ActiveXControls=true
+isMobileDevice=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*]
+Parent=IEMobile
+Version=6.0
+MajorVer=6
+MinorVer=0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*]
+Parent=IEMobile
+Version=7.0
+MajorVer=7
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone
+
+[iPhone]
+Parent=DefaultProperties
+Browser=iPhone
+Platform=iPhone OSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+isMobileDevice=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/4.0 (iPhone; *)]
+Parent=iPhone
+
+[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)]
+Parent=iPhone
+
+[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*]
+Parent=iPhone
+Browser=iPhone Simulator
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*]
+Parent=iPhone
+Browser=iPhone Simulator
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*]
+Parent=iPhone
+Browser=iPhone Simulator
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone)]
+Parent=iPhone
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)]
+Parent=iPhone
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*]
+Parent=iPhone
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*]
+Parent=iPhone
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)]
+Parent=iPhone
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*]
+Parent=iPhone
+
+[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)]
+Parent=iPhone
+
+[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*]
+Parent=iPhone
+Version=3.0
+MajorVer=3
+MinorVer=0
+
+[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*]
+Parent=iPhone
+Browser=iTouch
+
+[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*]
+Parent=iPhone
+Browser=iTouch
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI
+
+[KDDI]
+Parent=DefaultProperties
+Browser=KDDI
+Frames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+VBScript=true
+JavaScript=true
+ActiveXControls=true
+isMobileDevice=true
+CssVersion=1
+supportsCSS=true
+
+[KDDI-* UP.Browser/* (GUI) MMP/*]
+Parent=KDDI
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile
+
+[Miscellaneous Mobile]
+Parent=DefaultProperties
+Browser=
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*]
+Parent=Miscellaneous Mobile
+Browser=Bolt
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser
+
+[Motorola Internet Browser]
+Parent=DefaultProperties
+Browser=Motorola Internet Browser
+Frames=true
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[MOT-*/*]
+Parent=Motorola Internet Browser
+
+[MOT-1*/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-8700_/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-A-0A/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-A-2B/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-A-88/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-C???/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-GATW_/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-L6/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-L7/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-M*/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)]
+Parent=Motorola Internet Browser
+Win32=true
+
+[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)]
+Parent=Motorola Internet Browser
+Win32=true
+
+[MOT-SAP4_/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-T*/*]
+Parent=Motorola Internet Browser
+
+[MOT-T7*/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-T721*]
+Parent=Motorola Internet Browser
+
+[MOT-TA02/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-V*/*]
+Parent=Motorola Internet Browser
+
+[MOT-V*/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-V*/* UP.Browser/*]
+Parent=Motorola Internet Browser
+
+[MOT-V3/* MIB/*]
+Parent=Motorola Internet Browser
+
+[MOT-V4*/* MIB/*]
+Parent=Motorola Internet Browser
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy
+
+[MSN Mobile Proxy]
+Parent=DefaultProperties
+Browser=MSN Mobile Proxy
+Win32=true
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+ActiveXControls=true
+isMobileDevice=true
+
+[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)]
+Parent=MSN Mobile Proxy
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront
+
+[NetFront]
+Parent=DefaultProperties
+Browser=NetFront
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+
+[*NetFront/*]
+Parent=NetFront
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia
+
+[Nokia]
+Parent=DefaultProperties
+Browser=Nokia
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[*Nokia*/*]
+Parent=Nokia
+
+[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*]
+Parent=Nokia
+Platform=SymbianOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser
+
+[Openwave Mobile Browser]
+Parent=DefaultProperties
+Browser=Openwave Mobile Browser
+Alpha=true
+Win32=true
+Win64=true
+Frames=true
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[*UP.Browser/*]
+Parent=Openwave Mobile Browser
+
+[*UP.Link/*]
+Parent=Openwave Mobile Browser
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini
+
+[Opera Mini]
+Parent=DefaultProperties
+Browser=Opera Mini
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+
+[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*]
+Parent=Opera Mini
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*]
+Parent=Opera Mini
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*]
+Parent=Opera Mini
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*]
+Parent=Opera Mini
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*]
+Parent=Opera Mini
+Version=3.0
+MajorVer=3
+MinorVer=0
+
+[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*]
+Parent=Opera Mini
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*]
+Parent=Opera Mini
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*]
+Parent=Opera Mini
+Version=4.1
+MajorVer=4
+MinorVer=1
+
+[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*]
+Parent=Opera Mini
+Version=4.2
+MajorVer=4
+MinorVer=2
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile
+
+[Opera Mobile]
+Parent=DefaultProperties
+Browser=Opera Mobi
+Frames=true
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)]
+Parent=Opera Mobile
+Version=9.5
+MajorVer=9
+MinorVer=5
+
+[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)]
+Parent=Opera Mobile
+Version=9.5
+MajorVer=9
+MinorVer=5
+
+[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*]
+Parent=Opera Mobile
+Version=9.51
+MajorVer=9
+MinorVer=51
+Beta=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation
+
+[Playstation]
+Parent=DefaultProperties
+Browser=Playstation
+Platform=WAP
+Frames=true
+Tables=true
+Cookies=true
+isMobileDevice=true
+
+[Mozilla/* (PLAYSTATION *; *)]
+Parent=Playstation
+Browser=PlayStation 3
+Frames=false
+
+[Mozilla/* (PSP (PlayStation Portable); *)]
+Parent=Playstation
+
+[Sony PS2 (Linux)]
+Parent=Playstation
+Browser=Sony PS2
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC
+
+[Pocket PC]
+Parent=DefaultProperties
+Browser=Pocket PC
+Platform=WinCE
+Win32=true
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+ActiveXControls=true
+isMobileDevice=true
+CssVersion=1
+supportsCSS=true
+
+[*(compatible; MSIE *.*; Windows CE; PPC; *)]
+Parent=Pocket PC
+
+[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*]
+Parent=Pocket PC
+Win32=true
+
+[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*]
+Parent=Pocket PC
+Win32=true
+
+[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)]
+Parent=Pocket PC
+
+[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*]
+Parent=Pocket PC
+
+[Windows CE (Pocket PC) - Version *.*]
+Parent=Pocket PC
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser
+
+[SEMC Browser]
+Parent=DefaultProperties
+Browser=SEMC Browser
+Platform=JAVA
+Tables=true
+isMobileDevice=true
+CssVersion=1
+supportsCSS=true
+
+[*SEMC-Browser/*]
+Parent=SEMC Browser
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson
+
+[SonyEricsson]
+Parent=DefaultProperties
+Browser=SonyEricsson
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+isMobileDevice=true
+CssVersion=1
+supportsCSS=true
+
+[*Ericsson*]
+Parent=SonyEricsson
+
+[*SonyEricsson*]
+Parent=SonyEricsson
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox
+
+[Netbox]
+Parent=DefaultProperties
+Browser=Netbox
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/3.01 (compatible; Netbox/*; Linux*)]
+Parent=Netbox
+Browser=Netbox
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV
+
+[PowerTV]
+Parent=DefaultProperties
+Browser=PowerTV
+Platform=PowerTV
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)]
+Parent=PowerTV
+Version=1.5
+MajorVer=1
+MinorVer=5
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV
+
+[WebTV]
+Parent=DefaultProperties
+Browser=WebTV/MSNTV
+Platform=WebTV
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)]
+Parent=WebTV
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)]
+Parent=WebTV
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)]
+Parent=WebTV
+Version=2.1
+MajorVer=2
+MinorVer=1
+
+[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)]
+Parent=WebTV
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)]
+Parent=WebTV
+Version=2.3
+MajorVer=2
+MinorVer=3
+
+[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)]
+Parent=WebTV
+Version=2.4
+MajorVer=2
+MinorVer=4
+
+[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)]
+Parent=WebTV
+Version=2.5
+MajorVer=2
+MinorVer=5
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)]
+Parent=WebTV
+Version=2.6
+MajorVer=2
+MinorVer=6
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)]
+Parent=WebTV
+Version=2.7
+MajorVer=2
+MinorVer=7
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)]
+Parent=WebTV
+Version=2.8
+MajorVer=2
+MinorVer=8
+JavaApplets=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)]
+Parent=WebTV
+Version=2.9
+MajorVer=2
+MinorVer=9
+JavaApplets=true
+CssVersion=1
+supportsCSS=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya
+
+[Amaya]
+Parent=DefaultProperties
+Browser=Amaya
+Tables=true
+Cookies=true
+
+[amaya/7.*]
+Parent=Amaya
+Version=7.0
+MajorVer=7
+MinorVer=0
+
+[amaya/8.0*]
+Parent=Amaya
+Version=8.0
+MajorVer=8
+MinorVer=0
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.1*]
+Parent=Amaya
+Version=8.1
+MajorVer=8
+MinorVer=1
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.2*]
+Parent=Amaya
+Version=8.2
+MajorVer=8
+MinorVer=2
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.3*]
+Parent=Amaya
+Version=8.3
+MajorVer=8
+MinorVer=3
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.4*]
+Parent=Amaya
+Version=8.4
+MajorVer=8
+MinorVer=4
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.5*]
+Parent=Amaya
+Version=8.5
+MajorVer=8
+MinorVer=5
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.6*]
+Parent=Amaya
+Version=8.6
+MajorVer=8
+MinorVer=6
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.7*]
+Parent=Amaya
+Version=8.7
+MajorVer=8
+MinorVer=7
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.8*]
+Parent=Amaya
+Version=8.8
+MajorVer=8
+MinorVer=8
+CssVersion=2
+supportsCSS=true
+
+[amaya/8.9*]
+Parent=Amaya
+Version=8.9
+MajorVer=8
+MinorVer=9
+CssVersion=2
+supportsCSS=true
+
+[amaya/9.0*]
+Parent=Amaya
+Version=9.0
+MajorVer=8
+MinorVer=0
+CssVersion=2
+supportsCSS=true
+
+[amaya/9.1*]
+Parent=Amaya
+Version=9.1
+MajorVer=9
+MinorVer=1
+CssVersion=2
+supportsCSS=true
+
+[amaya/9.2*]
+Parent=Amaya
+Version=9.2
+MajorVer=9
+MinorVer=2
+CssVersion=2
+supportsCSS=true
+
+[amaya/9.3*]
+Parent=Amaya
+Version=9.3
+MajorVer=9
+MinorVer=3
+
+[amaya/9.4*]
+Parent=Amaya
+Version=9.4
+MajorVer=9
+MinorVer=4
+
+[amaya/9.5*]
+Parent=Amaya
+Version=9.5
+MajorVer=9
+MinorVer=5
+
+[Emacs-w3m/*]
+Parent=Emacs/W3
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links
+
+[Links]
+Parent=DefaultProperties
+Browser=Links
+Frames=true
+Tables=true
+
+[Links (0.9*; CYGWIN_NT-5.1*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=WinXP
+
+[Links (0.9*; Darwin*)]
+Parent=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=MacPPC
+
+[Links (0.9*; FreeBSD*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=FreeBSD
+
+[Links (0.9*; Linux*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=Linux
+
+[Links (0.9*; OS/2*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=OS/2
+
+[Links (0.9*; Unix*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=Unix
+
+[Links (0.9*; Win32*)]
+Parent=Links
+Browser=Links
+Version=0.9
+MajorVer=0
+MinorVer=9
+Platform=Win32
+Win32=true
+
+[Links (1.0*; CYGWIN_NT-5.1*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinXP
+
+[Links (1.0*; FreeBSD*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=FreeBSD
+
+[Links (1.0*; Linux*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Linux
+
+[Links (1.0*; OS/2*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=OS/2
+
+[Links (1.0*; Unix*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Unix
+
+[Links (1.0*; Win32*)]
+Parent=Links
+Browser=Links
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win32
+Win32=true
+
+[Links (2.0*; Linux*)]
+Parent=Links
+Browser=Links
+Version=2.0
+MajorVer=2
+MinorVer=0
+Platform=Linux
+
+[Links (2.1*; FreeBSD*)]
+Parent=Links
+Browser=Links
+Version=2.1
+MajorVer=2
+MinorVer=1
+Platform=FreeBSD
+
+[Links (2.1*; Linux *)]
+Parent=Links
+Browser=Links
+Version=2.1
+MajorVer=2
+MinorVer=1
+Platform=Linux
+
+[Links (2.1*; OpenBSD*)]
+Parent=Links
+Browser=Links
+Version=2.1
+MajorVer=2
+MinorVer=1
+Platform=OpenBSD
+
+[Links (2.2*; FreeBSD*)]
+Parent=Links
+Version=2.2
+MajorVer=2
+MinorVer=2
+Platform=FreeBSD
+
+[Links (2.2*; Linux *)]
+Parent=Links
+Version=2.2
+MajorVer=2
+MinorVer=2
+Platform=Linux
+
+[Links (2.2*; OpenBSD*)]
+Parent=Links
+Version=2.2
+MajorVer=2
+MinorVer=2
+Platform=OpenBSD
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx
+
+[Lynx]
+Parent=DefaultProperties
+Browser=Lynx
+Frames=true
+Tables=true
+
+[Lynx *]
+Parent=Lynx
+Browser=Lynx
+
+[Lynx/2.3*]
+Parent=Lynx
+Browser=Lynx
+Version=2.3
+MajorVer=2
+MinorVer=3
+
+[Lynx/2.4*]
+Parent=Lynx
+Browser=Lynx
+Version=2.4
+MajorVer=2
+MinorVer=4
+
+[Lynx/2.5*]
+Parent=Lynx
+Browser=Lynx
+Version=2.5
+MajorVer=2
+MinorVer=5
+
+[Lynx/2.6*]
+Parent=Lynx
+Browser=Lynx
+Version=2.6
+MajorVer=2
+MinorVer=6
+
+[Lynx/2.7*]
+Parent=Lynx
+Browser=Lynx
+Version=2.7
+MajorVer=2
+MinorVer=7
+
+[Lynx/2.8*]
+Parent=Lynx
+Browser=Lynx
+Version=2.8
+MajorVer=2
+MinorVer=8
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic
+
+[Mosaic]
+Parent=DefaultProperties
+Browser=Mosaic
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m
+
+[w3m]
+Parent=DefaultProperties
+Browser=w3m
+Frames=true
+Tables=true
+
+[w3m/0.1*]
+Parent=w3m
+Browser=w3m
+Version=0.1
+MajorVer=0
+MinorVer=1
+
+[w3m/0.2*]
+Parent=w3m
+Browser=w3m
+Version=0.2
+MajorVer=0
+MinorVer=2
+
+[w3m/0.3*]
+Parent=w3m
+Browser=w3m
+Version=0.3
+MajorVer=0
+MinorVer=3
+
+[w3m/0.4*]
+Parent=w3m
+Browser=w3m
+Version=0.4
+MajorVer=0
+MinorVer=4
+Cookies=true
+
+[w3m/0.5*]
+Parent=w3m
+Browser=w3m
+Version=0.5
+MajorVer=0
+MinorVer=5
+Cookies=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10
+
+[ELinks 0.10]
+Parent=DefaultProperties
+Browser=ELinks
+Version=0.10
+MinorVer=10
+Frames=true
+Tables=true
+
+[ELinks (0.10*; *AIX*)]
+Parent=ELinks 0.10
+Platform=AIX
+
+[ELinks (0.10*; *BeOS*)]
+Parent=ELinks 0.10
+Platform=BeOS
+
+[ELinks (0.10*; *CygWin*)]
+Parent=ELinks 0.10
+Platform=CygWin
+
+[ELinks (0.10*; *Darwin*)]
+Parent=ELinks 0.10
+Platform=Darwin
+
+[ELinks (0.10*; *Digital Unix*)]
+Parent=ELinks 0.10
+Platform=Digital Unix
+
+[ELinks (0.10*; *FreeBSD*)]
+Parent=ELinks 0.10
+Platform=FreeBSD
+
+[ELinks (0.10*; *HPUX*)]
+Parent=ELinks 0.10
+Platform=HP-UX
+
+[ELinks (0.10*; *IRIX*)]
+Parent=ELinks 0.10
+Platform=IRIX
+
+[ELinks (0.10*; *Linux*)]
+Parent=ELinks 0.10
+Platform=Linux
+
+[ELinks (0.10*; *NetBSD*)]
+Parent=ELinks 0.10
+Platform=NetBSD
+
+[ELinks (0.10*; *OpenBSD*)]
+Parent=ELinks 0.10
+Platform=OpenBSD
+
+[ELinks (0.10*; *OS/2*)]
+Parent=ELinks 0.10
+Platform=OS/2
+
+[ELinks (0.10*; *RISC*)]
+Parent=ELinks 0.10
+Platform=RISC OS
+
+[ELinks (0.10*; *Solaris*)]
+Parent=ELinks 0.10
+Platform=Solaris
+
+[ELinks (0.10*; *Unix*)]
+Parent=ELinks 0.10
+Platform=Unix
+
+[ELinks/0.10* (*AIX*)]
+Parent=ELinks 0.10
+Platform=AIX
+
+[ELinks/0.10* (*BeOS*)]
+Parent=ELinks 0.10
+Platform=BeOS
+
+[ELinks/0.10* (*CygWin*)]
+Parent=ELinks 0.10
+Platform=CygWin
+
+[ELinks/0.10* (*Darwin*)]
+Parent=ELinks 0.10
+Platform=Darwin
+
+[ELinks/0.10* (*Digital Unix*)]
+Parent=ELinks 0.10
+Platform=Digital Unix
+
+[ELinks/0.10* (*FreeBSD*)]
+Parent=ELinks 0.10
+Platform=FreeBSD
+
+[ELinks/0.10* (*HPUX*)]
+Parent=ELinks 0.10
+Platform=HP-UX
+
+[ELinks/0.10* (*IRIX*)]
+Parent=ELinks 0.10
+Platform=IRIX
+
+[ELinks/0.10* (*Linux*)]
+Parent=ELinks 0.10
+Platform=Linux
+
+[ELinks/0.10* (*NetBSD*)]
+Parent=ELinks 0.10
+Platform=NetBSD
+
+[ELinks/0.10* (*OpenBSD*)]
+Parent=ELinks 0.10
+Platform=OpenBSD
+
+[ELinks/0.10* (*OS/2*)]
+Parent=ELinks 0.10
+Platform=OS/2
+
+[ELinks/0.10* (*RISC*)]
+Parent=ELinks 0.10
+Platform=RISC OS
+
+[ELinks/0.10* (*Solaris*)]
+Parent=ELinks 0.10
+Platform=Solaris
+
+[ELinks/0.10* (*Unix*)]
+Parent=ELinks 0.10
+Platform=Unix
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11
+
+[ELinks 0.11]
+Parent=DefaultProperties
+Browser=ELinks
+Version=0.11
+MinorVer=11
+Frames=true
+Tables=true
+
+[ELinks (0.11*; *AIX*)]
+Parent=ELinks 0.11
+Platform=AIX
+
+[ELinks (0.11*; *BeOS*)]
+Parent=ELinks 0.11
+Platform=BeOS
+
+[ELinks (0.11*; *CygWin*)]
+Parent=ELinks 0.11
+Platform=CygWin
+
+[ELinks (0.11*; *Darwin*)]
+Parent=ELinks 0.11
+Platform=Darwin
+
+[ELinks (0.11*; *Digital Unix*)]
+Parent=ELinks 0.11
+Platform=Digital Unix
+
+[ELinks (0.11*; *FreeBSD*)]
+Parent=ELinks 0.11
+Platform=FreeBSD
+
+[ELinks (0.11*; *HPUX*)]
+Parent=ELinks 0.11
+Platform=HP-UX
+
+[ELinks (0.11*; *IRIX*)]
+Parent=ELinks 0.11
+Platform=IRIX
+
+[ELinks (0.11*; *Linux*)]
+Parent=ELinks 0.11
+Platform=Linux
+
+[ELinks (0.11*; *NetBSD*)]
+Parent=ELinks 0.11
+Platform=NetBSD
+
+[ELinks (0.11*; *OpenBSD*)]
+Parent=ELinks 0.11
+Platform=OpenBSD
+
+[ELinks (0.11*; *OS/2*)]
+Parent=ELinks 0.11
+Platform=OS/2
+
+[ELinks (0.11*; *RISC*)]
+Parent=ELinks 0.11
+Platform=RISC OS
+
+[ELinks (0.11*; *Solaris*)]
+Parent=ELinks 0.11
+Platform=Solaris
+
+[ELinks (0.11*; *Unix*)]
+Parent=ELinks 0.11
+Platform=Unix
+
+[ELinks/0.11* (*AIX*)]
+Parent=ELinks 0.11
+Platform=AIX
+
+[ELinks/0.11* (*BeOS*)]
+Parent=ELinks 0.11
+Platform=BeOS
+
+[ELinks/0.11* (*CygWin*)]
+Parent=ELinks 0.11
+Platform=CygWin
+
+[ELinks/0.11* (*Darwin*)]
+Parent=ELinks 0.11
+Platform=Darwin
+
+[ELinks/0.11* (*Digital Unix*)]
+Parent=ELinks 0.11
+Platform=Digital Unix
+
+[ELinks/0.11* (*FreeBSD*)]
+Parent=ELinks 0.11
+Platform=FreeBSD
+
+[ELinks/0.11* (*HPUX*)]
+Parent=ELinks 0.11
+Platform=HP-UX
+
+[ELinks/0.11* (*IRIX*)]
+Parent=ELinks 0.11
+Platform=IRIX
+
+[ELinks/0.11* (*Linux*)]
+Parent=ELinks 0.11
+Platform=Linux
+
+[ELinks/0.11* (*NetBSD*)]
+Parent=ELinks 0.11
+Platform=NetBSD
+
+[ELinks/0.11* (*OpenBSD*)]
+Parent=ELinks 0.11
+Platform=OpenBSD
+
+[ELinks/0.11* (*OS/2*)]
+Parent=ELinks 0.11
+Platform=OS/2
+
+[ELinks/0.11* (*RISC*)]
+Parent=ELinks 0.11
+Platform=RISC OS
+
+[ELinks/0.11* (*Solaris*)]
+Parent=ELinks 0.11
+Platform=Solaris
+
+[ELinks/0.11* (*Unix*)]
+Parent=ELinks 0.11
+Platform=Unix
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12
+
+[ELinks 0.12]
+Parent=DefaultProperties
+Browser=ELinks
+Version=0.12
+MinorVer=12
+Frames=true
+Tables=true
+
+[ELinks (0.12*; *AIX*)]
+Parent=ELinks 0.12
+Platform=AIX
+
+[ELinks (0.12*; *BeOS*)]
+Parent=ELinks 0.12
+Platform=BeOS
+
+[ELinks (0.12*; *CygWin*)]
+Parent=ELinks 0.12
+Platform=CygWin
+
+[ELinks (0.12*; *Darwin*)]
+Parent=ELinks 0.12
+Platform=Darwin
+
+[ELinks (0.12*; *Digital Unix*)]
+Parent=ELinks 0.12
+Platform=Digital Unix
+
+[ELinks (0.12*; *FreeBSD*)]
+Parent=ELinks 0.12
+Platform=FreeBSD
+
+[ELinks (0.12*; *HPUX*)]
+Parent=ELinks 0.12
+Platform=HP-UX
+
+[ELinks (0.12*; *IRIX*)]
+Parent=ELinks 0.12
+Platform=IRIX
+
+[ELinks (0.12*; *Linux*)]
+Parent=ELinks 0.12
+Platform=Linux
+
+[ELinks (0.12*; *NetBSD*)]
+Parent=ELinks 0.12
+Platform=NetBSD
+
+[ELinks (0.12*; *OpenBSD*)]
+Parent=ELinks 0.12
+Platform=OpenBSD
+
+[ELinks (0.12*; *OS/2*)]
+Parent=ELinks 0.12
+Platform=OS/2
+
+[ELinks (0.12*; *RISC*)]
+Parent=ELinks 0.12
+Platform=RISC OS
+
+[ELinks (0.12*; *Solaris*)]
+Parent=ELinks 0.12
+Platform=Solaris
+
+[ELinks (0.12*; *Unix*)]
+Parent=ELinks 0.12
+Platform=Unix
+
+[ELinks/0.12* (*AIX*)]
+Parent=ELinks 0.12
+Platform=AIX
+
+[ELinks/0.12* (*BeOS*)]
+Parent=ELinks 0.12
+Platform=BeOS
+
+[ELinks/0.12* (*CygWin*)]
+Parent=ELinks 0.12
+Platform=CygWin
+
+[ELinks/0.12* (*Darwin*)]
+Parent=ELinks 0.12
+Platform=Darwin
+
+[ELinks/0.12* (*Digital Unix*)]
+Parent=ELinks 0.12
+Platform=Digital Unix
+
+[ELinks/0.12* (*FreeBSD*)]
+Parent=ELinks 0.12
+Platform=FreeBSD
+
+[ELinks/0.12* (*HPUX*)]
+Parent=ELinks 0.12
+Platform=HP-UX
+
+[ELinks/0.12* (*IRIX*)]
+Parent=ELinks 0.12
+Platform=IRIX
+
+[ELinks/0.12* (*Linux*)]
+Parent=ELinks 0.12
+Platform=Linux
+
+[ELinks/0.12* (*NetBSD*)]
+Parent=ELinks 0.12
+Platform=NetBSD
+
+[ELinks/0.12* (*OpenBSD*)]
+Parent=ELinks 0.12
+Platform=OpenBSD
+
+[ELinks/0.12* (*OS/2*)]
+Parent=ELinks 0.12
+Platform=OS/2
+
+[ELinks/0.12* (*RISC*)]
+Parent=ELinks 0.12
+Platform=RISC OS
+
+[ELinks/0.12* (*Solaris*)]
+Parent=ELinks 0.12
+Platform=Solaris
+
+[ELinks/0.12* (*Unix*)]
+Parent=ELinks 0.12
+Platform=Unix
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9
+
+[ELinks 0.9]
+Parent=DefaultProperties
+Browser=ELinks
+Version=0.9
+MinorVer=9
+Frames=true
+Tables=true
+
+[ELinks (0.9*; *AIX*)]
+Parent=ELinks 0.9
+Platform=AIX
+
+[ELinks (0.9*; *BeOS*)]
+Parent=ELinks 0.9
+Platform=BeOS
+
+[ELinks (0.9*; *CygWin*)]
+Parent=ELinks 0.9
+Platform=CygWin
+
+[ELinks (0.9*; *Darwin*)]
+Parent=ELinks 0.9
+Platform=Darwin
+
+[ELinks (0.9*; *Digital Unix*)]
+Parent=ELinks 0.9
+Platform=Digital Unix
+
+[ELinks (0.9*; *FreeBSD*)]
+Parent=ELinks 0.9
+Platform=FreeBSD
+
+[ELinks (0.9*; *HPUX*)]
+Parent=ELinks 0.9
+Platform=HP-UX
+
+[ELinks (0.9*; *IRIX*)]
+Parent=ELinks 0.9
+Platform=IRIX
+
+[ELinks (0.9*; *Linux*)]
+Parent=ELinks 0.9
+Platform=Linux
+
+[ELinks (0.9*; *NetBSD*)]
+Parent=ELinks 0.9
+Platform=NetBSD
+
+[ELinks (0.9*; *OpenBSD*)]
+Parent=ELinks 0.9
+Platform=OpenBSD
+
+[ELinks (0.9*; *OS/2*)]
+Parent=ELinks 0.9
+Platform=OS/2
+
+[ELinks (0.9*; *RISC*)]
+Parent=ELinks 0.9
+Platform=RISC OS
+
+[ELinks (0.9*; *Solaris*)]
+Parent=ELinks 0.9
+Platform=Solaris
+
+[ELinks (0.9*; *Unix*)]
+Parent=ELinks 0.9
+Platform=Unix
+
+[ELinks/0.9* (*AIX*)]
+Parent=ELinks 0.9
+Platform=AIX
+
+[ELinks/0.9* (*BeOS*)]
+Parent=ELinks 0.9
+Platform=BeOS
+
+[ELinks/0.9* (*CygWin*)]
+Parent=ELinks 0.9
+Platform=CygWin
+
+[ELinks/0.9* (*Darwin*)]
+Parent=ELinks 0.9
+Platform=Darwin
+
+[ELinks/0.9* (*Digital Unix*)]
+Parent=ELinks 0.9
+Platform=Digital Unix
+
+[ELinks/0.9* (*FreeBSD*)]
+Parent=ELinks 0.9
+Platform=FreeBSD
+
+[ELinks/0.9* (*HPUX*)]
+Parent=ELinks 0.9
+Platform=HP-UX
+
+[ELinks/0.9* (*IRIX*)]
+Parent=ELinks 0.9
+Platform=IRIX
+
+[ELinks/0.9* (*Linux*)]
+Parent=ELinks 0.9
+Platform=Linux
+
+[ELinks/0.9* (*NetBSD*)]
+Parent=ELinks 0.9
+Platform=NetBSD
+
+[ELinks/0.9* (*OpenBSD*)]
+Parent=ELinks 0.9
+Platform=OpenBSD
+
+[ELinks/0.9* (*OS/2*)]
+Parent=ELinks 0.9
+Platform=OS/2
+
+[ELinks/0.9* (*RISC*)]
+Parent=ELinks 0.9
+Platform=RISC OS
+
+[ELinks/0.9* (*Solaris*)]
+Parent=ELinks 0.9
+Platform=Solaris
+
+[ELinks/0.9* (*Unix*)]
+Parent=ELinks 0.9
+Platform=Unix
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit
+
+[AppleWebKit]
+Parent=DefaultProperties
+Browser=AppleWebKit
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)]
+Parent=AppleWebKit
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino
+
+[Camino]
+Parent=DefaultProperties
+Browser=Camino
+Platform=MacOSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*]
+Parent=Camino
+Version=0.7
+MajorVer=0
+MinorVer=7
+Beta=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*]
+Parent=Camino
+Version=0.8
+MajorVer=0
+MinorVer=8
+Beta=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*]
+Parent=Camino
+Version=0.9
+MajorVer=0
+MinorVer=9
+Beta=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*]
+Parent=Camino
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*]
+Parent=Camino
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*]
+Parent=Camino
+Version=1.3
+MajorVer=1
+MinorVer=3
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*]
+Parent=Camino
+Version=1.4
+MajorVer=1
+MinorVer=4
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*]
+Parent=Camino
+Version=1.5
+MajorVer=1
+MinorVer=5
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*]
+Parent=Camino
+Version=1.6
+MajorVer=1
+MinorVer=6
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera
+
+[Chimera]
+Parent=DefaultProperties
+Browser=Chimera
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+
+[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*]
+Parent=Chimera
+Platform=MacOSX
+
+[Mozilla/5.0 Gecko/* Chimera/*]
+Parent=Chimera
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo
+
+[Dillo]
+Parent=DefaultProperties
+Browser=Dillo
+Platform=Linux
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+CssVersion=2
+supportsCSS=true
+
+[Dillo/0.6*]
+Parent=Dillo
+Version=0.6
+MajorVer=0
+MinorVer=6
+
+[Dillo/0.7*]
+Parent=Dillo
+Version=0.7
+MajorVer=0
+MinorVer=7
+
+[Dillo/0.8*]
+Parent=Dillo
+Version=0.8
+MajorVer=0
+MinorVer=8
+
+[Dillo/2.0]
+Parent=Dillo
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3
+
+[Emacs/W3]
+Parent=DefaultProperties
+Browser=Emacs/W3
+Frames=true
+Tables=true
+Cookies=true
+
+[Emacs/W3/2.* (Unix*]
+Parent=Emacs/W3
+Version=2.0
+MajorVer=2
+MinorVer=0
+Platform=Unix
+
+[Emacs/W3/2.* (X11*]
+Parent=Emacs/W3
+Version=2.0
+MajorVer=2
+MinorVer=0
+Platform=Linux
+
+[Emacs/W3/3.* (Unix*]
+Parent=Emacs/W3
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=Unix
+
+[Emacs/W3/3.* (X11*]
+Parent=Emacs/W3
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=Linux
+
+[Emacs/W3/4.* (Unix*]
+Parent=Emacs/W3
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=Unix
+
+[Emacs/W3/4.* (X11*]
+Parent=Emacs/W3
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas
+
+[fantomas]
+Parent=DefaultProperties
+Browser=fantomas
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[Mozilla/4.0 (cloakBrowser)]
+Parent=fantomas
+Browser=fantomas cloakBrowser
+
+[Mozilla/4.0 (fantomas shadowMaker Browser)]
+Parent=fantomas
+Browser=fantomas shadowMaker Browser
+
+[Mozilla/4.0 (fantomBrowser)]
+Parent=fantomas
+Browser=fantomas fantomBrowser
+
+[Mozilla/4.0 (fantomCrew Browser)]
+Parent=fantomas
+Browser=fantomas fantomCrew Browser
+
+[Mozilla/4.0 (stealthBrowser)]
+Parent=fantomas
+Browser=fantomas stealthBrowser
+
+[multiBlocker browser*]
+Parent=fantomas
+Browser=fantomas multiBlocker browser
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage
+
+[FrontPage]
+Parent=DefaultProperties
+Browser=FrontPage
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[Mozilla/?* (compatible; MS FrontPage*)]
+Parent=FrontPage
+
+[MSFrontPage/*]
+Parent=FrontPage
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon
+
+[Galeon]
+Parent=DefaultProperties
+Browser=Galeon
+Platform=Linux
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*]
+Parent=Galeon
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*]
+Parent=Galeon
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 Galeon/1.* (X11; Linux*)*]
+Parent=Galeon
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 Galeon/2.* (X11; Linux*)*]
+Parent=Galeon
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser
+
+[HP Secure Web Browser]
+Parent=DefaultProperties
+Browser=HP Secure Web Browser
+Platform=OpenVMS
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.3
+MajorVer=1
+MinorVer=3
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.4
+MajorVer=1
+MinorVer=4
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.5
+MajorVer=1
+MinorVer=5
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.6
+MajorVer=1
+MinorVer=6
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.7
+MajorVer=1
+MinorVer=7
+
+[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*]
+Parent=HP Secure Web Browser
+Version=1.8
+MajorVer=1
+MinorVer=8
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse
+
+[IBrowse]
+Parent=DefaultProperties
+Browser=IBrowse
+Platform=Amiga
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+
+[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0]
+Parent=IBrowse
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[IBrowse/1.22 (AmigaOS *)]
+Parent=IBrowse
+Version=1.22
+MajorVer=1
+MinorVer=22
+
+[IBrowse/2.1 (AmigaOS *)]
+Parent=IBrowse
+Version=2.1
+MajorVer=2
+MinorVer=1
+
+[IBrowse/2.2 (AmigaOS *)]
+Parent=IBrowse
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+[IBrowse/2.3 (AmigaOS *)]
+Parent=IBrowse
+Version=2.2
+MajorVer=2
+MinorVer=3
+
+[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)]
+Parent=IBrowse
+Version=2.1
+MajorVer=2
+MinorVer=1
+
+[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)]
+Parent=IBrowse
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)]
+Parent=IBrowse
+Version=2.3
+MajorVer=2
+MinorVer=3
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab
+
+[iCab]
+Parent=DefaultProperties
+Browser=iCab
+Frames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[iCab/2.7* (Macintosh; ?; 68K*)]
+Parent=iCab
+Version=2.7
+MajorVer=2
+MinorVer=7
+Platform=Mac68K
+
+[iCab/2.7* (Macintosh; ?; PPC*)]
+Parent=iCab
+Version=2.7
+MajorVer=2
+MinorVer=7
+Platform=MacPPC
+
+[iCab/2.8* (Macintosh; ?; *Mac OS X*)]
+Parent=iCab
+Version=2.8
+MajorVer=2
+MinorVer=8
+Platform=MacOSX
+
+[iCab/2.8* (Macintosh; ?; 68K*)]
+Parent=iCab
+Version=2.8
+MajorVer=2
+MinorVer=8
+Platform=Mac68K
+
+[iCab/2.8* (Macintosh; ?; PPC)]
+Parent=iCab
+Version=2.8
+MajorVer=2
+MinorVer=8
+Platform=MacPPC
+
+[iCab/2.9* (Macintosh; ?; *Mac OS X*)]
+Parent=iCab
+Version=2.9
+MajorVer=2
+MinorVer=9
+Platform=MacOSX
+
+[iCab/2.9* (Macintosh; ?; 68K*)]
+Parent=iCab
+Version=2.9
+MajorVer=2
+MinorVer=9
+Platform=Mac68K
+
+[iCab/2.9* (Macintosh; ?; PPC*)]
+Parent=iCab
+Version=2.9
+MajorVer=2
+MinorVer=9
+Platform=MacPPC
+
+[iCab/3.0* (Macintosh; ?; *Mac OS X*)]
+Parent=iCab
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=MacOSX
+CssVersion=2
+supportsCSS=true
+
+[iCab/3.0* (Macintosh; ?; PPC*)]
+Parent=iCab
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=MacPPC
+CssVersion=2
+supportsCSS=true
+
+[iCab/4.0 (Macintosh; U; *Mac OS X)]
+Parent=iCab
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=MacOSX
+
+[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)]
+Parent=iCab
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=MacOSX
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)]
+Parent=iCab
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=MacPPC
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)]
+Parent=iCab
+Version=2.7
+MajorVer=2
+MinorVer=7
+Platform=Mac68K
+
+[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)]
+Parent=iCab
+Version=2.7
+MajorVer=2
+MinorVer=7
+Platform=MacPPC
+
+[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)]
+Parent=iCab
+Version=2.8
+MajorVer=2
+MinorVer=8
+Platform=MacOSX
+
+[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)]
+Parent=iCab
+Version=2.8
+MajorVer=2
+MinorVer=8
+Platform=MacPPC
+
+[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)]
+Parent=iCab
+Version=2.9
+MajorVer=2
+MinorVer=9
+Platform=MacOSX
+
+[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)]
+Parent=iCab
+Version=2.9
+MajorVer=2
+MinorVer=9
+Platform=MacPPC
+
+[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)]
+Parent=iCab
+Version=4.2
+MajorVer=4
+MinorVer=2
+Platform=MacOSX
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX
+
+[iSiloX]
+Parent=DefaultProperties
+Browser=iSiloX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+Crawler=true
+CssVersion=2
+supportsCSS=true
+
+[iSiloX/4.0* MacOS]
+Parent=iSiloX
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=MacPPC
+
+[iSiloX/4.0* Windows/32]
+Parent=iSiloX
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=Win32
+Win32=true
+
+[iSiloX/4.1* MacOS]
+Parent=iSiloX
+Version=4.1
+MajorVer=4
+MinorVer=1
+Platform=MacPPC
+
+[iSiloX/4.1* Windows/32]
+Parent=iSiloX
+Version=4.1
+MajorVer=4
+MinorVer=1
+Platform=Win32
+Win32=true
+
+[iSiloX/4.2* MacOS]
+Parent=iSiloX
+Version=4.2
+MajorVer=4
+MinorVer=2
+Platform=MacPPC
+
+[iSiloX/4.2* Windows/32]
+Parent=iSiloX
+Version=4.2
+MajorVer=4
+MinorVer=2
+Platform=Win32
+Win32=true
+
+[iSiloX/4.3* MacOS]
+Parent=iSiloX
+Version=4.3
+MajorVer=4
+MinorVer=4
+Platform=MacOSX
+
+[iSiloX/4.3* Windows/32]
+Parent=iSiloX
+Version=4.3
+MajorVer=4
+MinorVer=3
+Platform=Win32
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX
+
+[Lycoris Desktop/LX]
+Parent=DefaultProperties
+Browser=Lycoris Desktop/LX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+Crawler=true
+
+[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*]
+Parent=Lycoris Desktop/LX
+Version=1.1
+MajorVer=1
+MinorVer=1
+Platform=Linux
+
+[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*]
+Parent=Lycoris Desktop/LX
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic
+
+[Mosaic]
+Parent=DefaultProperties
+Browser=Mosaic
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+
+[Mozilla/4.0 (VMS_Mosaic)]
+Parent=Mosaic
+Platform=OpenVMS
+
+[VMS_Mosaic/3.7*]
+Parent=Mosaic
+Version=3.7
+MajorVer=3
+MinorVer=7
+Platform=OpenVMS
+
+[VMS_Mosaic/3.8*]
+Parent=Mosaic
+Version=3.8
+MajorVer=3
+MinorVer=8
+Platform=OpenVMS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive
+
+[NetPositive]
+Parent=DefaultProperties
+Browser=NetPositive
+Platform=BeOS
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+
+[*NetPositive/2.2*]
+Parent=NetPositive
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+[*NetPositive/2.2*BeOS*]
+Parent=NetPositive
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb
+
+[OmniWeb]
+Parent=DefaultProperties
+Browser=OmniWeb
+Platform=MacOSX
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+isMobileDevice=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*]
+Parent=OmniWeb
+Version=4.5
+MajorVer=4
+MinorVer=5
+Platform=MacOSX
+
+[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*]
+Parent=OmniWeb
+Version=5.
+MajorVer=5
+MinorVer=0
+Platform=MacOSX
+
+[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*]
+Parent=OmniWeb
+Version=6.0
+MajorVer=6
+MinorVer=0
+Platform=MacOSX
+
+[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*]
+Parent=OmniWeb
+Version=4.0
+MajorVer=4
+MinorVer=0
+Platform=MacPPC
+
+[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*]
+Parent=OmniWeb
+Version=5.0
+MajorVer=5
+MinorVer=0
+Platform=MacOSX
+
+[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*]
+Parent=OmniWeb
+Version=6.0
+MajorVer=6
+MinorVer=0
+Platform=MacPPC
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34]
+Parent=OmniWeb
+Version=5.1
+MajorVer=5
+MinorVer=1
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34]
+Parent=OmniWeb
+Version=5.1
+MajorVer=5
+MinorVer=1
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607]
+Parent=OmniWeb
+Version=5.5
+MajorVer=5
+MinorVer=5
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607]
+Parent=OmniWeb
+Version=5.5
+MajorVer=5
+MinorVer=5
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613]
+Parent=OmniWeb
+Version=5.6
+MajorVer=5
+MinorVer=6
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613]
+Parent=OmniWeb
+Version=5.6
+MajorVer=5
+MinorVer=6
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496]
+Parent=OmniWeb
+Version=4.5
+MajorVer=4
+MinorVer=5
+
+[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ]
+Parent=OmniWeb
+Version=5.0
+MajorVer=5
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira
+
+[Shiira]
+Parent=DefaultProperties
+Browser=Shiira
+Platform=MacOSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*]
+Parent=Shiira
+Version=0.9
+MajorVer=0
+MinorVer=9
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*]
+Parent=Shiira
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*]
+Parent=Shiira
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*]
+Parent=Shiira
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*]
+Parent=Shiira
+Version=2.1
+MajorVer=2
+MinorVer=1
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*]
+Parent=Shiira
+Version=2.2
+MajorVer=2
+MinorVer=2
+
+[Windows Maker]
+Parent=DefaultProperties
+Browser=WMaker
+Platform=Linux
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[WMaker*]
+Parent=Windows Maker
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0
+
+[K-Meleon 1.0]
+Parent=DefaultProperties
+Browser=K-Meleon
+Version=1.0
+MajorVer=1
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*]
+Parent=K-Meleon 1.0
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinNT
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1
+
+[K-Meleon 1.1]
+Parent=DefaultProperties
+Browser=K-Meleon
+Version=1.1
+MajorVer=1
+MinorVer=1
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*]
+Parent=K-Meleon 1.1
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinNT
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5
+
+[K-Meleon 1.5]
+Parent=DefaultProperties
+Browser=K-Meleon
+Version=1.5
+MajorVer=1
+MinorVer=5
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Platform=Win7
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*]
+Parent=K-Meleon 1.5
+Version=1.0
+MajorVer=1
+MinorVer=0
+Platform=WinNT
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0
+
+[Konqueror 3.0]
+Parent=DefaultProperties
+Browser=Konqueror
+Platform=Linux
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[*Konqueror/3.0*]
+Parent=Konqueror 3.0
+Version=3.0
+MajorVer=3
+MinorVer=0
+IFrames=false
+
+[*Konqueror/3.0*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=FreeBSD
+IFrames=false
+
+[*Konqueror/3.0*Linux*]
+Parent=Konqueror 3.0
+Version=3.0
+MajorVer=3
+MinorVer=0
+Platform=Linux
+IFrames=false
+
+[*Konqueror/3.1*]
+Parent=Konqueror 3.0
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[*Konqueror/3.1*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.1
+MajorVer=3
+MinorVer=1
+Platform=FreeBSD
+
+[*Konqueror/3.1*Linux*]
+Parent=Konqueror 3.0
+Version=3.1
+MajorVer=3
+MinorVer=1
+
+[*Konqueror/3.2*]
+Parent=Konqueror 3.0
+Version=3.2
+MajorVer=3
+MinorVer=2
+
+[*Konqueror/3.2*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.2
+MajorVer=3
+MinorVer=2
+Platform=FreeBSD
+
+[*Konqueror/3.2*Linux*]
+Parent=Konqueror 3.0
+Version=3.2
+MajorVer=3
+MinorVer=2
+Platform=Linux
+
+[*Konqueror/3.3*]
+Parent=Konqueror 3.0
+Version=3.3
+MajorVer=3
+MinorVer=3
+
+[*Konqueror/3.3*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.3
+MajorVer=3
+MinorVer=3
+Platform=FreeBSD
+
+[*Konqueror/3.3*Linux*]
+Parent=Konqueror 3.0
+Version=3.3
+MajorVer=3
+MinorVer=3
+Platform=Linux
+
+[*Konqueror/3.3*OpenBSD*]
+Parent=Konqueror 3.0
+Version=3.3
+MajorVer=3
+MinorVer=3
+Platform=OpenBSD
+
+[*Konqueror/3.4*]
+Parent=Konqueror 3.0
+Version=3.4
+MajorVer=3
+MinorVer=4
+
+[*Konqueror/3.4*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.4
+MajorVer=3
+MinorVer=4
+Platform=FreeBSD
+
+[*Konqueror/3.4*Linux*]
+Parent=Konqueror 3.0
+Version=3.4
+MajorVer=3
+MinorVer=4
+Platform=Linux
+
+[*Konqueror/3.4*OpenBSD*]
+Parent=Konqueror 3.0
+Version=3.4
+MajorVer=3
+MinorVer=4
+Platform=OpenBSD
+
+[*Konqueror/3.5*]
+Parent=Konqueror 3.0
+Version=3.5
+MajorVer=3
+MinorVer=5
+
+[*Konqueror/3.5*FreeBSD*]
+Parent=Konqueror 3.0
+Version=3.5
+MajorVer=3
+MinorVer=5
+Platform=FreeBSD
+
+[*Konqueror/3.5*Linux*]
+Parent=Konqueror 3.0
+Version=3.5
+MajorVer=3
+MinorVer=5
+Platform=Linux
+
+[*Konqueror/3.5*OpenBSD*]
+Parent=Konqueror 3.0
+Version=3.5
+MajorVer=3
+MinorVer=5
+Platform=OpenBSD
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0
+
+[Konqueror 4.0]
+Parent=DefaultProperties
+Browser=Konqueror
+Version=4.0
+MajorVer=4
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)]
+Parent=Konqueror 4.0
+Platform=Debian
+
+[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)]
+Parent=Konqueror 4.0
+Platform=Linux
+
+[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)]
+Parent=Konqueror 4.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)]
+Parent=Konqueror 4.0
+Platform=NetBSD
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1
+
+[Konqueror 4.1]
+Parent=DefaultProperties
+Browser=Konqueror
+Version=4.1
+MajorVer=4
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.1
+Platform=Linux
+
+[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.1
+Platform=Debian
+
+[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.1
+Platform=FreeBSD
+
+[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.1
+Platform=NetBSD
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2
+
+[Konqueror 4.2]
+Parent=DefaultProperties
+Browser=Konqueror
+Version=4.2
+MajorVer=4
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.2
+Platform=Linux
+
+[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.2
+Platform=Debian
+
+[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.2
+Platform=FreeBSD
+
+[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*]
+Parent=Konqueror 4.2
+Platform=NetBSD
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari
+
+[Safari]
+Parent=DefaultProperties
+Browser=Safari
+Platform=MacOSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*]
+Parent=Safari
+Version=1.1
+MajorVer=1
+MinorVer=1
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*]
+Parent=Safari
+Version=1.2
+MajorVer=1
+MinorVer=2
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*]
+Parent=Safari
+Version=1.3
+MajorVer=1
+MinorVer=3
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*]
+Parent=Safari
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*]
+Parent=Safari
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*]
+Parent=Safari
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*]
+Parent=Safari
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*]
+Parent=Safari
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*]
+Parent=Safari
+Beta=true
+
+[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*]
+Parent=Safari
+Version=1.0
+MajorVer=1
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0
+
+[Safari 3.0]
+Parent=DefaultProperties
+Browser=Safari
+Version=3.0
+MajorVer=3
+Platform=MacOSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*]
+Parent=Safari 3.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*]
+Parent=Safari 3.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*]
+Parent=Safari 3.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*]
+Parent=Safari 3.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*]
+Parent=Safari 3.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1
+
+[Safari 3.1]
+Parent=DefaultProperties
+Browser=Safari
+Version=3.1
+MajorVer=3
+MinorVer=1
+Platform=MacOSX
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*]
+Parent=Safari 3.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*]
+Parent=Safari 3.1
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*]
+Parent=Safari 3.1
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*]
+Parent=Safari 3.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*]
+Parent=Safari 3.1
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2
+
+[Safari 3.2]
+Parent=DefaultProperties
+Browser=Safari
+Version=3.2
+MajorVer=3
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*]
+Parent=Safari 3.2
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*]
+Parent=Safari 3.2
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*]
+Parent=Safari 3.2
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*]
+Parent=Safari 3.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*]
+Parent=Safari 3.2
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0
+
+[Safari 4.0]
+Parent=DefaultProperties
+Browser=Safari
+Version=4.0
+MajorVer=4
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*]
+Parent=Safari 4.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*]
+Parent=Safari 4.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0
+
+[Opera 10.0]
+Parent=DefaultProperties
+Browser=Opera
+Version=10.0
+MajorVer=10
+Alpha=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*]
+Parent=Opera 10.0
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*]
+Parent=Opera 10.0
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 10.0*]
+Parent=Opera 10.0
+Platform=Linux
+
+[Opera/10.0* (Linux*)*]
+Parent=Opera 10.0
+Platform=Linux
+
+[Opera/10.0* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 10.0
+Platform=MacOSX
+
+[Opera/10.0* (Windows 95*)*]
+Parent=Opera 10.0
+Platform=Win95
+Win32=true
+
+[Opera/10.0* (Windows 98*)*]
+Parent=Opera 10.0
+Platform=Win98
+Win32=true
+
+[Opera/10.0* (Windows CE*)*]
+Parent=Opera 10.0
+Platform=WinCE
+Win32=true
+
+[Opera/10.0* (Windows ME*)*]
+Parent=Opera 10.0
+Platform=WinME
+Win32=true
+
+[Opera/10.0* (Windows NT 4.0*)*]
+Parent=Opera 10.0
+Platform=WinNT
+Win32=true
+
+[Opera/10.0* (Windows NT 5.0*)*]
+Parent=Opera 10.0
+Platform=Win2000
+Win32=true
+
+[Opera/10.0* (Windows NT 5.1*)*]
+Parent=Opera 10.0
+Platform=WinXP
+Win32=true
+
+[Opera/10.0* (Windows NT 5.2*)*]
+Parent=Opera 10.0
+Platform=Win2003
+Win32=true
+
+[Opera/10.0* (Windows NT 6.0*)*]
+Parent=Opera 10.0
+Platform=WinVista
+Win32=true
+
+[Opera/10.0* (Windows NT 6.1*)*]
+Parent=Opera 10.0
+Platform=Win7
+
+[Opera/10.0* (Windows XP*)*]
+Parent=Opera 10.0
+Platform=WinXP
+Win32=true
+
+[Opera/10.0* (X11; FreeBSD*)*]
+Parent=Opera 10.0
+Platform=FreeBSD
+
+[Opera/10.0* (X11; Linux*)*]
+Parent=Opera 10.0
+Platform=Linux
+
+[Opera/10.0* (X11; SunOS*)*]
+Parent=Opera 10.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0
+
+[Opera 7.0]
+Parent=DefaultProperties
+Browser=Opera
+Version=7.0
+MajorVer=7
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/3.0 (Windows 95; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win95
+Win32=true
+
+[Mozilla/3.0 (Windows 98; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win98
+Win32=true
+
+[Mozilla/3.0 (Windows ME; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinME
+Win32=true
+
+[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/3.0 (Windows XP; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win95
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win98
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinME
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.78 (Windows 95; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win95
+Win32=true
+
+[Mozilla/4.78 (Windows 98; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win98
+Win32=true
+
+[Mozilla/4.78 (Windows ME; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinME
+Win32=true
+
+[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.78 (Windows XP; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows 95; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows 98; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows ME; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows XP; ?) Opera 7.0*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Opera/7.0* (Windows 2000; ?)*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Opera/7.0* (Windows 95; ?)*]
+Parent=Opera 7.0
+Platform=Win95
+Win32=true
+
+[Opera/7.0* (Windows 98; ?)*]
+Parent=Opera 7.0
+Platform=Win98
+Win32=true
+
+[Opera/7.0* (Windows ME; ?)*]
+Parent=Opera 7.0
+Platform=WinME
+Win32=true
+
+[Opera/7.0* (Windows NT 4.0; ?)*]
+Parent=Opera 7.0
+Platform=WinNT
+Win32=true
+
+[Opera/7.0* (Windows NT 5.0; ?)*]
+Parent=Opera 7.0
+Platform=Win2000
+Win32=true
+
+[Opera/7.0* (Windows NT 5.1; ?)*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+[Opera/7.0* (Windows XP; ?)*]
+Parent=Opera 7.0
+Platform=WinXP
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1
+
+[Opera 7.1]
+Parent=DefaultProperties
+Browser=Opera
+Version=7.1
+MajorVer=7
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows 2000; ?) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; ?) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; ?) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; ?) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*]
+Parent=Opera 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*]
+Parent=Opera 7.1
+Platform=WinXP
+Win32=true
+
+[Opera/7.1* (Linux*; ?)*]
+Parent=Opera 7.1
+Platform=Linux
+
+[Opera/7.1* (Windows 95; ?)*]
+Parent=Opera 7.1
+Platform=Win95
+Win32=true
+
+[Opera/7.1* (Windows 98; ?)*]
+Parent=Opera 7.1
+Platform=Win98
+Win32=true
+
+[Opera/7.1* (Windows ME; ?)*]
+Parent=Opera 7.1
+Platform=WinME
+Win32=true
+
+[Opera/7.1* (Windows NT 4.0; ?)*]
+Parent=Opera 7.1
+Platform=WinNT
+Win32=true
+
+[Opera/7.1* (Windows NT 5.0; ?)*]
+Parent=Opera 7.1
+Platform=Win2000
+Win32=true
+
+[Opera/7.1* (Windows NT 5.1; ?)*]
+Parent=Opera 7.1
+Platform=WinXP
+Win32=true
+
+[Opera/7.1* (Windows XP; ?)*]
+Parent=Opera 7.1
+Platform=WinXP
+Win32=true
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2
+
+[Opera 7.2]
+Parent=DefaultProperties
+Browser=Opera
+Version=7.2
+MajorVer=7
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows 2000; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*]
+Parent=Opera 7.2
+Platform=Win2003
+Win32=true
+
+[Opera/7.2* (Linux*; ?)*]
+Parent=Opera 7.2
+Platform=Linux
+
+[Opera/7.2* (Windows 95; ?)*]
+Parent=Opera 7.2
+Platform=Win95
+Win32=true
+
+[Opera/7.2* (Windows 98; ?)*]
+Parent=Opera 7.2
+Platform=Win98
+Win32=true
+
+[Opera/7.2* (Windows ME; ?)*]
+Parent=Opera 7.2
+Platform=WinME
+Win32=true
+
+[Opera/7.2* (Windows NT 4.0; ?)*]
+Parent=Opera 7.2
+Platform=WinNT
+Win32=true
+
+[Opera/7.2* (Windows NT 5.0; ?)*]
+Parent=Opera 7.2
+Platform=Win2000
+Win32=true
+
+[Opera/7.2* (Windows NT 5.1; ?)*]
+Parent=Opera 7.2
+Platform=WinXP
+Win32=true
+
+[Opera/7.2* (Windows NT 5.2; ?)*]
+Parent=Opera 7.2
+Platform=Win2003
+Win32=true
+
+[Opera/7.2* (Windows XP; ?)*]
+Parent=Opera 7.2
+Platform=WinXP
+Win32=true
+
+[Opera/7.2* (X11; FreeBSD*; ?)*]
+Parent=Opera 7.2
+Platform=FreeBSD
+
+[Opera/7.2* (X11; Linux*; ?)*]
+Parent=Opera 7.2
+Platform=Linux
+
+[Opera/7.2* (X11; SunOS*)*]
+Parent=Opera 7.2
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5
+
+[Opera 7.5]
+Parent=DefaultProperties
+Browser=Opera
+Version=7.5
+MajorVer=7
+MinorVer=5
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*]
+Parent=Opera 7.5
+Platform=MacPPC
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Linux
+
+[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=MacOSX
+
+[Mozilla/?.* (Windows 2000; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*]
+Parent=Opera 7.5
+Platform=Linux
+
+[Opera/7.5* (Linux*; ?)*]
+Parent=Opera 7.5
+Platform=Linux
+
+[Opera/7.5* (Macintosh; *Mac OS X; ?)*]
+Parent=Opera 7.5
+Platform=MacOSX
+
+[Opera/7.5* (Windows 95; ?)*]
+Parent=Opera 7.5
+Platform=Win95
+Win32=true
+
+[Opera/7.5* (Windows 98; ?)*]
+Parent=Opera 7.5
+Platform=Win98
+Win32=true
+
+[Opera/7.5* (Windows ME; ?)*]
+Parent=Opera 7.5
+Platform=WinME
+Win32=true
+
+[Opera/7.5* (Windows NT 4.0; ?)*]
+Parent=Opera 7.5
+Platform=WinNT
+Win32=true
+
+[Opera/7.5* (Windows NT 5.0; ?)*]
+Parent=Opera 7.5
+Platform=Win2000
+Win32=true
+
+[Opera/7.5* (Windows NT 5.1; ?)*]
+Parent=Opera 7.5
+Platform=WinXP
+Win32=true
+
+[Opera/7.5* (Windows NT 5.2; ?)*]
+Parent=Opera 7.5
+Platform=Win2003
+Win32=true
+
+[Opera/7.5* (Windows XP; ?)*]
+Parent=Opera 7.5
+Platform=WinXP
+Win32=true
+
+[Opera/7.5* (X11; FreeBSD*; ?)*]
+Parent=Opera 7.5
+Platform=FreeBSD
+
+[Opera/7.5* (X11; Linux*; ?)*]
+Parent=Opera 7.5
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6
+
+[Opera 7.6]
+Parent=DefaultProperties
+Browser=Opera
+Version=7.6
+MajorVer=7
+MinorVer=6
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*]
+Parent=Opera 7.6
+Platform=MacPPC
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Linux
+
+[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=MacOSX
+
+[Mozilla/?.* (Windows 2000; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*]
+Parent=Opera 7.6
+Platform=Linux
+
+[Opera/7.6* (Linux*)*]
+Parent=Opera 7.6
+Platform=Linux
+
+[Opera/7.6* (Macintosh; *Mac OS X; ?)*]
+Parent=Opera 7.6
+Platform=MacOSX
+
+[Opera/7.6* (Windows 95*)*]
+Parent=Opera 7.6
+Platform=Win95
+Win32=true
+
+[Opera/7.6* (Windows 98*)*]
+Parent=Opera 7.6
+Platform=Win98
+Win32=true
+
+[Opera/7.6* (Windows ME*)*]
+Parent=Opera 7.6
+Platform=WinME
+Win32=true
+
+[Opera/7.6* (Windows NT 4.0*)*]
+Parent=Opera 7.6
+Platform=WinNT
+Win32=true
+
+[Opera/7.6* (Windows NT 5.0*)*]
+Parent=Opera 7.6
+Platform=Win2000
+Win32=true
+
+[Opera/7.6* (Windows NT 5.1*)*]
+Parent=Opera 7.6
+Platform=WinXP
+Win32=true
+
+[Opera/7.6* (Windows NT 5.2*)*]
+Parent=Opera 7.6
+Platform=Win2003
+Win32=true
+
+[Opera/7.6* (Windows XP*)*]
+Parent=Opera 7.6
+Platform=WinXP
+Win32=true
+
+[Opera/7.6* (X11; FreeBSD*)*]
+Parent=Opera 7.6
+Platform=FreeBSD
+
+[Opera/7.6* (X11; Linux*)*]
+Parent=Opera 7.6
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0
+
+[Opera 8.0]
+Parent=DefaultProperties
+Browser=Opera
+Version=8.0
+MajorVer=8
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=MacOSX
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*]
+Parent=Opera 8.0
+Platform=MacPPC
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinCE
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=FreeBSD
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Linux
+
+[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*]
+Parent=Opera 8.0
+Platform=MacOSX
+
+[Mozilla/?.* (Windows 2000; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (X11; Linux*; *) Opera 8.0*]
+Parent=Opera 8.0
+Platform=Linux
+
+[Opera/8.0* (Linux*)*]
+Parent=Opera 8.0
+Platform=Linux
+
+[Opera/8.0* (Macintosh; *Mac OS X; *)*]
+Parent=Opera 8.0
+Platform=MacOSX
+
+[Opera/8.0* (Windows 95*)*]
+Parent=Opera 8.0
+Platform=Win95
+Win32=true
+
+[Opera/8.0* (Windows 98*)*]
+Parent=Opera 8.0
+Platform=Win98
+Win32=true
+
+[Opera/8.0* (Windows CE*)*]
+Parent=Opera 8.0
+Platform=WinCE
+Win32=true
+
+[Opera/8.0* (Windows ME*)*]
+Parent=Opera 8.0
+Platform=WinME
+Win32=true
+
+[Opera/8.0* (Windows NT 4.0*)*]
+Parent=Opera 8.0
+Platform=WinNT
+Win32=true
+
+[Opera/8.0* (Windows NT 5.0*)*]
+Parent=Opera 8.0
+Platform=Win2000
+Win32=true
+
+[Opera/8.0* (Windows NT 5.1*)*]
+Parent=Opera 8.0
+Platform=WinXP
+Win32=true
+
+[Opera/8.0* (Windows NT 5.2*)*]
+Parent=Opera 8.0
+Platform=Win2003
+Win32=true
+
+[Opera/8.0* (Windows XP*)*]
+Parent=Opera 8.0
+Platform=WinXP
+Win32=true
+
+[Opera/8.0* (X11; FreeBSD*)*]
+Parent=Opera 8.0
+Platform=FreeBSD
+
+[Opera/8.0* (X11; Linux*)*]
+Parent=Opera 8.0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1
+
+[Opera 8.1]
+Parent=DefaultProperties
+Browser=Opera
+Version=8.1
+MajorVer=8
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*]
+Parent=Opera 8.1
+Platform=MacPPC
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinCE
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=FreeBSD
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Linux
+
+[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*]
+Parent=Opera 8.1
+Platform=MacOSX
+
+[Mozilla/?.* (Windows 2000; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (X11; Linux*; *) Opera 8.1*]
+Parent=Opera 8.1
+Platform=Linux
+
+[Opera/8.1* (Linux*)*]
+Parent=Opera 8.1
+Platform=Linux
+
+[Opera/8.1* (Macintosh; *Mac OS X; *)*]
+Parent=Opera 8.1
+Platform=MacOSX
+
+[Opera/8.1* (Windows 95*)*]
+Parent=Opera 8.1
+Platform=Win95
+Win32=true
+
+[Opera/8.1* (Windows 98*)*]
+Parent=Opera 8.1
+Platform=Win98
+Win32=true
+
+[Opera/8.1* (Windows CE*)*]
+Parent=Opera 8.1
+Platform=WinCE
+Win32=true
+
+[Opera/8.1* (Windows ME*)*]
+Parent=Opera 8.1
+Platform=WinME
+Win32=true
+
+[Opera/8.1* (Windows NT 4.0*)*]
+Parent=Opera 8.1
+Platform=WinNT
+Win32=true
+
+[Opera/8.1* (Windows NT 5.0*)*]
+Parent=Opera 8.1
+Platform=Win2000
+Win32=true
+
+[Opera/8.1* (Windows NT 5.1*)*]
+Parent=Opera 8.1
+Platform=WinXP
+Win32=true
+
+[Opera/8.1* (Windows NT 5.2*)*]
+Parent=Opera 8.1
+Platform=Win2003
+Win32=true
+
+[Opera/8.1* (Windows XP*)*]
+Parent=Opera 8.1
+Platform=WinXP
+Win32=true
+
+[Opera/8.1* (X11; FreeBSD*)*]
+Parent=Opera 8.1
+Platform=FreeBSD
+
+[Opera/8.1* (X11; Linux*)*]
+Parent=Opera 8.1
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5
+
+[Opera 8.5]
+Parent=DefaultProperties
+Browser=Opera
+Version=8.5
+MajorVer=8
+MinorVer=5
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Linux
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=MacOSX
+
+[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*]
+Parent=Opera 8.5
+Platform=MacPPC
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinCE
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=FreeBSD
+
+[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Linux
+
+[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*]
+Parent=Opera 8.5
+Platform=MacOSX
+
+[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*]
+Parent=Opera 8.5
+Platform=MacOSX
+
+[Mozilla/?.* (Windows 2000; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows 95; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win95
+Win32=true
+
+[Mozilla/?.* (Windows 98; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win98
+Win32=true
+
+[Mozilla/?.* (Windows ME; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinME
+Win32=true
+
+[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/?.* (X11; Linux*; *) Opera 8.5*]
+Parent=Opera 8.5
+Platform=Linux
+
+[Opera/8.5* (Linux*)*]
+Parent=Opera 8.5
+Platform=Linux
+
+[Opera/8.5* (Macintosh; *Mac OS X; *)*]
+Parent=Opera 8.5
+Platform=MacOSX
+
+[Opera/8.5* (Windows 95*)*]
+Parent=Opera 8.5
+Platform=Win95
+Win32=true
+
+[Opera/8.5* (Windows 98*)*]
+Parent=Opera 8.5
+Platform=Win98
+Win32=true
+
+[Opera/8.5* (Windows CE*)*]
+Parent=Opera 8.5
+Platform=WinCE
+Win32=true
+
+[Opera/8.5* (Windows ME*)*]
+Parent=Opera 8.5
+Platform=WinME
+Win32=true
+
+[Opera/8.5* (Windows NT 4.0*)*]
+Parent=Opera 8.5
+Platform=WinNT
+Win32=true
+
+[Opera/8.5* (Windows NT 5.0*)*]
+Parent=Opera 8.5
+Platform=Win2000
+Win32=true
+
+[Opera/8.5* (Windows NT 5.1*)*]
+Parent=Opera 8.5
+Platform=WinXP
+Win32=true
+
+[Opera/8.5* (Windows NT 5.2*)*]
+Parent=Opera 8.5
+Platform=Win2003
+Win32=true
+
+[Opera/8.5* (Windows XP*)*]
+Parent=Opera 8.5
+Platform=WinXP
+Win32=true
+
+[Opera/8.5* (X11; FreeBSD*)*]
+Parent=Opera 8.5
+Platform=FreeBSD
+
+[Opera/8.5* (X11; Linux*)*]
+Parent=Opera 8.5
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0
+
+[Opera 9.0]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.0
+MajorVer=9
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*]
+Parent=Opera 9.0
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*]
+Parent=Opera 9.0
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (X11; Linux*) Opera 9.0*]
+Parent=Opera 9.0
+Platform=Linux
+
+[Opera/9.0* (Linux*)*]
+Parent=Opera 9.0
+Platform=Linux
+
+[Opera/9.0* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.0
+Platform=MacOSX
+
+[Opera/9.0* (Windows 95*)*]
+Parent=Opera 9.0
+Platform=Win95
+Win32=true
+
+[Opera/9.0* (Windows 98*)*]
+Parent=Opera 9.0
+Platform=Win98
+Win32=true
+
+[Opera/9.0* (Windows CE*)*]
+Parent=Opera 9.0
+Platform=WinCE
+Win32=true
+
+[Opera/9.0* (Windows ME*)*]
+Parent=Opera 9.0
+Platform=WinME
+Win32=true
+
+[Opera/9.0* (Windows NT 4.0*)*]
+Parent=Opera 9.0
+Platform=WinNT
+Win32=true
+
+[Opera/9.0* (Windows NT 5.0*)*]
+Parent=Opera 9.0
+Platform=Win2000
+Win32=true
+
+[Opera/9.0* (Windows NT 5.1*)*]
+Parent=Opera 9.0
+Platform=WinXP
+Win32=true
+
+[Opera/9.0* (Windows NT 5.2*)*]
+Parent=Opera 9.0
+Platform=Win2003
+Win32=true
+
+[Opera/9.0* (Windows NT 6.0*)*]
+Parent=Opera 9.0
+Platform=WinVista
+Win32=true
+
+[Opera/9.0* (Windows XP*)*]
+Parent=Opera 9.0
+Platform=WinXP
+Win32=true
+
+[Opera/9.0* (X11; FreeBSD*)*]
+Parent=Opera 9.0
+Platform=FreeBSD
+
+[Opera/9.0* (X11; Linux*)*]
+Parent=Opera 9.0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1
+
+[Opera 9.1]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.1
+MajorVer=9
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*]
+Parent=Opera 9.1
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (X11; Linux*) Opera 9.1*]
+Parent=Opera 9.1
+Platform=Linux
+
+[Opera/9.1* (Linux*)*]
+Parent=Opera 9.1
+Platform=Linux
+
+[Opera/9.1* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.1
+Platform=MacOSX
+
+[Opera/9.1* (Windows 95*)*]
+Parent=Opera 9.1
+Platform=Win95
+Win32=true
+
+[Opera/9.1* (Windows 98*)*]
+Parent=Opera 9.1
+Platform=Win98
+Win32=true
+
+[Opera/9.1* (Windows CE*)*]
+Parent=Opera 9.1
+Platform=WinCE
+Win32=true
+
+[Opera/9.1* (Windows ME*)*]
+Parent=Opera 9.1
+Platform=WinME
+Win32=true
+
+[Opera/9.1* (Windows NT 4.0*)*]
+Parent=Opera 9.1
+Platform=WinNT
+Win32=true
+
+[Opera/9.1* (Windows NT 5.0*)*]
+Parent=Opera 9.1
+Platform=Win2000
+Win32=true
+
+[Opera/9.1* (Windows NT 5.1*)*]
+Parent=Opera 9.1
+Platform=WinXP
+Win32=true
+
+[Opera/9.1* (Windows NT 5.2*)*]
+Parent=Opera 9.1
+Platform=Win2003
+Win32=true
+
+[Opera/9.1* (Windows NT 6.0*)*]
+Parent=Opera 9.1
+Platform=WinVista
+Win32=true
+
+[Opera/9.1* (Windows XP*)*]
+Parent=Opera 9.1
+Platform=WinXP
+Win32=true
+
+[Opera/9.1* (X11; FreeBSD*)*]
+Parent=Opera 9.1
+Platform=FreeBSD
+
+[Opera/9.1* (X11; Linux*)*]
+Parent=Opera 9.1
+Platform=Linux
+
+[Opera/9.1* (X11; SunOS*)*]
+Parent=Opera 9.1
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2
+
+[Opera 9.2]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.2
+MajorVer=9
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*]
+Parent=Opera 9.2
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*]
+Parent=Opera 9.2
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 9.2*]
+Parent=Opera 9.2
+Platform=Linux
+
+[Opera/9.2* (Linux*)*]
+Parent=Opera 9.2
+Platform=Linux
+
+[Opera/9.2* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.2
+Platform=MacOSX
+
+[Opera/9.2* (Windows 95*)*]
+Parent=Opera 9.2
+Platform=Win95
+Win32=true
+
+[Opera/9.2* (Windows 98*)*]
+Parent=Opera 9.2
+Platform=Win98
+Win32=true
+
+[Opera/9.2* (Windows CE*)*]
+Parent=Opera 9.2
+Platform=WinCE
+Win32=true
+
+[Opera/9.2* (Windows ME*)*]
+Parent=Opera 9.2
+Platform=WinME
+Win32=true
+
+[Opera/9.2* (Windows NT 4.0*)*]
+Parent=Opera 9.2
+Platform=WinNT
+Win32=true
+
+[Opera/9.2* (Windows NT 5.0*)*]
+Parent=Opera 9.2
+Platform=Win2000
+Win32=true
+
+[Opera/9.2* (Windows NT 5.1*)*]
+Parent=Opera 9.2
+Platform=WinXP
+Win32=true
+
+[Opera/9.2* (Windows NT 5.2*)*]
+Parent=Opera 9.2
+Platform=Win2003
+Win32=true
+
+[Opera/9.2* (Windows NT 6.0*)*]
+Parent=Opera 9.2
+Platform=WinVista
+Win32=true
+
+[Opera/9.2* (Windows NT 6.1*)*]
+Parent=Opera 9.2
+Platform=Win7
+
+[Opera/9.2* (Windows XP*)*]
+Parent=Opera 9.2
+Platform=WinXP
+Win32=true
+
+[Opera/9.2* (X11; FreeBSD*)*]
+Parent=Opera 9.2
+Platform=FreeBSD
+
+[Opera/9.2* (X11; Linux*)*]
+Parent=Opera 9.2
+Platform=Linux
+
+[Opera/9.2* (X11; SunOS*)*]
+Parent=Opera 9.2
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3
+
+[Opera 9.3]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.3
+MajorVer=9
+MinorVer=3
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*]
+Parent=Opera 9.3
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*]
+Parent=Opera 9.3
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 9.3*]
+Parent=Opera 9.3
+Platform=Linux
+
+[Opera/9.3* (Linux*)*]
+Parent=Opera 9.3
+Platform=Linux
+
+[Opera/9.3* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.3
+Platform=MacOSX
+
+[Opera/9.3* (Windows 95*)*]
+Parent=Opera 9.3
+Platform=Win95
+Win32=true
+
+[Opera/9.3* (Windows 98*)*]
+Parent=Opera 9.3
+Platform=Win98
+Win32=true
+
+[Opera/9.3* (Windows CE*)*]
+Parent=Opera 9.3
+Platform=WinCE
+Win32=true
+
+[Opera/9.3* (Windows ME*)*]
+Parent=Opera 9.3
+Platform=WinME
+Win32=true
+
+[Opera/9.3* (Windows NT 4.0*)*]
+Parent=Opera 9.3
+Platform=WinNT
+Win32=true
+
+[Opera/9.3* (Windows NT 5.0*)*]
+Parent=Opera 9.3
+Platform=Win2000
+Win32=true
+
+[Opera/9.3* (Windows NT 5.1*)*]
+Parent=Opera 9.3
+Platform=WinXP
+Win32=true
+
+[Opera/9.3* (Windows NT 5.2*)*]
+Parent=Opera 9.3
+Platform=Win2003
+Win32=true
+
+[Opera/9.3* (Windows NT 6.0*)*]
+Parent=Opera 9.3
+Platform=WinVista
+Win32=true
+
+[Opera/9.3* (Windows NT 6.1*)*]
+Parent=Opera 9.3
+Platform=Win7
+
+[Opera/9.3* (Windows XP*)*]
+Parent=Opera 9.3
+Platform=WinXP
+Win32=true
+
+[Opera/9.3* (X11; FreeBSD*)*]
+Parent=Opera 9.3
+Platform=FreeBSD
+
+[Opera/9.3* (X11; Linux*)*]
+Parent=Opera 9.3
+Platform=Linux
+
+[Opera/9.3* (X11; SunOS*)*]
+Parent=Opera 9.3
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4
+
+[Opera 9.4]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.4
+MajorVer=9
+MinorVer=4
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*]
+Parent=Opera 9.4
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*]
+Parent=Opera 9.4
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 9.4*]
+Parent=Opera 9.4
+Platform=Linux
+
+[Opera/9.4* (Linux*)*]
+Parent=Opera 9.4
+Platform=Linux
+
+[Opera/9.4* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.4
+Platform=MacOSX
+
+[Opera/9.4* (Windows 95*)*]
+Parent=Opera 9.4
+Platform=Win95
+Win32=true
+
+[Opera/9.4* (Windows 98*)*]
+Parent=Opera 9.4
+Platform=Win98
+Win32=true
+
+[Opera/9.4* (Windows CE*)*]
+Parent=Opera 9.4
+Platform=WinCE
+Win32=true
+
+[Opera/9.4* (Windows ME*)*]
+Parent=Opera 9.4
+Platform=WinME
+Win32=true
+
+[Opera/9.4* (Windows NT 4.0*)*]
+Parent=Opera 9.4
+Platform=WinNT
+Win32=true
+
+[Opera/9.4* (Windows NT 5.0*)*]
+Parent=Opera 9.4
+Platform=Win2000
+Win32=true
+
+[Opera/9.4* (Windows NT 5.1*)*]
+Parent=Opera 9.4
+Platform=WinXP
+Win32=true
+
+[Opera/9.4* (Windows NT 5.2*)*]
+Parent=Opera 9.4
+Platform=Win2003
+Win32=true
+
+[Opera/9.4* (Windows NT 6.0*)*]
+Parent=Opera 9.4
+Platform=WinVista
+Win32=true
+
+[Opera/9.4* (Windows NT 6.1*)*]
+Parent=Opera 9.4
+Platform=Win7
+
+[Opera/9.4* (Windows XP*)*]
+Parent=Opera 9.4
+Platform=WinXP
+Win32=true
+
+[Opera/9.4* (X11; FreeBSD*)*]
+Parent=Opera 9.4
+Platform=FreeBSD
+
+[Opera/9.4* (X11; Linux*)*]
+Parent=Opera 9.4
+Platform=Linux
+
+[Opera/9.4* (X11; SunOS*)*]
+Parent=Opera 9.4
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5
+
+[Opera 9.5]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.5
+MajorVer=9
+MinorVer=5
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*]
+Parent=Opera 9.5
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*]
+Parent=Opera 9.5
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 9.5*]
+Parent=Opera 9.5
+Platform=Linux
+
+[Opera/9.5* (Linux*)*]
+Parent=Opera 9.5
+Platform=Linux
+
+[Opera/9.5* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.5
+Platform=MacOSX
+
+[Opera/9.5* (Windows 95*)*]
+Parent=Opera 9.5
+Platform=Win95
+Win32=true
+
+[Opera/9.5* (Windows 98*)*]
+Parent=Opera 9.5
+Platform=Win98
+Win32=true
+
+[Opera/9.5* (Windows CE*)*]
+Parent=Opera 9.5
+Platform=WinCE
+Win32=true
+
+[Opera/9.5* (Windows ME*)*]
+Parent=Opera 9.5
+Platform=WinME
+Win32=true
+
+[Opera/9.5* (Windows NT 4.0*)*]
+Parent=Opera 9.5
+Platform=WinNT
+Win32=true
+
+[Opera/9.5* (Windows NT 5.0*)*]
+Parent=Opera 9.5
+Platform=Win2000
+Win32=true
+
+[Opera/9.5* (Windows NT 5.1*)*]
+Parent=Opera 9.5
+Platform=WinXP
+Win32=true
+
+[Opera/9.5* (Windows NT 5.2*)*]
+Parent=Opera 9.5
+Platform=Win2003
+Win32=true
+
+[Opera/9.5* (Windows NT 6.0*)*]
+Parent=Opera 9.5
+Platform=WinVista
+Win32=true
+
+[Opera/9.5* (Windows NT 6.1*)*]
+Parent=Opera 9.5
+Platform=Win7
+
+[Opera/9.5* (Windows XP*)*]
+Parent=Opera 9.5
+Platform=WinXP
+Win32=true
+
+[Opera/9.5* (X11; FreeBSD*)*]
+Parent=Opera 9.5
+Platform=FreeBSD
+
+[Opera/9.5* (X11; Linux*)*]
+Parent=Opera 9.5
+Platform=Linux
+
+[Opera/9.5* (X11; SunOS*)*]
+Parent=Opera 9.5
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6
+
+[Opera 9.6]
+Parent=DefaultProperties
+Browser=Opera
+Version=9.6
+MajorVer=9
+MinorVer=6
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=MacOSX
+
+[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*]
+Parent=Opera 9.6
+Platform=MacPPC
+
+[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win95
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win98
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinCE
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinME
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinVista
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win7
+
+[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=FreeBSD
+
+[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Linux
+
+[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=SunOS
+
+[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*]
+Parent=Opera 9.6
+Platform=MacOSX
+
+[Mozilla/* (Windows 2000;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows 95;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win95
+Win32=true
+
+[Mozilla/* (Windows 98;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win98
+Win32=true
+
+[Mozilla/* (Windows ME;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinME
+Win32=true
+
+[Mozilla/* (Windows NT 4.0;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinNT
+Win32=true
+
+[Mozilla/* (Windows NT 5.0;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/* (Windows NT 5.1;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/* (Windows NT 5.2;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win2003
+Win32=true
+
+[Mozilla/* (Windows NT 6.0;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=WinVista
+
+[Mozilla/* (Windows NT 6.1;*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Win7
+
+[Mozilla/* (X11; Linux*) Opera 9.6*]
+Parent=Opera 9.6
+Platform=Linux
+
+[Opera/9.6* (Linux*)*]
+Parent=Opera 9.6
+Platform=Linux
+
+[Opera/9.6* (Macintosh; *Mac OS X;*)*]
+Parent=Opera 9.6
+Platform=MacOSX
+
+[Opera/9.6* (Windows 95*)*]
+Parent=Opera 9.6
+Platform=Win95
+Win32=true
+
+[Opera/9.6* (Windows 98*)*]
+Parent=Opera 9.6
+Platform=Win98
+Win32=true
+
+[Opera/9.6* (Windows CE*)*]
+Parent=Opera 9.6
+Platform=WinCE
+Win32=true
+
+[Opera/9.6* (Windows ME*)*]
+Parent=Opera 9.6
+Platform=WinME
+Win32=true
+
+[Opera/9.6* (Windows NT 4.0*)*]
+Parent=Opera 9.6
+Platform=WinNT
+Win32=true
+
+[Opera/9.6* (Windows NT 5.0*)*]
+Parent=Opera 9.6
+Platform=Win2000
+Win32=true
+
+[Opera/9.6* (Windows NT 5.1*)*]
+Parent=Opera 9.6
+Platform=WinXP
+Win32=true
+
+[Opera/9.6* (Windows NT 5.2*)*]
+Parent=Opera 9.6
+Platform=Win2003
+Win32=true
+
+[Opera/9.6* (Windows NT 6.0*)*]
+Parent=Opera 9.6
+Platform=WinVista
+Win32=true
+
+[Opera/9.6* (Windows NT 6.1*)*]
+Parent=Opera 9.6
+Platform=Win7
+
+[Opera/9.6* (Windows XP*)*]
+Parent=Opera 9.6
+Platform=WinXP
+Win32=true
+
+[Opera/9.6* (X11; FreeBSD*)*]
+Parent=Opera 9.6
+Platform=FreeBSD
+
+[Opera/9.6* (X11; Linux*)*]
+Parent=Opera 9.6
+Platform=Linux
+
+[Opera/9.6* (X11; SunOS*)*]
+Parent=Opera 9.6
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0
+
+[Netscape 4.0]
+Parent=DefaultProperties
+Browser=Netscape
+Version=4.0
+MajorVer=4
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.0*(Macintosh*]
+Parent=Netscape 4.0
+Version=4.03
+MinorVer=03
+Platform=MacPPC
+
+[Mozilla/4.0*(Win95;*]
+Parent=Netscape 4.0
+Platform=Win95
+
+[Mozilla/4.0*(Win98;*]
+Parent=Netscape 4.0
+Version=4.03
+MinorVer=03
+Platform=Win98
+
+[Mozilla/4.0*(WinNT*]
+Parent=Netscape 4.0
+Version=4.03
+MinorVer=03
+Platform=WinNT
+
+[Mozilla/4.0*(X11;*)]
+Parent=Netscape 4.0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5
+
+[Netscape 4.5]
+Parent=DefaultProperties
+Browser=Netscape
+Version=4.5
+MajorVer=4
+MinorVer=5
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.5*(Macintosh; ?; PPC)]
+Parent=Netscape 4.5
+Platform=MacPPC
+
+[Mozilla/4.5*(Win2000; ?)]
+Parent=Netscape 4.5
+Platform=Win2000
+
+[Mozilla/4.5*(Win95; ?)]
+Parent=Netscape 4.5
+Platform=Win95
+
+[Mozilla/4.5*(Win98; ?)]
+Parent=Netscape 4.5
+Platform=Win98
+
+[Mozilla/4.5*(WinME; ?)]
+Parent=Netscape 4.5
+Platform=WinME
+
+[Mozilla/4.5*(WinNT; ?)]
+Parent=Netscape 4.5
+Platform=WinNT
+
+[Mozilla/4.5*(WinXP; ?)]
+Parent=Netscape 4.5
+Platform=WinXP
+
+[Mozilla/4.5*(X11*)]
+Parent=Netscape 4.5
+Platform=Linux
+
+[Mozilla/4.51*(Macintosh; ?; PPC)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+
+[Mozilla/4.51*(Win2000; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=Win2000
+
+[Mozilla/4.51*(Win95; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=Win95
+
+[Mozilla/4.51*(Win98; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=Win98
+
+[Mozilla/4.51*(WinME; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=WinME
+
+[Mozilla/4.51*(WinNT; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=WinNT
+
+[Mozilla/4.51*(WinXP; ?)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=WinXP
+
+[Mozilla/4.51*(X11*)]
+Parent=Netscape 4.5
+Version=4.51
+MinorVer=51
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6
+
+[Netscape 4.6]
+Parent=DefaultProperties
+Browser=Netscape
+Version=4.6
+MajorVer=4
+MinorVer=6
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.6 * (OS/2; ?)]
+Parent=Netscape 4.6
+Platform=OS/2
+
+[Mozilla/4.6*(Macintosh; ?; PPC)]
+Parent=Netscape 4.6
+Platform=MacPPC
+
+[Mozilla/4.6*(Win95; ?)]
+Parent=Netscape 4.6
+Platform=Win95
+
+[Mozilla/4.6*(Win98; ?)]
+Parent=Netscape 4.6
+Platform=Win98
+
+[Mozilla/4.6*(WinNT; ?)]
+Parent=Netscape 4.6
+Platform=WinNT
+
+[Mozilla/4.61*(Macintosh; ?; PPC)]
+Parent=Netscape 4.6
+Version=4.61
+MajorVer=4
+MinorVer=61
+Platform=MacPPC
+
+[Mozilla/4.61*(OS/2; ?)]
+Parent=Netscape 4.6
+Version=4.61
+MajorVer=4
+MinorVer=61
+Platform=OS/2
+
+[Mozilla/4.61*(Win95; ?)]
+Parent=Netscape 4.6
+Version=4.61
+MajorVer=4
+MinorVer=61
+Platform=Win95
+
+[Mozilla/4.61*(Win98; ?)]
+Parent=Netscape 4.6
+Version=4.61
+Platform=Win98
+
+[Mozilla/4.61*(WinNT; ?)]
+Parent=Netscape 4.6
+Version=4.61
+MajorVer=4
+MinorVer=61
+Platform=WinNT
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7
+
+[Netscape 4.7]
+Parent=DefaultProperties
+Browser=Netscape
+Version=4.7
+MajorVer=4
+MinorVer=7
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.7 * (Win2000; ?)]
+Parent=Netscape 4.7
+Platform=Win2000
+
+[Mozilla/4.7*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=MacPPC
+
+[Mozilla/4.7*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=Win95
+
+[Mozilla/4.7*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=Win98
+
+[Mozilla/4.7*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.7*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.7*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=7
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.7*(WinNT; ?)*]
+Parent=Netscape 4.7
+Platform=WinNT
+
+[Mozilla/4.7*(X11*)*]
+Parent=Netscape 4.7
+Platform=Linux
+
+[Mozilla/4.7*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+Platform=SunOS
+
+[Mozilla/4.71*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=MacPPC
+
+[Mozilla/4.71*(Win95; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=Win95
+
+[Mozilla/4.71*(Win98; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=Win98
+
+[Mozilla/4.71*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.71*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.71*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.71*(WinNT; ?)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=WinNT
+
+[Mozilla/4.71*(X11*)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=Linux
+
+[Mozilla/4.71*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+Version=4.71
+MinorVer=71
+Platform=SunOS
+
+[Mozilla/4.72*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=MacPPC
+
+[Mozilla/4.72*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=Win95
+
+[Mozilla/4.72*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=Win98
+
+[Mozilla/4.72*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.72*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.72*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.72*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=WinNT
+
+[Mozilla/4.72*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=Linux
+
+[Mozilla/4.72*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=72
+Platform=SunOS
+
+[Mozilla/4.73*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=MacPPC
+
+[Mozilla/4.73*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=Win95
+
+[Mozilla/4.73*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=Win98
+
+[Mozilla/4.73*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.73*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.73*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.73*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=WinNT
+
+[Mozilla/4.73*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=Linux
+
+[Mozilla/4.73*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=73
+Platform=SunOS
+
+[Mozilla/4.74*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=MacPPC
+
+[Mozilla/4.74*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=Win95
+
+[Mozilla/4.74*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=Win98
+
+[Mozilla/4.74*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.74*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.74*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.74*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=WinNT
+
+[Mozilla/4.74*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=Linux
+
+[Mozilla/4.74*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=74
+Platform=SunOS
+
+[Mozilla/4.75*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=MacPPC
+
+[Mozilla/4.75*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=Win95
+
+[Mozilla/4.75*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=Win98
+
+[Mozilla/4.75*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.75*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.75*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.75*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=WinNT
+
+[Mozilla/4.75*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=Linux
+
+[Mozilla/4.75*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=75
+Platform=SunOS
+
+[Mozilla/4.76*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=MacPPC
+
+[Mozilla/4.76*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=Win95
+
+[Mozilla/4.76*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=Win98
+
+[Mozilla/4.76*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.76*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.76*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.76*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=WinNT
+
+[Mozilla/4.76*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=Linux
+
+[Mozilla/4.76*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=76
+Platform=SunOS
+
+[Mozilla/4.77*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=MacPPC
+
+[Mozilla/4.77*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=Win95
+
+[Mozilla/4.77*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=Win98
+
+[Mozilla/4.77*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.77*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.77*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.77*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=WinNT
+
+[Mozilla/4.77*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=Linux
+
+[Mozilla/4.77*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=77
+Platform=SunOS
+
+[Mozilla/4.78*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=MacPPC
+
+[Mozilla/4.78*(Win95; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=Win95
+
+[Mozilla/4.78*(Win98; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=Win98
+
+[Mozilla/4.78*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.78*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.78*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.78*(WinNT; ?)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=WinNT
+
+[Mozilla/4.78*(X11*)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=Linux
+
+[Mozilla/4.78*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+MinorVer=78
+Platform=SunOS
+
+[Mozilla/4.79*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=MacPPC
+
+[Mozilla/4.79*(Win95; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=Win95
+
+[Mozilla/4.79*(Win98; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=Win98
+
+[Mozilla/4.79*(Windows NT 4.0; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.79*(Windows NT 5.0; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.79*(Windows NT 5.1; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.79*(WinNT; ?)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=WinNT
+
+[Mozilla/4.79*(X11*)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=Linux
+
+[Mozilla/4.79*(X11; ?; SunOS*)*]
+Parent=Netscape 4.7
+Version=4.79
+MinorVer=79
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8
+
+[Netscape 4.8]
+Parent=DefaultProperties
+Browser=Netscape
+Version=4.8
+MajorVer=4
+MinorVer=8
+Frames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/4.8*(Macintosh; ?; MacPPC)*]
+Parent=Netscape 4.8
+Platform=MacPPC
+
+[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*]
+Parent=Netscape 4.8
+Platform=MacOSX
+
+[Mozilla/4.8*(Macintosh; ?; PPC)*]
+Parent=Netscape 4.8
+Platform=MacPPC
+
+[Mozilla/4.8*(Win95; *)*]
+Parent=Netscape 4.8
+
+[Mozilla/4.8*(Win98; *)*]
+Parent=Netscape 4.8
+Platform=Win98
+
+[Mozilla/4.8*(Windows NT 4.0; *)*]
+Parent=Netscape 4.8
+Platform=WinNT
+Win32=true
+
+[Mozilla/4.8*(Windows NT 5.0; *)*]
+Parent=Netscape 4.8
+Platform=Win2000
+Win32=true
+
+[Mozilla/4.8*(Windows NT 5.1; *)*]
+Parent=Netscape 4.8
+Platform=WinXP
+Win32=true
+
+[Mozilla/4.8*(WinNT; *)*]
+Parent=Netscape 4.8
+Platform=WinNT
+
+[Mozilla/4.8*(X11; *)*]
+Parent=Netscape 4.8
+Platform=Linux
+
+[Mozilla/4.8*(X11; *SunOS*)*]
+Parent=Netscape 4.8
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0
+
+[Netscape 6.0]
+Parent=DefaultProperties
+Browser=Netscape
+Version=6.0
+MajorVer=6
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*]
+Parent=Netscape 6.0
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1
+
+[Netscape 6.1]
+Parent=DefaultProperties
+Browser=Netscape
+Version=6.1
+MajorVer=6
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*]
+Parent=Netscape 6.1
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2
+
+[Netscape 6.2]
+Parent=DefaultProperties
+Browser=Netscape
+Version=6.2
+MajorVer=6
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*]
+Parent=Netscape 6.2
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0
+
+[Netscape 7.0]
+Parent=DefaultProperties
+Browser=Netscape
+Version=7.0
+MajorVer=7
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*]
+Parent=Netscape 7.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1
+
+[Netscape 7.1]
+Parent=DefaultProperties
+Browser=Netscape
+Version=7.1
+MajorVer=7
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1]
+Parent=Netscape 7.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*]
+Parent=Netscape 7.1
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2
+
+[Netscape 7.2]
+Parent=DefaultProperties
+Browser=Netscape
+Version=7.2
+MajorVer=7
+MinorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*]
+Parent=Netscape 7.2
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0
+
+[Netscape 8.0]
+Parent=DefaultProperties
+Browser=Netscape
+Version=8.0
+MajorVer=8
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*]
+Parent=Netscape 8.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1
+
+[Netscape 8.1]
+Parent=DefaultProperties
+Browser=Netscape
+Version=8.1
+MajorVer=8
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=MacPPC
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win7
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*]
+Parent=Netscape 8.1
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0
+
+[SeaMonkey 1.0]
+Parent=DefaultProperties
+Browser=SeaMonkey
+Version=1.0
+MajorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=WinME
+
+[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=Win98
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*]
+Parent=SeaMonkey 1.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1
+
+[SeaMonkey 1.1]
+Parent=DefaultProperties
+Browser=SeaMonkey
+Version=1.1
+MajorVer=1
+MinorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=WinME
+
+[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=Win98
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*]
+Parent=SeaMonkey 1.1
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0
+
+[SeaMonkey 2.0]
+Parent=DefaultProperties
+Browser=SeaMonkey
+Version=2.0
+MajorVer=2
+Alpha=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=WinME
+
+[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=Win98
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*]
+Parent=SeaMonkey 2.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0
+
+[Flock 1.0]
+Parent=DefaultProperties
+Browser=Flock
+Version=1.0
+MajorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=WinME
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*]
+Parent=Flock 1.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0
+
+[Flock 2.0]
+Parent=DefaultProperties
+Browser=Flock
+Version=2.0
+MajorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=WinME
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=Win2003
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*]
+Parent=Flock 2.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0
+
+[Sleipnir]
+Parent=DefaultProperties
+Browser=Sleipnir
+Version=2.0
+MajorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*]
+Parent=Sleipnir
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*]
+Parent=Sleipnir
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*]
+Parent=Sleipnir
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*]
+Parent=Sleipnir
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*]
+Parent=Sleipnir
+Platform=Win7
+
+[Sleipnir*]
+Parent=Sleipnir
+
+[Sleipnir/2.*]
+Parent=Sleipnir
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0
+
+[Fennec 1.0]
+Parent=DefaultProperties
+Browser=Firefox Mobile
+Version=1.0
+MajorVer=1
+Alpha=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*]
+Parent=Fennec 1.0
+Platform=WinXP
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*]
+Parent=Fennec 1.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*]
+Parent=Fennec 1.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird
+
+[Firebird]
+Parent=DefaultProperties
+Browser=Firebird
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+Win32=true
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*]
+Parent=Firebird
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*]
+Parent=Firebird
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox
+
+[Firefox]
+Parent=DefaultProperties
+Browser=Firefox
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=MacOSX
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+
+[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+
+[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Win32=true
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+
+[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+
+[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*]
+Parent=Firefox
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0
+
+[Firefox 1.0]
+Parent=DefaultProperties
+Browser=Firefox
+Version=1.0
+MajorVer=1
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=MacPPC
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=MacOSX
+
+[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=OS/2
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*]
+Parent=Firefox 1.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4
+
+[Firefox 1.4]
+Parent=DefaultProperties
+Browser=Firefox
+Version=1.4
+MajorVer=1
+MinorVer=4
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Linux
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=MacOSX
+
+[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=OS/2
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*]
+Parent=Firefox 1.4
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5
+
+[Firefox 1.5]
+Parent=DefaultProperties
+Browser=Firefox
+Version=1.5
+MajorVer=1
+MinorVer=5
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Linux
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=MacOSX
+
+[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=OS/2
+
+[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*]
+Parent=Firefox 1.5
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0
+
+[Firefox 2.0]
+Parent=DefaultProperties
+Browser=Firefox
+Version=2.0
+MajorVer=2
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Linux
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=MacOSX
+
+[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=OS/2
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*]
+Parent=Firefox 2.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0
+
+[Firefox 3.0]
+Parent=DefaultProperties
+Browser=Firefox
+Version=3.0
+MajorVer=3
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Win2000
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Win7
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=WinXP
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Win2003
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Win7
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*]
+Parent=Firefox 3.0
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1
+
+[Firefox 3.1]
+Parent=DefaultProperties
+Browser=Firefox
+Version=3.1
+MajorVer=3
+MinorVer=1
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=Win7
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=WinXP
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=Win2003
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=Win7
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*]
+Parent=Firefox 3.1
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5
+
+[Firefox 3.5]
+Parent=DefaultProperties
+Browser=Firefox
+Version=3.5
+MajorVer=3
+MinorVer=5
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=3
+supportsCSS=true
+
+[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=WinVista
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=Win7
+
+[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=WinXP
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=Win2003
+Win32=false
+Win64=true
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=WinVista
+
+[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=Win7
+
+[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=Linux
+
+[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=HP-UX
+
+[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=IRIX64
+
+[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*]
+Parent=Firefox 3.5
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix
+
+[Phoenix]
+Parent=DefaultProperties
+Browser=Phoenix
+Version=0.5
+MinorVer=5
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*]
+Parent=Phoenix
+Platform=Linux
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel
+
+[Iceweasel]
+Parent=DefaultProperties
+Browser=Iceweasel
+Platform=Linux
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)]
+Parent=Iceweasel
+Version=2.0
+MajorVer=2
+MinorVer=0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0
+
+[Mozilla 1.0]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.0
+MajorVer=1
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.0.*) Gecko/*]
+Parent=Mozilla 1.0
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1
+
+[Mozilla 1.1]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.1
+MajorVer=1
+MinorVer=1
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.1.*) Gecko/*]
+Parent=Mozilla 1.1
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2
+
+[Mozilla 1.2]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.2
+MajorVer=1
+MinorVer=2
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.2.*) Gecko/*]
+Parent=Mozilla 1.2
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3
+
+[Mozilla 1.3]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.3
+MajorVer=1
+MinorVer=3
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.3.*) Gecko/*]
+Parent=Mozilla 1.3
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4
+
+[Mozilla 1.4]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.4
+MajorVer=1
+MinorVer=4
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Win31
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*]
+Parent=Mozilla 1.4
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5
+
+[Mozilla 1.5]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.5
+MajorVer=1
+MinorVer=5
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Win31
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*]
+Parent=Mozilla 1.5
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6
+
+[Mozilla 1.6]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.6
+MajorVer=1
+MinorVer=6
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Win31
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*]
+Parent=Mozilla 1.6
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7
+
+[Mozilla 1.7]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.7
+MajorVer=1
+MinorVer=7
+Beta=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/5.0 (*rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win31
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*]
+Parent=Mozilla 1.7
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8
+
+[Mozilla 1.8]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.8
+MajorVer=1
+MinorVer=8
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.5
+w3cdomversion=1.0
+
+[Mozilla/5.0 (*rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*]
+Parent=Mozilla 1.8
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9
+
+[Mozilla 1.9]
+Parent=DefaultProperties
+Browser=Mozilla
+Version=1.9
+MajorVer=1
+MinorVer=9
+Alpha=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+JavaApplets=true
+JavaScript=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/5.0 (*rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+
+[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=MacOSX
+
+[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=WinME
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Win31
+Win16=true
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Win95
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Win98
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Win2000
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=WinXP
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Win2003
+Win32=true
+
+[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=WinNT
+Win32=true
+
+[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=FreeBSD
+
+[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=Linux
+
+[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=OpenBSD
+
+[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*]
+Parent=Mozilla 1.9
+Platform=SunOS
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac
+
+[IE Mac]
+Parent=DefaultProperties
+Browser=IE
+Platform=MacPPC
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+JavaApplets=true
+JavaScript=true
+CssVersion=1
+supportsCSS=true
+
+[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*]
+Parent=IE Mac
+Version=4.0
+MajorVer=4
+MinorVer=0
+
+[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*]
+Parent=IE Mac
+Version=4.5
+MajorVer=4
+MinorVer=5
+
+[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*]
+Parent=IE Mac
+Version=5.0
+MajorVer=5
+MinorVer=0
+
+[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*]
+Parent=IE Mac
+Version=5.1
+MajorVer=5
+MinorVer=1
+
+[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*]
+Parent=IE Mac
+Version=5.2
+MajorVer=5
+MinorVer=2
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5
+
+[AOL 9.0/IE 5.5]
+Parent=DefaultProperties
+Browser=AOL
+Version=5.5
+MajorVer=5
+MinorVer=5
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+AOL=true
+aolVersion=9.0
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*]
+Parent=AOL 9.0/IE 5.5
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 5.5
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0
+
+[AOL 9.0/IE 6.0]
+Parent=DefaultProperties
+Browser=AOL
+Version=6.0
+MajorVer=6
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+AOL=true
+aolVersion=9.0
+ecmascriptversion=1.3
+w3cdomversion=1.0
+
+[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*]
+Parent=AOL 9.0/IE 6.0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 6.0
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0
+
+[AOL 9.0/IE 7.0]
+Parent=DefaultProperties
+Browser=AOL
+Version=7.0
+MajorVer=7
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+AOL=true
+aolVersion=9.0
+
+[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*]
+Parent=AOL 9.0/IE 7.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*]
+Parent=AOL 9.0/IE 7.0
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser
+
+[Avant Browser]
+Parent=DefaultProperties
+Browser=Avant Browser
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+
+[Advanced Browser (http://www.avantbrowser.com)]
+Parent=Avant Browser
+
+[Avant Browser*]
+Parent=Avant Browser
+
+[Avant Browser/*]
+Parent=Avant Browser
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01
+
+[IE 4.01]
+Parent=DefaultProperties
+Browser=IE
+Version=4.01
+MajorVer=4
+MinorVer=01
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (?compatible; *MSIE 4.01*)*]
+Parent=IE 4.01
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*]
+Parent=IE 4.01
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*]
+Parent=IE 4.01
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*]
+Parent=IE 4.01
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*]
+Parent=IE 4.01
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*]
+Parent=IE 4.01
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*]
+Parent=IE 4.01
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)]
+Parent=IE 4.01
+Platform=WinNT
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0
+
+[IE 5.0]
+Parent=DefaultProperties
+Browser=IE
+Version=5.0
+MajorVer=5
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (?compatible; *MSIE 5.0*)*]
+Parent=IE 5.0
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*]
+Parent=IE 5.0
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*]
+Parent=IE 5.0
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*]
+Parent=IE 5.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*]
+Parent=IE 5.0
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*]
+Parent=IE 5.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*]
+Parent=IE 5.0
+Platform=Win2000
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01
+
+[IE 5.01]
+Parent=DefaultProperties
+Browser=IE
+Version=5.01
+MajorVer=5
+MinorVer=01
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+
+[Mozilla/?.* (?compatible; *MSIE 5.01*)*]
+Parent=IE 5.01
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*]
+Parent=IE 5.01
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*]
+Parent=IE 5.01
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*]
+Parent=IE 5.01
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*]
+Parent=IE 5.01
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*]
+Parent=IE 5.01
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*]
+Parent=IE 5.01
+Platform=Win2000
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5
+
+[IE 5.5]
+Parent=DefaultProperties
+Browser=IE
+Version=5.5
+MajorVer=5
+MinorVer=5
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.2
+w3cdomversion=1.0
+
+[Mozilla/?.* (?compatible; *MSIE 5.5*)*]
+Parent=IE 5.5
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*]
+Parent=IE 5.5
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*]
+Parent=IE 5.5
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*]
+Parent=IE 5.5
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*]
+Parent=IE 5.5
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*]
+Parent=IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*]
+Parent=IE 5.5
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*]
+Parent=IE 5.5
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*]
+Parent=IE 5.5
+Platform=Win2003
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0
+
+[IE 6.0]
+Parent=DefaultProperties
+Browser=IE
+Version=6.0
+MajorVer=6
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.2
+w3cdomversion=1.0
+msdomversion=6.0
+
+[Mozilla/?.* (?compatible; *MSIE 6.0*)*]
+Parent=IE 6.0
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*]
+Parent=IE 6.0
+Platform=Win95
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*]
+Parent=IE 6.0
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*]
+Parent=IE 6.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*]
+Parent=IE 6.0
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*]
+Parent=IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*]
+Parent=IE 6.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*]
+Parent=IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*]
+Parent=IE 6.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*]
+Parent=IE 6.0
+Platform=WinXP
+Win32=false
+Win64=true
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*]
+Parent=IE 6.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*]
+Parent=IE 6.0
+Platform=WinVista
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0
+
+[IE 7.0]
+Parent=DefaultProperties
+Browser=IE
+Version=7.0
+MajorVer=7
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=2
+supportsCSS=true
+ecmascriptversion=1.2
+msdomversion=7.0
+w3cdomversion=1.0
+
+[Mozilla/?.* (?compatible; *MSIE 7.0*)*]
+Parent=IE 7.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*]
+Parent=IE 7.0
+Platform=Win98
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*]
+Parent=IE 7.0
+Platform=WinME
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*]
+Parent=IE 7.0
+Platform=WinNT
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*]
+Parent=IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*]
+Parent=IE 7.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*]
+Parent=IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*]
+Parent=IE 7.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*]
+Parent=IE 7.0
+Platform=WinXP
+Win32=false
+Win64=true
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*]
+Parent=IE 7.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*]
+Parent=IE 7.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*]
+Parent=IE 7.0
+Platform=Win7
+
+[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*]
+Parent=IE 7.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0
+
+[IE 8.0]
+Parent=DefaultProperties
+Browser=IE
+Version=8.0
+MajorVer=8
+Win32=true
+Frames=true
+IFrames=true
+Tables=true
+Cookies=true
+BackgroundSounds=true
+CDF=true
+VBScript=true
+JavaApplets=true
+JavaScript=true
+ActiveXControls=true
+CssVersion=3
+supportsCSS=true
+ecmascriptversion=1.2
+msdomversion=8.0
+w3cdomversion=1.0
+
+[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*]
+Parent=IE 8.0
+Platform=Win32
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*]
+Parent=IE 8.0
+Platform=Win2000
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*]
+Parent=IE 8.0
+Platform=WinXP
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*]
+Parent=IE 8.0
+Platform=Win2003
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*]
+Parent=IE 8.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=WinVista
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=WinVista
+Win32=false
+Win64=true
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=WinVista
+Win64=false
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*]
+Parent=IE 8.0
+Platform=Win7
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=Win7
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=Win7
+Win32=false
+Win64=true
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=Win7
+Win64=false
+
+[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*]
+Parent=IE 8.0
+Platform=Win7
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser
+
+[*]
+Browser=Default Browser
+Version=0
+MajorVer=0
+MinorVer=0
+Platform=unknown
+Alpha=false
+Beta=false
+Win16=false
+Win32=false
+Win64=false
+Frames=true
+IFrames=false
+Tables=true
+Cookies=false
+BackgroundSounds=false
+CDF=false
+VBScript=false
+JavaApplets=false
+JavaScript=false
+ActiveXControls=false
+Stripper=false
+isBanned=false
+isMobileDevice=false
+isSyndicationReader=false
+Crawler=false
+CssVersion=0
+supportsCSS=false
+AOL=false
+aolVersion=0
+AuthenticodeUpdate=0
+CSS=0
+WAP=false
+netCLR=false
+ClrVersion=0
+ECMAScriptVersion=0.0
+W3CDOMVersion=0.0
diff --git a/Build/MonoBleedingEdge/etc/mono/config b/Build/MonoBleedingEdge/etc/mono/config
new file mode 100644
index 0000000000000000000000000000000000000000..5a500d2d3e71e5c33846ddef51e4a238e8c4c0e3
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/config
@@ -0,0 +1,43 @@
+<configuration>
+	<dllmap dll="i:cygwin1.dll" target="libc.dylib" os="!windows" />
+	<dllmap dll="libc" target="libc.dylib" os="!windows"/>
+	<dllmap dll="intl" target="libintl.dylib" os="!windows"/>
+	<dllmap dll="intl" name="bind_textdomain_codeset" target="libc.dylib" os="solaris"/>
+	<dllmap dll="libintl" name="bind_textdomain_codeset" target="libc.dylib" os="solaris"/>
+	<dllmap dll="libintl" target="libintl.dylib" os="!windows"/>
+	<dllmap dll="i:libxslt.dll" target="libxslt.dylib" os="!windows"/>
+	<dllmap dll="i:odbc32.dll" target="libodbc.dylib" os="!windows"/>
+	<dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
+	<dllmap dll="oci" target="libclntsh.dylib" os="!windows"/>
+	<dllmap dll="db2cli" target="libdb2_36.dylib" os="!windows"/>
+	<dllmap dll="MonoPosixHelper" target="libMonoPosixHelper.dylib" os="!windows" />
+	<dllmap dll="libmono-btls-shared" target="libmono-btls-shared.dylib" os="!windows" />
+	<dllmap dll="i:msvcrt" target="libc.dylib" os="!windows"/>
+	<dllmap dll="i:msvcrt.dll" target="libc.dylib" os="!windows"/>
+	<dllmap dll="sqlite" target="libsqlite.0.dylib" os="!windows"/>
+	<dllmap dll="sqlite3" target="libsqlite3.0.dylib" os="!windows"/>
+	<dllmap dll="libX11" target="libX11.dylib" os="!windows" />
+	<dllmap dll="libgdk-x11-2.0" target="libgdk-x11-2.0.dylib" os="!windows"/>
+	<dllmap dll="libgdk_pixbuf-2.0" target="libgdk_pixbuf-2.0.so.0" os="!windows"/>
+	<dllmap dll="libgtk-x11-2.0" target="libgtk-x11-2.0.dylib" os="!windows"/>
+	<dllmap dll="libglib-2.0" target="libglib-2.0.so.0" os="!windows"/>
+	<dllmap dll="libgobject-2.0" target="libgobject-2.0.so.0" os="!windows"/>
+	<dllmap dll="libgnomeui-2" target="libgnomeui-2.so.0" os="!windows"/>
+	<dllmap dll="librsvg-2" target="librsvg-2.so.2" os="!windows"/>
+	<dllmap dll="libXinerama" target="libXinerama.so.1" os="!windows" />
+	<dllmap dll="libasound" target="libasound.so.2" os="!windows" />
+	<dllmap dll="libcairo-2.dll" target="libcairo.so.2" os="!windows"/>
+	<dllmap dll="libcairo-2.dll" target="libcairo.2.dylib" os="osx"/>
+	<dllmap dll="libcups" target="libcups.so.2" os="!windows"/>
+	<dllmap dll="libcups" target="libcups.dylib" os="osx"/>
+	<dllmap dll="i:kernel32.dll">
+		<dllentry dll="__Internal" name="CopyMemory" target="mono_win32_compat_CopyMemory"/>
+		<dllentry dll="__Internal" name="FillMemory" target="mono_win32_compat_FillMemory"/>
+		<dllentry dll="__Internal" name="MoveMemory" target="mono_win32_compat_MoveMemory"/>
+		<dllentry dll="__Internal" name="ZeroMemory" target="mono_win32_compat_ZeroMemory"/>
+	</dllmap>
+	<dllmap dll="gdiplus" target="/Users/builduser/build/output/Unity-Technologies/mono/external/buildscripts/add_to_build_results/monodistribution/lib/libgdiplus.dylib" os="!windows"/>
+	<dllmap dll="gdiplus.dll" target="/Users/builduser/build/output/Unity-Technologies/mono/external/buildscripts/add_to_build_results/monodistribution/lib/libgdiplus.dylib"  os="!windows"/>
+	<dllmap dll="gdi32" target="/Users/builduser/build/output/Unity-Technologies/mono/external/buildscripts/add_to_build_results/monodistribution/lib/libgdiplus.dylib" os="!windows"/>
+	<dllmap dll="gdi32.dll" target="/Users/builduser/build/output/Unity-Technologies/mono/external/buildscripts/add_to_build_results/monodistribution/lib/libgdiplus.dylib" os="!windows"/>
+</configuration>
diff --git a/Build/MonoBleedingEdge/etc/mono/mconfig/config.xml b/Build/MonoBleedingEdge/etc/mono/mconfig/config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a3df3b5e9c236e124791fc1dfd5beccaca7e3727
--- /dev/null
+++ b/Build/MonoBleedingEdge/etc/mono/mconfig/config.xml
@@ -0,0 +1,616 @@
+<?xml version="1.0" encoding="utf-8"?>
+<mconfig>
+  <configuration>
+    <handlers>
+      <handler section="feature" 
+	       type="Mono.MonoConfig.FeatureNodeHandler, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null"
+	       storageType="System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Mono.MonoConfig.FeatureNode, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+      <handler section="configBlock"
+	       type="Mono.MonoConfig.ConfigBlockNodeHandler, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null"
+	       storageType="System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Mono.MonoConfig.ConfigBlockBlock, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+      <handler section="default"
+	       type="Mono.MonoConfig.DefaultNodeHandler, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null"
+	       storageType="System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Mono.MonoConfig.DefaultNode, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+      <handler section="defaultConfigFile"
+	       type="Mono.MonoConfig.DefaultConfigFileNodeHandler, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null"
+	       storageType="System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Mono.MonoConfig.DefaultConfigFile, mconfig, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+    </handlers>
+  </configuration>
+
+  <feature name="AJAX" target="web">
+    <description><![CDATA[
+      Adds entries to your Web.config file which are required by any .NET 3.5 AJAX.NET application.
+    ]]></description>
+    <blocks>
+      <block name="AJAX config sections"/>
+      <block name="AJAX controls registration"/>
+      <block name="AJAX compilation"/>
+      <block name="AJAX HTTP handlers"/>
+      <block name="AJAX HTTP modules"/>
+      <block name="AJAX CodeDOM 3.5 settings"/>
+      <block name="AJAX runtime settings"/>
+      <block name="AJAX system.webServer"/>
+      <block name="" />
+    </blocks>
+  </feature>
+
+  <feature name="AJAX1" target="web">
+    <description><![CDATA[
+      Adds entries to your Web.config file which are required by any AJAX.NET 1.0 application.
+    ]]></description>
+    <blocks>
+      <block name="AJAX1 config sections"/>
+      <block name="AJAX1 controls registration"/>
+      <block name="AJAX1 compilation"/>
+      <block name="AJAX1 HTTP handlers"/>
+      <block name="AJAX1 HTTP modules"/>
+      <block name="AJAX1 system.web.extensions"/>
+      <block name="AJAX1 system.webServer"/>
+      <block name="" />
+    </blocks>
+  </feature>
+
+  <feature name="DynamicData" target="web">
+    <description><![CDATA[
+      Adds entries to your Web.config file which are required by any ASP.NET DynamicData application.
+    ]]></description>
+    <blocks>
+      <block name="AJAX config sections"/>
+      <block name="AJAX controls registration"/>
+      <block name="AJAX compilation"/>
+      <block name="AJAX HTTP handlers"/>
+      <block name="AJAX HTTP modules"/>
+      <block name="AJAX system.web.extensions"/>
+      <block name="AJAX system.webServer"/>
+
+      <block name="DynamicData controls registration" />
+      <block name="DynamicData compilation" />
+      <block name="DynamicData HTTP modules" />
+    </blocks>
+  </feature>
+
+  <feature name="SettingsMapProtection" target="web">
+    <description><![CDATA[
+      Adds an entry to your config file which will prevent download of the 'settings.map' file. The
+file is used by the settings mapping manager to modify configuration settings depending on the operating
+system under which your application runs. Add this feature only if you have your own custom 'settings.map'
+file in the top-level directory of your ASP.NET application.
+]]></description>
+    <blocks>
+      <block name="SettingsMap Handler"/>
+    </blocks>
+  </feature>
+
+  <!-- configuration blocks required by the features -->
+  <configBlock name="SettingsMap Handler">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpHandlers" defaultBlockName="system.web.httpHandlers"/>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add verb="*" path="settings.map" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+]]>
+    </contents>
+  </configBlock>
+
+  <!-- AJAX.NET 3.5 start -->
+  <configBlock name="AJAX config sections">
+    <requires>
+      <section name="configuration">
+	<section name="configSections" attachPoint="true"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
+            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+          </sectionGroup>
+        </sectionGroup>
+      </sectionGroup>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX controls registration">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="pages" defaultBlockName="system.web.pages">
+	    <section name="controls" defaultBlockName="system.web.pages.controls"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+          <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX compilation">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="compilation" defaultBlockName="system.web.compilation">
+	    <section name="assemblies" defaultBlockName="system.web.compilation.assemblies"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+	    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+            <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+            <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX HTTP handlers">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpHandlers" defaultBlockName="system.web.httpHandlers"/>
+	</section>
+      </section>
+    </requires>
+    
+    <contents>
+      <![CDATA[
+	<remove verb="*" path="*.asmx"/>
+        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>   
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX HTTP modules">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpModules" defaultBlockName="system.web.httpModules"/>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX CodeDOM 3.5 settings">
+    <requires>
+      <section name="configuration">
+	<section name="system.codedom">
+	  <section name="compilers" defaultBlockName="system.codedom.compilers"/>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+	<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
+                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <providerOption name="CompilerVersion" value="v3.5"/>
+          <providerOption name="WarnAsError" value="false"/>
+        </compiler>
+        <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
+                  type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <providerOption name="CompilerVersion" value="v3.5"/>
+          <providerOption name="OptionInfer" value="true"/>
+          <providerOption name="WarnAsError" value="false"/>
+        </compiler>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX runtime settings">
+    <requires>
+      <section name="configuration">
+	<section name="runtime"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+	<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+        <dependentAssembly>
+          <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
+        </dependentAssembly>
+        <dependentAssembly>
+          <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
+          <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
+        </dependentAssembly>
+      </assemblyBinding>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX system.webServer">
+    <requires>
+      <section name="configuration">
+	<section name="system.webServer"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+      <validation validateIntegratedModeConfiguration="false"/>
+      <modules>
+        <remove name="ScriptModule" />
+        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </modules>
+      <handlers>
+        <remove name="WebServiceHandlerFactory-Integrated"/>
+        <remove name="ScriptHandlerFactory" />
+        <remove name="ScriptHandlerFactoryAppServices" />
+        <remove name="ScriptResource" />
+        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
+      </handlers>
+]]>
+    </contents>
+  </configBlock>
+  <!-- AJAX.NET 3.5 end -->
+
+  <!-- AJAX.NET 1.0 start -->
+  <configBlock name="AJAX1 config sections">
+    <requires>
+      <section name="configuration">
+	<section name="configSections" attachPoint="true"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
+        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
+          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
+          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
+          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
+        </sectionGroup>
+      </sectionGroup>
+    </sectionGroup>
+      ]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 controls registration">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="pages" defaultBlockName="system.web.pages">
+	    <section name="controls" defaultBlockName="system.web.pages.controls"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 compilation">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="compilation" defaultBlockName="system.web.compilation">
+	    <section name="assemblies" defaultBlockName="system.web.compilation.assemblies"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 HTTP handlers">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpHandlers" defaultBlockName="system.web.httpHandlers"/>
+	</section>
+      </section>
+    </requires>
+    
+    <contents>
+      <![CDATA[
+<remove verb="*" path="*.asmx"/>
+      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 HTTP modules">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpModules" defaultBlockName="system.web.httpModules"/>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 system.web.extensions">
+    <requires>
+      <section name="configuration">
+	<section name="system.web.extensions"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<scripting>
+      <webServices>
+      <!-- Uncomment this line to customize maxJsonLength and add a custom converter -->
+      <!--
+      <jsonSerialization maxJsonLength="500">
+        <converters>
+          <add name="ConvertMe" type="Acme.SubAcme.ConvertMeTypeConverter"/>
+        </converters>
+      </jsonSerialization>
+      -->
+      <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
+      <!--
+        <authenticationService enabled="true" requireSSL = "true|false"/>
+      -->
+
+      <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved
+           and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and
+           writeAccessProperties attributes. -->
+      <!--
+      <profileService enabled="true"
+                      readAccessProperties="propertyname1,propertyname2"
+                      writeAccessProperties="propertyname1,propertyname2" />
+      -->
+      </webServices>
+      <!--
+      <scriptResourceHandler enableCompression="true" enableCaching="true" />
+      -->
+    </scripting>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="AJAX1 system.webServer">
+    <requires>
+      <section name="configuration">
+	<section name="system.webServer"/>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<validation validateIntegratedModeConfiguration="false"/>
+    <modules>
+      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+    </modules>
+    <handlers>
+      <remove name="WebServiceHandlerFactory-Integrated" />
+      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
+           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
+           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+    </handlers>
+]]>
+    </contents>
+  </configBlock>
+  <!-- AJAX.NET 1.0 end -->
+
+  <configBlock name="DynamicData controls registration">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="pages" defaultBlockName="system.web.pages">
+	    <section name="controls" defaultBlockName="system.web.pages.controls"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add tagPrefix="asp" namespace="System.Web.DynamicData" assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="DynamicData compilation">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="compilation" defaultBlockName="system.web.compilation">
+	    <section name="assemblies" defaultBlockName="system.web.compilation.assemblies"/>
+	  </section>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+<add assembly="System.ComponentModel.DataAnnotations, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+<add assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <configBlock name="DynamicData HTTP modules">
+    <requires>
+      <section name="configuration">
+	<section name="system.web">
+	  <section name="httpModules" defaultBlockName="system.web.httpModules"/>
+	</section>
+      </section>
+    </requires>
+
+    <contents>
+      <![CDATA[
+<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
+]]>
+    </contents>
+  </configBlock>
+
+  <!-- default contents for missing sections -->
+  <default section="configuration" target="any">
+    <![CDATA[
+    <configuration>
+    </configuration>
+    ]]>
+  </default>
+
+  <default section="configSections" target="any">
+    <![CDATA[
+    <configSections>
+    </configSections>
+    ]]>
+  </default>
+
+  <default section="system.web" target="web">
+    <![CDATA[
+    <system.web>
+    </system.web>
+    ]]>
+  </default>
+
+  <default section="system.web.pages" target="web">
+    <![CDATA[
+<pages>
+</pages>
+]]>
+  </default>
+
+  <default section="system.web.pages.controls" target="web">
+    <![CDATA[
+<controls>
+</controls>
+]]>
+  </default>
+
+  <default section="system.web.compilation" target="web">
+    <![CDATA[
+<compilation debug="true">
+</compilation>
+]]>
+  </default>
+
+  <default section="system.web.compilation.assemblies" target="web">
+    <![CDATA[
+<assemblies>
+</assemblies>
+]]>
+  </default>
+
+  <default section="system.web.httpHandlers" target="web">
+    <![CDATA[
+<httpHandlers>
+</httpHandlers>
+]]>
+  </default>
+
+  <default section="system.web.httpModules" target="web">
+    <![CDATA[
+<httpModules>
+</httpModules>
+]]>
+  </default>
+
+  <default section="system.web.extensions" target="web">
+    <![CDATA[
+<system.web.extensions>
+</system.web.extensions>
+]]>
+  </default>
+
+  <default section="system.webServer" target="web">
+    <![CDATA[
+<system.webServer>
+</system.webServer>
+]]>
+  </default>
+
+  <default section="system.web.customErrors" target="web">
+    <![CDATA[
+<customErrors mode="RemoteOnly"/>
+]]>
+  </default>
+
+  <default section="system.codedom" target="any">
+    <![CDATA[
+    <system.codedom>
+    </system.codedom>
+]]>
+  </default>
+
+  <default section="system.codedom.compilers" target="any">
+    <![CDATA[
+    <compilers>
+    </compilers>
+]]>
+  </default>
+
+  <default section="runtime" target="any">
+    <![CDATA[
+    <runtime>
+    </runtime>
+]]>
+  </default>
+
+  <!-- default config file definitions -->
+  <defaultConfigFile name="web.config" fileName="Web.config" target="web">
+    <section name="configuration">
+      <section name="system.web">
+	<section name="compilation" defaultBlockName="system.web.compilation"/>
+	<section name="customErrors" defaultBlockName="system.web.customErrors"/>
+      </section>
+    </section>
+  </defaultConfigFile>
+</mconfig>
diff --git a/Build/UnityCrashHandler64.exe b/Build/UnityCrashHandler64.exe
new file mode 100644
index 0000000000000000000000000000000000000000..4667977ee97080444d30e663377a72cb1684f4e6
Binary files /dev/null and b/Build/UnityCrashHandler64.exe differ
diff --git a/Build/UnityPlayer.dll b/Build/UnityPlayer.dll
new file mode 100644
index 0000000000000000000000000000000000000000..15b26a9d354c3f03af052ebd8a7955b2c23e0b2c
Binary files /dev/null and b/Build/UnityPlayer.dll differ
diff --git a/Build/WinPixEventRuntime.dll b/Build/WinPixEventRuntime.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9d9ce8f6861fba403c8a56535af85849582a71b0
Binary files /dev/null and b/Build/WinPixEventRuntime.dll differ
diff --git a/Library/AnnotationManager b/Library/AnnotationManager
new file mode 100644
index 0000000000000000000000000000000000000000..535db85c9c4d4985934c15e327b810a00161a05b
Binary files /dev/null and b/Library/AnnotationManager differ
diff --git a/Library/AssetImportState b/Library/AssetImportState
new file mode 100644
index 0000000000000000000000000000000000000000..715f58c16092d64b188a66835991d58f9be7e1ee
--- /dev/null
+++ b/Library/AssetImportState
@@ -0,0 +1 @@
+19;0;4;0;0
\ No newline at end of file
diff --git a/Library/BuildPlayer.prefs b/Library/BuildPlayer.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Library/BuildSettings.asset b/Library/BuildSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..02fd00974314a8272045abed388d550caf28950a
Binary files /dev/null and b/Library/BuildSettings.asset differ
diff --git a/Library/CurrentLayout.dwlt b/Library/CurrentLayout.dwlt
new file mode 100644
index 0000000000000000000000000000000000000000..c9b5563238242355ba87f6cb4d624e87b9244a29
--- /dev/null
+++ b/Library/CurrentLayout.dwlt
@@ -0,0 +1,740 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_PixelRect:
+    serializedVersion: 2
+    x: 0
+    y: 43
+    width: 1366
+    height: 725
+  m_ShowMode: 4
+  m_Title: 
+  m_RootView: {fileID: 2}
+  m_MinSize: {x: 950, y: 300}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_Maximized: 1
+--- !u!114 &2
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 3}
+  - {fileID: 5}
+  - {fileID: 4}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1366
+    height: 725
+  m_MinSize: {x: 950, y: 300}
+  m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &3
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1366
+    height: 30
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+  m_LastLoadedLayoutName: 
+--- !u!114 &4
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 705
+    width: 1366
+    height: 20
+  m_MinSize: {x: 0, y: 0}
+  m_MaxSize: {x: 0, y: 0}
+--- !u!114 &5
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 6}
+  - {fileID: 9}
+  - {fileID: 10}
+  - {fileID: 11}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 30
+    width: 1366
+    height: 675
+  m_MinSize: {x: 917, y: 448}
+  m_MaxSize: {x: 22012, y: 10024}
+  vertical: 0
+  controlID: 101
+--- !u!114 &6
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 7}
+  - {fileID: 8}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 599
+    height: 675
+  m_MinSize: {x: 202, y: 448}
+  m_MaxSize: {x: 4002, y: 8048}
+  vertical: 1
+  controlID: 63
+--- !u!114 &7
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 599
+    height: 294
+  m_MinSize: {x: 202, y: 224}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 13}
+  m_Panes:
+  - {fileID: 13}
+  - {fileID: 14}
+  m_Selected: 0
+  m_LastSelected: 1
+--- !u!114 &8
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 294
+    width: 599
+    height: 381
+  m_MinSize: {x: 202, y: 224}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 12}
+  m_Panes:
+  - {fileID: 12}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &9
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 599
+    y: 0
+    width: 204
+    height: 675
+  m_MinSize: {x: 204, y: 224}
+  m_MaxSize: {x: 4004, y: 4024}
+  m_ActualView: {fileID: 15}
+  m_Panes:
+  - {fileID: 15}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &10
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 803
+    y: 0
+    width: 283
+    height: 675
+  m_MinSize: {x: 234, y: 274}
+  m_MaxSize: {x: 10004, y: 10024}
+  m_ActualView: {fileID: 16}
+  m_Panes:
+  - {fileID: 16}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &11
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 1086
+    y: 0
+    width: 280
+    height: 675
+  m_MinSize: {x: 277, y: 74}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 17}
+  m_Panes:
+  - {fileID: 17}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &12
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Game
+    m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 367
+    width: 597
+    height: 361
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_MaximizeOnPlay: 0
+  m_Gizmos: 0
+  m_Stats: 0
+  m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+  m_TargetDisplay: 0
+  m_ZoomArea:
+    m_HRangeLocked: 0
+    m_VRangeLocked: 0
+    hZoomLockedByDefault: 0
+    vZoomLockedByDefault: 0
+    m_HBaseRangeMin: -298.5
+    m_HBaseRangeMax: 298.5
+    m_VBaseRangeMin: -172
+    m_VBaseRangeMax: 172
+    m_HAllowExceedBaseRangeMin: 1
+    m_HAllowExceedBaseRangeMax: 1
+    m_VAllowExceedBaseRangeMin: 1
+    m_VAllowExceedBaseRangeMax: 1
+    m_ScaleWithWindow: 0
+    m_HSlider: 0
+    m_VSlider: 0
+    m_IgnoreScrollWheelUntilClicked: 0
+    m_EnableMouseInput: 1
+    m_EnableSliderZoomHorizontal: 0
+    m_EnableSliderZoomVertical: 0
+    m_UniformScale: 1
+    m_UpDirection: 1
+    m_DrawArea:
+      serializedVersion: 2
+      x: 0
+      y: 17
+      width: 597
+      height: 344
+    m_Scale: {x: 1, y: 1}
+    m_Translation: {x: 298.5, y: 172}
+    m_MarginLeft: 0
+    m_MarginRight: 0
+    m_MarginTop: 0
+    m_MarginBottom: 0
+    m_LastShownAreaInsideMargins:
+      serializedVersion: 2
+      x: -298.5
+      y: -172
+      width: 597
+      height: 344
+    m_MinimalGUI: 1
+  m_defaultScale: 1
+  m_TargetTexture: {fileID: 0}
+  m_CurrentColorSpace: 0
+  m_LastWindowPixelSize: {x: 597, y: 361}
+  m_ClearInEditMode: 1
+  m_NoCameraWarning: 1
+  m_LowResolutionForAspectRatios: 01000000000000000000
+  m_XRRenderMode: 0
+--- !u!114 &13
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Scene
+    m_Image: {fileID: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 73
+    width: 597
+    height: 274
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_WindowGUID: 9aa1b8226e0be0a4fa0e2332d7a60f83
+  m_SceneLighting: 1
+  m_2DMode: 1
+  m_isRotationLocked: 0
+  m_AudioPlay: 0
+  m_Position:
+    m_Target: {x: 144.74753, y: 253.11664, z: 2.401363}
+    speed: 2
+    m_Value: {x: 144.74753, y: 253.11664, z: 2.401363}
+  m_RenderMode: 0
+  m_CameraMode:
+    drawMode: 0
+    name: Shaded
+    section: Shading Mode
+  m_ValidateTrueMetals: 0
+  m_SceneViewState:
+    showFog: 1
+    showMaterialUpdate: 0
+    showSkybox: 1
+    showFlares: 1
+    showImageEffects: 1
+    showParticleSystems: 1
+  grid:
+    xGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+    yGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+    zGrid:
+      m_Target: 1
+      speed: 2
+      m_Value: 1
+  m_Rotation:
+    m_Target: {x: 0, y: 0, z: 0, w: -1}
+    speed: 2
+    m_Value: {x: 0, y: 0, z: 0, w: -1}
+  m_Size:
+    m_Target: 873.8887
+    speed: 2
+    m_Value: 873.8887
+  m_Ortho:
+    m_Target: 1
+    speed: 2
+    m_Value: 1
+  m_ShowGlobalGrid: 1
+  m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+  m_LastSceneViewOrtho: 0
+  m_ReplacementShader: {fileID: 0}
+  m_ReplacementString: 
+  m_LastLockedObject: {fileID: 0}
+  m_ViewIsLockedToObject: 0
+--- !u!114 &14
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12914, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 100, y: 100}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Animator
+    m_Image: {fileID: 663490763026382308, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 73
+    width: 597
+    height: 326
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_ViewTransforms:
+    m_KeySerializationHelper:
+    - {fileID: 1107745010865390340, guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70, type: 2}
+    - {fileID: 1107740691003741898, guid: 1975a4f4aae21dc43abb86a5745e83b2, type: 2}
+    m_ValueSerializationHelper:
+    - e00: 0.6912075
+      e01: 0
+      e02: 0
+      e03: -187.9353
+      e10: 0
+      e11: 0.6912075
+      e12: 0
+      e13: 98.2144
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    - e00: 0.34
+      e01: 0
+      e02: 0
+      e03: -2
+      e10: 0
+      e11: 0.34
+      e12: 0
+      e13: 120.55
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_PreviewAnimator: {fileID: 0}
+  m_AnimatorController: {fileID: 9100000, guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70,
+    type: 2}
+  m_BreadCrumbs:
+  - m_Target: {fileID: 1107745010865390340, guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70,
+      type: 2}
+    m_ScrollPosition: {x: 0, y: 0}
+  stateMachineGraph: {fileID: 0}
+  stateMachineGraphGUI: {fileID: 0}
+  blendTreeGraph: {fileID: 0}
+  blendTreeGraphGUI: {fileID: 0}
+  m_AutoLiveLink: 1
+  m_MiniTool: 0
+  m_LockTracker:
+    m_IsLocked: 0
+  m_CurrentEditor: 1
+  m_LayerEditor:
+    m_SelectedLayerIndex: 0
+--- !u!114 &15
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Hierarchy
+    m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 599
+    y: 73
+    width: 200
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_SceneHierarchy:
+    m_TreeViewState:
+      scrollPos: {x: 0, y: 0}
+      m_SelectedIDs: 
+      m_LastClickedID: 0
+      m_ExpandedIDs: 80f9ffff98f9ffffcafaffff0afbffff12fbffff60fbffffdefbffff
+      m_RenameOverlay:
+        m_UserAcceptedRename: 0
+        m_Name: 
+        m_OriginalName: 
+        m_EditFieldRect:
+          serializedVersion: 2
+          x: 0
+          y: 0
+          width: 0
+          height: 0
+        m_UserData: 0
+        m_IsWaitingForDelay: 0
+        m_IsRenaming: 0
+        m_OriginalEventType: 11
+        m_IsRenamingFilename: 0
+        m_ClientGUIView: {fileID: 9}
+      m_SearchString: 
+    m_ExpandedScenes: []
+    m_CurrenRootInstanceID: 0
+    m_LockTracker:
+      m_IsLocked: 0
+    m_CurrentSortingName: TransformSorting
+  m_WindowGUID: cbf504a7ae9b6de4f8689ba52c05d33c
+--- !u!114 &16
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 230, y: 250}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_TitleContent:
+    m_Text: Project
+    m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 803
+    y: 73
+    width: 279
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_SearchFilter:
+    m_NameFilter: 
+    m_ClassNames: []
+    m_AssetLabels: []
+    m_AssetBundleNames: []
+    m_VersionControlStates: []
+    m_SoftLockControlStates: []
+    m_ReferencingInstanceIDs: 
+    m_SceneHandles: 
+    m_ShowAllHits: 0
+    m_SearchArea: 1
+    m_Folders:
+    - Assets/Script/Menu
+  m_ViewMode: 1
+  m_StartGridSize: 64
+  m_LastFolders:
+  - Assets/Script/Menu
+  m_LastFoldersGridSize: -1
+  m_LastProjectPath: C:\Users\alamh\2D Shooter
+  m_LockTracker:
+    m_IsLocked: 0
+  m_FolderTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 600a0000
+    m_LastClickedID: 2656
+    m_ExpandedIDs: 00000000b80900004e0a00004e0b0000440c0000f40d00008e2c0000902c000000ca9a3b
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 10}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_AssetTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 
+    m_LastClickedID: 0
+    m_ExpandedIDs: 00000000b80900004e0a00004e0b0000440c0000f40d00008e2c0000902c0000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_ListAreaState:
+    m_SelectedInstanceIDs: 
+    m_LastClickedInstanceID: 0
+    m_HadKeyboardFocusLastEvent: 0
+    m_ExpandedInstanceIDs: 00000000140e0000160a0000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 10}
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+    m_NewAssetIndexInList: -1
+    m_ScrollPosition: {x: 0, y: 0}
+    m_GridSize: 64
+  m_DirectoriesAreaWidth: 110
+--- !u!114 &17
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 275, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Inspector
+    m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 1086
+    y: 73
+    width: 278
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_ObjectsLockedBeforeSerialization: []
+  m_InstanceIDsLockedBeforeSerialization: 
+  m_LockTracker:
+    m_IsLocked: 0
+  m_PreviewResizer:
+    m_CachedPref: 341
+    m_ControlHash: -371814159
+    m_PrefName: Preview_InspectorPreview
+  m_PreviewWindow: {fileID: 0}
diff --git a/Library/CurrentMaximizeLayout.dwlt b/Library/CurrentMaximizeLayout.dwlt
new file mode 100644
index 0000000000000000000000000000000000000000..39238ac82d7f909c7afa0920cdc0cf38868c1af6
--- /dev/null
+++ b/Library/CurrentMaximizeLayout.dwlt
@@ -0,0 +1,649 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 3}
+  - {fileID: 8}
+  - {fileID: 10}
+  - {fileID: 12}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 30
+    width: 1366
+    height: 675
+  m_MinSize: {x: 913, y: 448}
+  m_MaxSize: {x: 22008, y: 10000}
+  vertical: 0
+  controlID: 136
+--- !u!114 &2
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Game
+    m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 419
+    width: 597
+    height: 309
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_MaximizeOnPlay: 1
+  m_Gizmos: 0
+  m_Stats: 0
+  m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+  m_TargetDisplay: 0
+  m_ZoomArea:
+    m_HRangeLocked: 0
+    m_VRangeLocked: 0
+    hZoomLockedByDefault: 0
+    vZoomLockedByDefault: 0
+    m_HBaseRangeMin: -298.5
+    m_HBaseRangeMax: 298.5
+    m_VBaseRangeMin: -146
+    m_VBaseRangeMax: 146
+    m_HAllowExceedBaseRangeMin: 1
+    m_HAllowExceedBaseRangeMax: 1
+    m_VAllowExceedBaseRangeMin: 1
+    m_VAllowExceedBaseRangeMax: 1
+    m_ScaleWithWindow: 0
+    m_HSlider: 1
+    m_VSlider: 1
+    m_IgnoreScrollWheelUntilClicked: 0
+    m_EnableMouseInput: 1
+    m_EnableSliderZoomHorizontal: 0
+    m_EnableSliderZoomVertical: 0
+    m_UniformScale: 1
+    m_UpDirection: 1
+    m_DrawArea:
+      serializedVersion: 2
+      x: 0
+      y: 17
+      width: 597
+      height: 292
+    m_Scale: {x: 1.3789661, y: 1.3789661}
+    m_Translation: {x: 313.69528, y: 167.6633}
+    m_MarginLeft: 0
+    m_MarginRight: 0
+    m_MarginTop: 0
+    m_MarginBottom: 0
+    m_LastShownAreaInsideMargins:
+      serializedVersion: 2
+      x: -227.48586
+      y: -121.586235
+      width: 432.93304
+      height: 211.75285
+    m_MinimalGUI: 1
+  m_defaultScale: 1
+  m_TargetTexture: {fileID: 0}
+  m_CurrentColorSpace: 0
+  m_LastWindowPixelSize: {x: 597, y: 309}
+  m_ClearInEditMode: 1
+  m_NoCameraWarning: 1
+  m_LowResolutionForAspectRatios: 01000000000000000000
+  m_XRRenderMode: 0
+--- !u!114 &3
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children:
+  - {fileID: 4}
+  - {fileID: 7}
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 599
+    height: 675
+  m_MinSize: {x: 202, y: 448}
+  m_MaxSize: {x: 4002, y: 8048}
+  vertical: 1
+  controlID: 105
+--- !u!114 &4
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 599
+    height: 346
+  m_MinSize: {x: 202, y: 224}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 5}
+  m_Panes:
+  - {fileID: 5}
+  - {fileID: 6}
+  m_Selected: 0
+  m_LastSelected: 1
+--- !u!114 &5
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Scene
+    m_Image: {fileID: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 73
+    width: 597
+    height: 326
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_WindowGUID: 9aa1b8226e0be0a4fa0e2332d7a60f83
+  m_SceneLighting: 1
+  m_2DMode: 1
+  m_isRotationLocked: 0
+  m_AudioPlay: 0
+  m_Position:
+    m_Target: {x: -11.21, y: 2.35, z: 0}
+    speed: 2
+    m_Value: {x: -11.21, y: 2.35, z: 0}
+  m_RenderMode: 0
+  m_CameraMode:
+    drawMode: 0
+    name: Shaded
+    section: Shading Mode
+  m_ValidateTrueMetals: 0
+  m_SceneViewState:
+    showFog: 1
+    showMaterialUpdate: 0
+    showSkybox: 1
+    showFlares: 1
+    showImageEffects: 1
+    showParticleSystems: 1
+  grid:
+    xGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+    yGrid:
+      m_Target: 0
+      speed: 2
+      m_Value: 0
+    zGrid:
+      m_Target: 1
+      speed: 2
+      m_Value: 1
+  m_Rotation:
+    m_Target: {x: 0, y: 0, z: 0, w: -1}
+    speed: 2
+    m_Value: {x: 0, y: 0, z: 0, w: 1}
+  m_Size:
+    m_Target: 5.014408
+    speed: 2
+    m_Value: 5.014408
+  m_Ortho:
+    m_Target: 1
+    speed: 2
+    m_Value: 1
+  m_ShowGlobalGrid: 1
+  m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+  m_LastSceneViewOrtho: 0
+  m_ReplacementShader: {fileID: 0}
+  m_ReplacementString: 
+  m_LastLockedObject: {fileID: 0}
+  m_ViewIsLockedToObject: 0
+--- !u!114 &6
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12914, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 100, y: 100}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Animator
+    m_Image: {fileID: 663490763026382308, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 0
+    y: 73
+    width: 597
+    height: 326
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_ViewTransforms:
+    m_KeySerializationHelper:
+    - {fileID: 1107745010865390340, guid: 0d6871a7a55c28f4aa5bd1ecb8d8ae70, type: 2}
+    - {fileID: 1107740691003741898, guid: 1975a4f4aae21dc43abb86a5745e83b2, type: 2}
+    m_ValueSerializationHelper:
+    - e00: 0.29882812
+      e01: 0
+      e02: 0
+      e03: 22.171875
+      e10: 0
+      e11: 0.29882812
+      e12: 0
+      e13: 112.7207
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    - e00: 0.32210526
+      e01: 0
+      e02: 0
+      e03: -1.1052551
+      e10: 0
+      e11: 0.32210526
+      e12: 0
+      e13: 119.98631
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+  m_PreviewAnimator: {fileID: 0}
+  m_AnimatorController: {fileID: 9100000, guid: 1975a4f4aae21dc43abb86a5745e83b2,
+    type: 2}
+  m_BreadCrumbs:
+  - m_Target: {fileID: 1107740691003741898, guid: 1975a4f4aae21dc43abb86a5745e83b2,
+      type: 2}
+    m_ScrollPosition: {x: 0, y: 0}
+  stateMachineGraph: {fileID: 0}
+  stateMachineGraphGUI: {fileID: 0}
+  blendTreeGraph: {fileID: 0}
+  blendTreeGraphGUI: {fileID: 0}
+  m_AutoLiveLink: 1
+  m_MiniTool: 0
+  m_LockTracker:
+    m_IsLocked: 0
+  m_CurrentEditor: 1
+  m_LayerEditor:
+    m_SelectedLayerIndex: 0
+--- !u!114 &7
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 0
+    y: 346
+    width: 599
+    height: 329
+  m_MinSize: {x: 202, y: 224}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 2}
+  m_Panes:
+  - {fileID: 2}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &8
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 599
+    y: 0
+    width: 204
+    height: 675
+  m_MinSize: {x: 204, y: 224}
+  m_MaxSize: {x: 4004, y: 4024}
+  m_ActualView: {fileID: 9}
+  m_Panes:
+  - {fileID: 9}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &9
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 200, y: 200}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Hierarchy
+    m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 599
+    y: 73
+    width: 200
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_SceneHierarchy:
+    m_TreeViewState:
+      scrollPos: {x: 0, y: 0}
+      m_SelectedIDs: 
+      m_LastClickedID: 0
+      m_ExpandedIDs: defbffff
+      m_RenameOverlay:
+        m_UserAcceptedRename: 0
+        m_Name: 
+        m_OriginalName: 
+        m_EditFieldRect:
+          serializedVersion: 2
+          x: 0
+          y: 0
+          width: 0
+          height: 0
+        m_UserData: 0
+        m_IsWaitingForDelay: 0
+        m_IsRenaming: 0
+        m_OriginalEventType: 11
+        m_IsRenamingFilename: 0
+        m_ClientGUIView: {fileID: 8}
+      m_SearchString: 
+    m_ExpandedScenes: []
+    m_CurrenRootInstanceID: 0
+    m_LockTracker:
+      m_IsLocked: 0
+    m_CurrentSortingName: TransformSorting
+  m_WindowGUID: cbf504a7ae9b6de4f8689ba52c05d33c
+--- !u!114 &10
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 803
+    y: 0
+    width: 283
+    height: 675
+  m_MinSize: {x: 234, y: 274}
+  m_MaxSize: {x: 10004, y: 10024}
+  m_ActualView: {fileID: 11}
+  m_Panes:
+  - {fileID: 11}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &11
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 230, y: 250}
+  m_MaxSize: {x: 10000, y: 10000}
+  m_TitleContent:
+    m_Text: Project
+    m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 803
+    y: 73
+    width: 279
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_SearchFilter:
+    m_NameFilter: 
+    m_ClassNames: []
+    m_AssetLabels: []
+    m_AssetBundleNames: []
+    m_VersionControlStates: []
+    m_SoftLockControlStates: []
+    m_ReferencingInstanceIDs: 
+    m_SceneHandles: 
+    m_ShowAllHits: 0
+    m_SearchArea: 1
+    m_Folders:
+    - Assets/Script
+  m_ViewMode: 1
+  m_StartGridSize: 64
+  m_LastFolders:
+  - Assets/Script
+  m_LastFoldersGridSize: -1
+  m_LastProjectPath: C:\Users\alamh\2D Shooter
+  m_LockTracker:
+    m_IsLocked: 0
+  m_FolderTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 080c0000
+    m_LastClickedID: 3080
+    m_ExpandedIDs: 000000008a0900001e0a0000180b0000b40d0000262c0000282c000000ca9a3b
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 10}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_AssetTreeState:
+    scrollPos: {x: 0, y: 0}
+    m_SelectedIDs: 
+    m_LastClickedID: 0
+    m_ExpandedIDs: 000000008a0900001e0a0000180b0000b40d0000262c0000282c0000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 0}
+    m_SearchString: 
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+  m_ListAreaState:
+    m_SelectedInstanceIDs: 4c070000
+    m_LastClickedInstanceID: 1868
+    m_HadKeyboardFocusLastEvent: 1
+    m_ExpandedInstanceIDs: 00000000
+    m_RenameOverlay:
+      m_UserAcceptedRename: 0
+      m_Name: 
+      m_OriginalName: 
+      m_EditFieldRect:
+        serializedVersion: 2
+        x: 0
+        y: 0
+        width: 0
+        height: 0
+      m_UserData: 0
+      m_IsWaitingForDelay: 0
+      m_IsRenaming: 0
+      m_OriginalEventType: 11
+      m_IsRenamingFilename: 1
+      m_ClientGUIView: {fileID: 10}
+    m_CreateAssetUtility:
+      m_EndAction: {fileID: 0}
+      m_InstanceID: 0
+      m_Path: 
+      m_Icon: {fileID: 0}
+      m_ResourceFile: 
+    m_NewAssetIndexInList: -1
+    m_ScrollPosition: {x: 0, y: 0}
+    m_GridSize: 64
+  m_DirectoriesAreaWidth: 110
+--- !u!114 &12
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Children: []
+  m_Position:
+    serializedVersion: 2
+    x: 1086
+    y: 0
+    width: 280
+    height: 675
+  m_MinSize: {x: 277, y: 74}
+  m_MaxSize: {x: 4002, y: 4024}
+  m_ActualView: {fileID: 13}
+  m_Panes:
+  - {fileID: 13}
+  m_Selected: 0
+  m_LastSelected: 0
+--- !u!114 &13
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_MinSize: {x: 275, y: 50}
+  m_MaxSize: {x: 4000, y: 4000}
+  m_TitleContent:
+    m_Text: Inspector
+    m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
+      type: 0}
+    m_Tooltip: 
+  m_Pos:
+    serializedVersion: 2
+    x: 1086
+    y: 73
+    width: 278
+    height: 655
+  m_PersistentViewDataDictionary: {fileID: 0}
+  m_ObjectsLockedBeforeSerialization: []
+  m_InstanceIDsLockedBeforeSerialization: 
+  m_LockTracker:
+    m_IsLocked: 0
+  m_PreviewResizer:
+    m_CachedPref: 341
+    m_ControlHash: -371814159
+    m_PrefName: Preview_InspectorPreview
+  m_PreviewWindow: {fileID: 0}
diff --git a/Library/EditorOnlyScriptingUserSettings.json b/Library/EditorOnlyScriptingUserSettings.json
new file mode 100644
index 0000000000000000000000000000000000000000..278d630c48fb33ef26c98e1b8159c23f5b3c3868
--- /dev/null
+++ b/Library/EditorOnlyScriptingUserSettings.json
@@ -0,0 +1 @@
+{"m_ScriptingRuntimeVersion":1,"m_DefineSymbols":[],"m_AllowUnsafeCode":false}
\ No newline at end of file
diff --git a/Library/EditorUserBuildSettings.asset b/Library/EditorUserBuildSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..0eac9660bc2b88e714826509ec3ed780acf77211
Binary files /dev/null and b/Library/EditorUserBuildSettings.asset differ
diff --git a/Library/EditorUserSettings.asset b/Library/EditorUserSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..804ff37412e923f7e5d6a6ec9582b4587cac4391
Binary files /dev/null and b/Library/EditorUserSettings.asset differ
diff --git a/Library/GridBrush/UnityEditor.GridBrush.asset b/Library/GridBrush/UnityEditor.GridBrush.asset
new file mode 100644
index 0000000000000000000000000000000000000000..1541b5b5fb3d6297ff915e0eb8ca53a26a589a28
--- /dev/null
+++ b/Library/GridBrush/UnityEditor.GridBrush.asset
@@ -0,0 +1,36 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+  m_ObjectHideFlags: 52
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 12392, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: Default Brush
+  m_EditorClassIdentifier: 
+  m_Cells:
+  - m_Tile: {fileID: 11400000, guid: be48d66c967b0714b9635d4b32f88d7d, type: 2}
+    m_Matrix:
+      e00: 1
+      e01: 0
+      e02: 0
+      e03: 0
+      e10: 0
+      e11: 1
+      e12: 0
+      e13: 0
+      e20: 0
+      e21: 0
+      e22: 1
+      e23: 0
+      e30: 0
+      e31: 0
+      e32: 0
+      e33: 1
+    m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Size: {x: 1, y: 1, z: 1}
+  m_Pivot: {x: 0, y: 0, z: 0}
diff --git a/Library/InspectorExpandedItems.asset b/Library/InspectorExpandedItems.asset
new file mode 100644
index 0000000000000000000000000000000000000000..edafdb12ca5c8d2775297676814401acf411e1a0
Binary files /dev/null and b/Library/InspectorExpandedItems.asset differ
diff --git a/Library/LastBuild.buildreport b/Library/LastBuild.buildreport
new file mode 100644
index 0000000000000000000000000000000000000000..41f739e8515f161b6c08a95a052f74de56d1a95c
Binary files /dev/null and b/Library/LastBuild.buildreport differ
diff --git a/Library/LastSceneManagerSetup.txt b/Library/LastSceneManagerSetup.txt
new file mode 100644
index 0000000000000000000000000000000000000000..723122a53dc13b1a096c37ae8439b56e39925ccb
--- /dev/null
+++ b/Library/LastSceneManagerSetup.txt
@@ -0,0 +1,4 @@
+sceneSetups:
+- path: Assets/Scenes/MainMenu.unity
+  isLoaded: 1
+  isActive: 1
diff --git a/Library/LibraryFormatVersion.txt b/Library/LibraryFormatVersion.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6185f096e02c28d375d59d03684dbd44950f9dab
--- /dev/null
+++ b/Library/LibraryFormatVersion.txt
@@ -0,0 +1,2 @@
+unityRebuildLibraryVersion: 11
+unityForwardCompatibleVersion: 40
diff --git a/Library/MonoManager.asset b/Library/MonoManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ca86b23f2d0ea2a35c3d20b6921721a7f0e97059
Binary files /dev/null and b/Library/MonoManager.asset differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md b/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..ceaa426414eea2c62ac440691241f487fe737b7f
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md
@@ -0,0 +1,37 @@
+
+[1.0.1]
+
+Adding Readme file
+Adding local plugin importer callbacks.
+Removing Bintray references in package.json
+
+[2.0.3]
+
+Fix bug where importing the asset store ads package would cause duiplicate symbols, 
+and removing the asset store ads package would cause missing symbols.
+
+[2.0.4]
+
+Added new description string to package.json
+Fixed art assets to use no compression (fixes issue switching between iOS and PC builds)
+
+[2.0.5] - 2018-03-29
+
+Fix for https://fogbugz.unity3d.com/f/cases/1011363
+Fixes an incorrect guid that the importer used to include/exclude the runtime assembly from the build.
+
+[2.0.6] - 2018-03-29
+
+Update changelog for this and 2.0.5
+
+[2.0.7] - 2018-04-06
+
+Fix editor assembly project file to include the importer script.
+
+[2.0.8] - 2018-05-01
+
+Add call to SetShouldOverridePredicate to exclude package dll when asset store dlls are present.
+Update unity version attribute to support 2017.4 LTS
+
+Fix an issue with the editor assembly to add back in some iOS platform specific code that was removed
+via conditionals (which is fine for source packages, but doesn't work with precompiled assemblies)
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md.meta b/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d2eb24c1ba718ab3ee4d97acc16a86a2f564c2a
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 35b4e72ca46f44581b85082c4dc21d13
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..575303a2ebf142bf5299a1945d379ea959dc7dae
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a37e18887fa954edf92bc36bc353b879
+folderAsset: yes
+timeCreated: 1491945644
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..aae7f602d5e2c4dd3cc46354428705c642f14ba3
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7c3a5d6e39b874f468b2691537168513
+folderAsset: yes
+timeCreated: 1491258568
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android.meta
new file mode 100644
index 0000000000000000000000000000000000000000..45b8bb6e93c3d6a54847876acae7f04e891e06e5
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 48986928cc2a449dbaecdd1654bc9bf6
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds.meta
new file mode 100644
index 0000000000000000000000000000000000000000..826840efd31736c28aa681963bc4f2e4ddcc8281
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f28fcced5af094cf78eb4e1109a71981
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar
new file mode 100644
index 0000000000000000000000000000000000000000..a05fc299a0f687a09a74eb6ed5f612d5d9d86a20
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6ba354b62d00c491b6026100ef8b2a9b7139ac72
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: b32abd1c9d73a4cce8389f084ac12b11
+timeCreated: 1491258710
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    Editor:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+    data:
+      enabled: 0
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8defda5c4ff15956bf1de2307c5f77fc84094966
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 99ddb49592ff84811804420a1910cb89
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4fa7f2805e295cc939225450c15e8a4e8f7a4248
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ce5a605c50687a07cfd7430a417cacdbe1c7ea8b
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 10bf81265ad87424d946598c575f45a0
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5d8fb0b96f778183a25ee9448808023cbe46a445
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ff78850d4db4d307e7adf318116c8e7fc20f171e
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 1b32bcce201b4494ea8848326290c5d5
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a44e61b438c42d68d46ba084885db866d27d89f5
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4f234578336894dc081edf696f2ff5f2
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f37efbe6d26bc885d170a1ff016d954d610c0af2
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2d4d46c70fdd242668a56e99799e8540
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c83ed20c36b16704f1f591d8a8324d6443c1f697
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: eeed6954b3c264ca0b28a92aa6289bf0
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    Editor:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+    data:
+      enabled: 0
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fab0de2bb671d0a342ef5f940b546e208b076a97
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6e7c8cfeedae74eb3a562055e069e441
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h
new file mode 100644
index 0000000000000000000000000000000000000000..8edc8c14b4047f1206298b73b669745fb69d8c1a
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h
@@ -0,0 +1,11 @@
+#import "UADSMetaData.h"
+
+@interface UADSInAppPurchaseMetaData : UADSMetaData
+
+- (void)setProductId:(NSString *)productId;
+- (void)setPrice:(NSNumber *)price;
+- (void)setCurrency:(NSString *)currency;
+- (void)setReceiptPurchaseData:(NSString *)receiptPurchaseData;
+- (void)setSignature:(NSString *)signature;
+
+@end
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..98aa83910bcdbc6bdf707e1ff1699ee56a031d87
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7927683d1fc5848b5abfb54ebb1028ec
+timeCreated: 1493316657
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h
new file mode 100644
index 0000000000000000000000000000000000000000..1ed3c43109d16745f14544584a56f64151ee37a3
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h
@@ -0,0 +1,13 @@
+@interface UADSJsonStorage : NSObject
+
+@property (nonatomic, strong) NSMutableDictionary *storageContents;
+
+- (BOOL)set:(NSString *)key value:(id)value;
+- (id)getValueForKey:(NSString *)key;
+- (BOOL)deleteKey:(NSString *)key;
+- (NSArray *)getKeys:(NSString *)key recursive:(BOOL)recursive;
+- (void)clearData;
+- (BOOL)initData;
+- (BOOL)hasData;
+
+@end
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b923496bee51c11eabd49f210cf24fe128084d4
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 1322fd896bbb15bb6e335591b766ae62
+licenseType: Pro
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h
new file mode 100644
index 0000000000000000000000000000000000000000..5f49a285502769cb37a7d687e49b2dc5631448b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h
@@ -0,0 +1,9 @@
+#import "UADSMetaData.h"
+
+@interface UADSMediationMetaData : UADSMetaData
+
+- (void)setName:(NSString *)mediationNetworkName;
+- (void)setVersion:(NSString *)mediationSdkVersion;
+- (void)setOrdinal:(int)mediationOrdinal;
+
+@end
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cd75153c0effcd0a3229bf206229acfd3c27fab3
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b52e557db2c2b4eebb10444f1d582029
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h
new file mode 100644
index 0000000000000000000000000000000000000000..791d3138b769b15a146f5875f1b0095fcd4073af
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h
@@ -0,0 +1,12 @@
+
+
+@interface UADSMetaData : NSObject
+
+@property (nonatomic, strong) NSString *category;
+@property (nonatomic, strong) NSMutableDictionary *entries;
+
+- (instancetype)initWithCategory:(NSString *)category;
+- (void)set:(NSString *)key value:(id)value;
+- (void)commit;
+
+@end
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1710ad25ff9b6261b5b5d73a38ab8660ea64439c
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86c008322e7c647149878156c5b81940
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h
new file mode 100644
index 0000000000000000000000000000000000000000..5d0db483c1e0d9d9c3c7a38b5d4ffd86bb046971
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h
@@ -0,0 +1,7 @@
+#import "UADSMetaData.h"
+
+@interface UADSPlayerMetaData : UADSMetaData
+
+- (void)setServerId:(NSString *)serverId;
+
+@end
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..92fe5059872c245ffd5c7fe180ba8e5930b361a1
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 453f100e6bdae4dfd9e655927819dc85
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e1ccfda8f094954b785236d401aee3ad30406e4
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h
@@ -0,0 +1,255 @@
+#import <UIKit/UIKit.h>
+
+#import <UnityAds/UADSMediationMetaData.h>
+#import <UnityAds/UADSPlayerMetaData.h>
+
+/**
+ *  An enumerate that describes the state of `UnityAds` placements. 
+ *  @note All placement states, other than `kUnityAdsPlacementStateReady`, indicate that the placement is not currently ready to show ads.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsPlacementState) {
+    /**
+     *  A state that indicates that the placement is ready to show an ad. The `show:` selector can be called.
+     */
+    kUnityAdsPlacementStateReady,
+    /**
+     *  A state that indicates that no state is information is available.
+     *  @warning This state can that UnityAds is not initialized or that the placement is not correctly configured in the Unity Ads admin tool.
+     */
+    kUnityAdsPlacementStateNotAvailable,
+    /**
+     *  A state that indicates that the placement is currently disabled. The placement can be enabled in the Unity Ads admin tools.
+     */
+    kUnityAdsPlacementStateDisabled,
+    /**
+     *  A state that indicates that the placement is not currently ready, but will be in the future.
+     *  @note This state most likely indicates that the ad content is currently caching.
+     */
+    kUnityAdsPlacementStateWaiting,
+    /**
+     *  A state that indicates that the placement is properly configured, but there are currently no ads available for the placement.
+     */
+    kUnityAdsPlacementStateNoFill
+};
+
+/**
+ *  An enumeration for the completion state of an ad.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsFinishState) {
+    /**
+     *  A state that indicates that the ad did not successfully display.
+     */
+    kUnityAdsFinishStateError,
+    /**
+     *  A state that indicates that the user skipped the ad.
+     */
+    kUnityAdsFinishStateSkipped,
+    /**
+     *  A state that indicates that the ad was played entirely.
+     */
+    kUnityAdsFinishStateCompleted
+};
+
+/**
+ *  An enumeration for the various errors that can be emitted through the `UnityAdsDelegate` `unityAdsDidError:withMessage:` method.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsError) {
+    /**
+     *  An error that indicates failure due to `UnityAds` currently being uninitialized.
+     */
+    kUnityAdsErrorNotInitialized = 0,
+    /**
+     *  An error that indicates failure due to a failure in the initialization process.
+     */
+    kUnityAdsErrorInitializedFailed,
+    /**
+     *  An error that indicates failure due to attempting to initialize `UnityAds` with invalid parameters.
+     */
+    kUnityAdsErrorInvalidArgument,
+    /**
+     *  An error that indicates failure of the video player.
+     */
+    kUnityAdsErrorVideoPlayerError,
+    /**
+     *  An error that indicates failure due to having attempted to initialize the `UnityAds` class in an invalid environment.
+     */
+    kUnityAdsErrorInitSanityCheckFail,
+    /**
+     *  An error that indicates failure due to the presence of an ad blocker.
+     */
+    kUnityAdsErrorAdBlockerDetected,
+    /**
+     *  An error that indicates failure due to inability to read or write a file.
+     */
+    kUnityAdsErrorFileIoError,
+    /**
+     *  An error that indicates failure due to a bad device identifier.
+     */
+    kUnityAdsErrorDeviceIdError,
+    /**
+     *  An error that indicates a failure when attempting to show an ad.
+     */
+    kUnityAdsErrorShowError,
+    /**
+     *  An error that indicates an internal failure in `UnityAds`.
+     */
+    kUnityAdsErrorInternalError,
+};
+
+/**
+ *  The `UnityAdsDelegate` protocol defines the required methods for receiving messages from UnityAds.
+ *  Must be implemented by the hosting app.
+ *  The unityAdsReady: method is called when it's possible to show an ad.
+ *  All other methods are used to provide notifications of events of the ad lifecycle.
+ *  @note On initialization, there are ready (or error) callbacks for each placement attached to the game identifier.
+ */
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsDelegate <NSObject>
+/**
+ *  Called when `UnityAds` is ready to show an ad. After this callback you can call the `UnityAds` `show:` method for this placement.
+ *  Note that sometimes placement might no longer be ready due to exceptional reasons. These situations will give no new callbacks.
+ *
+ *  @warning To avoid error situations, it is always best to check `isReady` method status before calling show.
+ *  @param placementId The ID of the placement that is ready to show, as defined in Unity Ads admin tools.
+ */
+- (void)unityAdsReady:(NSString *)placementId;
+/**
+ *  Called when `UnityAds` encounters an error. All errors will be logged but this method can be used as an additional debugging aid. This callback can also be used for collecting statistics from different error scenarios.
+ *
+ *  @param error   A `UnityAdsError` error enum value indicating the type of error encountered.
+ *  @param message A human readable string indicating the type of error encountered.
+ */
+- (void)unityAdsDidError:(UnityAdsError)error withMessage:(NSString *)message;
+/**
+ *  Called on a successful start of advertisement after calling the `UnityAds` `show:` method.
+ *  
+ * @warning If there are errors in starting the advertisement, this method may never be called. Unity Ads will directly call `unityAdsDidFinish:withFinishState:` with error status.
+ *
+ *  @param placementId The ID of the placement that has started, as defined in Unity Ads admin tools.
+ */
+- (void)unityAdsDidStart:(NSString *)placementId;
+/**
+ *  Called after the ad has closed.
+ *
+ *  @param placementId The ID of the placement that has finished, as defined in Unity Ads admin tools.
+ *  @param state       An enum value indicating the finish state of the ad. Possible values are `Completed`, `Skipped`, and `Error`.
+ */
+- (void)unityAdsDidFinish:(NSString *)placementId
+          withFinishState:(UnityAdsFinishState)state;
+@end
+
+/**
+ * `UnityAds` is a static class with methods for preparing and showing ads.
+ *
+ * @warning In order to ensure expected behaviour, the delegate must always be set.
+ */
+
+@interface UnityAds : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)initialize NS_UNAVAILABLE;
+
+/**
+ *  Initializes UnityAds. UnityAds should be initialized when app starts.
+ *
+ *  @param gameId   Unique identifier for a game, given by Unity Ads admin tools or Unity editor.
+ *  @param delegate delegate for UnityAdsDelegate callbacks
+ */
++ (void)initialize:(NSString *)gameId
+          delegate:(nullable id<UnityAdsDelegate>)delegate;
+/**
+ *  Initializes UnityAds. UnityAds should be initialized when app starts.
+ *
+ *  @param gameId   Unique identifier for a game, given by Unity Ads admin tools or Unity editor.
+ *  @param delegate delegate for UnityAdsDelegate callbacks
+ *  @param testMode Set this flag to `YES` to indicate test mode and show only test ads.
+ */
++ (void)initialize:(NSString *)gameId
+          delegate:(nullable id<UnityAdsDelegate>)delegate
+          testMode:(BOOL)testMode;
+/**
+ *  Show an ad using the defaul placement.
+ *
+ *  @param viewController The `UIViewController` that is to present the ad view controller.
+ */
++ (void)show:(UIViewController *)viewController;
+/**
+ *  Show an ad using the provided placement ID.
+ *
+ *  @param viewController The `UIViewController` that is to present the ad view controller.
+ *  @param placementId    The placement ID, as defined in Unity Ads admin tools.
+ */
++ (void)show:(UIViewController *)viewController placementId:(NSString *)placementId;
+/**
+ *  Provides the currently assigned `UnityAdsDelegate`.
+ *
+ *  @return The current `UnityAdsDelegate`.
+ */
++ (id<UnityAdsDelegate>)getDelegate;
+/**
+ *  Allows the delegate to be reassigned after UnityAds has already been initialized.
+ *
+ *  @param delegate The new `UnityAdsDelegate' for UnityAds to send callbacks to.
+ */
++ (void)setDelegate:(id<UnityAdsDelegate>)delegate;
+/**
+ *  Get the current debug status of `UnityAds`.
+ *
+ *  @return If `YES`, `UnityAds` will provide verbose logs.
+ */
++ (BOOL)getDebugMode;
+/**
+ *  Set the logging verbosity of `UnityAds`. Debug mode indicates verbose logging.
+ *  @warning Does not relate to test mode for ad content.
+ *  @param enableDebugMode `YES` for verbose logging.
+ */
++ (void)setDebugMode:(BOOL)enableDebugMode;
+/**
+ *  Check to see if the current device supports using Unity Ads.
+ *
+ *  @return If `NO`, the current device cannot initialize `UnityAds` or show ads.
+ */
++ (BOOL)isSupported;
+/**
+ *  Check if the default placement is ready to show an ad.
+ *
+ *  @return If `YES`, the default placement is ready to show an ad.
+ */
++ (BOOL)isReady;
+/**
+ *  Check if a particular placement is ready to show an ad.
+ *
+ *  @param placementId The placement ID being checked.
+ *
+ *  @return If `YES`, the placement is ready to show an ad.
+ */
++ (BOOL)isReady:(NSString *)placementId;
+/**
+ *  Check the current state of the default placement.
+ *
+ *  @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors.
+ */
++ (UnityAdsPlacementState)getPlacementState;
+/**
+ *  Check the current state of a placement.
+ *
+ *  @param placementId The placement ID, as defined in Unity Ads admin tools.
+ *
+ *  @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors.
+ */
++ (UnityAdsPlacementState)getPlacementState:(NSString *)placementId;
+/**
+ *  Check the version of this `UnityAds` SDK
+ *
+ *  @return String representing the current version name.
+ */
++ (NSString *)getVersion;
+/**
+ *  Check that `UnityAds` has been initialized. This might be useful for debugging initialization problems.
+ *
+ *  @return If `YES`, Unity Ads has been successfully initialized.
+ */
++ (BOOL)isInitialized;
+
+@end
+NS_ASSUME_NONNULL_END
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e4b7c0bcb1fabb1cf382c22cdf9977ec9ebd584a
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c99bfe4fc4e5c4dc3917c14075acd117
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h
new file mode 100644
index 0000000000000000000000000000000000000000..1435037bf597647a2d6f78d9e473346ea214c2d5
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h
@@ -0,0 +1,21 @@
+#import "UnityAds.h"
+
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsExtendedDelegate <UnityAdsDelegate>
+/**
+ *  Called when a click event happens.
+ *
+ *  @param placementId The ID of the placement that was clicked.
+ */
+- (void)unityAdsDidClick:(NSString *)placementId;
+
+/**
+ *  Called when a placement changes state.
+ *
+ *  @param placementId The ID of the placement that changed state.
+ *  @param oldState The state before the change.
+ *  @param newState The state after the change.
+ */
+- (void)unityAdsPlacementStateChanged:(NSString *)placementId oldState:(UnityAdsPlacementState)oldState newState:(UnityAdsPlacementState)newState;
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9840de15e336edd75fdca8fa2e7456cca0833c08
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a6842a74831964edc8fefa1c0aed89dc
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..0fa6e3629ad49bf015235d920a0a88752f9ddaea
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h
@@ -0,0 +1,11 @@
+#import "UnityAds.h"
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsUnityDelegate <UnityAdsDelegate>
+/**
+ *  Called when an in-app purchase is initiated from an ad.
+ *
+ *  @param eventString The string provided via the ad.
+ */
+- (void)unityAdsDidInitiatePurchase:(NSString *)eventString;
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h.meta
new file mode 100644
index 0000000000000000000000000000000000000000..19ec6df7713c4774cdccebcab05c10ce1b16fc07
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ce4395ccdb12cf62fca756358be1a892
+licenseType: Pro
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist
new file mode 100644
index 0000000000000000000000000000000000000000..31b037972a95a6e83c078b3576f73a88f39ef4d5
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e4e0148d4fa505b32a914074f1f7a08245010b47
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cc1b50b5501f748da8bec762294d9136
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6ba1dcb95b4647ded13b2445a5f1caa79940a7ff
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3cebe1a96232b44388b30b2f72dde434
+folderAsset: yes
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap
new file mode 100644
index 0000000000000000000000000000000000000000..9b448d572a217f83ff4b11232a20f9ee3e0d37f0
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap
@@ -0,0 +1,7 @@
+framework module UnityAds {
+  umbrella header "UnityAds.h"
+  header "UnityAdsExtended.h"
+
+  export *
+  module * { export * }
+}
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap.meta
new file mode 100644
index 0000000000000000000000000000000000000000..13ea2e99741341f5d4a8a0386796067639a4197a
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c5ba7626a737840ff88a3bd84b100482
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds
new file mode 100644
index 0000000000000000000000000000000000000000..53184164d6c7096455e2d0f93a90ebbfd17f3539
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a311b834dc9e7fc1bc28eb5741b12abe86a910a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d1c1a2d988f5148fd9ab17b2460d271e
+timeCreated: 1491258705
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll
new file mode 100644
index 0000000000000000000000000000000000000000..77409dde77edb607d36316488e4ce53580faa89d
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..7ee35e88a339e5a67b16c6623b244a5ee93b3547
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad74189ac9e46674bc3d998d6e19d255133c0199
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6597c6ea86d36477081342001145d8d9
+timeCreated: 1492551631
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.meta b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ede66537aecee40090a969f2ca20f8a1891403e4
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.meta
@@ -0,0 +1,25 @@
+fileFormatVersion: 2
+guid: a342381d77833427fa10621e38fbae10
+timeCreated: 1491945648
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    Editor:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+    WindowsStoreApps:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+    data:
+      enabled: 0
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/License.md b/Library/PackageCache/com.unity.ads@2.0.8/License.md
new file mode 100644
index 0000000000000000000000000000000000000000..27c17ac40d9d229c9ba20d9aafa47f6c8cc820d7
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/License.md
@@ -0,0 +1,32 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*. 
+
+    3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+    3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. 
+
+    3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. 
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
+
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/License.md.meta b/Library/PackageCache/com.unity.ads@2.0.8/License.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..308e13bcf92e9c47776162e43e5395909b5d8113
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/License.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4c6fe94acbb24417c988bab18cbd5209
+timeCreated: 1504642506
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/README.md b/Library/PackageCache/com.unity.ads@2.0.8/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ed6019f5bee2149f3d669c19bf425905732ef5e
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/README.md
@@ -0,0 +1,4 @@
+# Unity Ads
+
+Implementation of the Unity Ads API.
+
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/README.md.meta b/Library/PackageCache/com.unity.ads@2.0.8/README.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..26e726c9a915e477bd1f4a1d7386ae5724dedd92
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/README.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 62772aad98ed04f0d955b7d20de61f7f
+timeCreated: 1493316656
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e9486522b9f55d9d6bc3cb853b9d883f9d2d41d7
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..5ec8e50daa5eb70e85dab065903cc5e7d9df91f7
Binary files /dev/null and b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb.meta b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..172110a84278afe5e4fcbaa440ab397c9927d8a6
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5e57a6c62c1ec47d0bceb70495845164
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.meta b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..823a117dfe843925a751d3f121535c7bbe470cbe
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.meta
@@ -0,0 +1,121 @@
+fileFormatVersion: 2
+guid: 3b07d432cba2a4c4f8a2fdea984620b8
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 0
+        Exclude Editor: 0
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXIntel: 1
+        Exclude OSXIntel64: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+        Exclude iOS: 0
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Standalone: LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXIntel
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: OSXIntel64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings:
+        CompileFlags: 
+        FrameworkDependencies: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/package.json b/Library/PackageCache/com.unity.ads@2.0.8/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..881daf2caeb44320242e5fe2af1634bfaad53064
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/package.json
@@ -0,0 +1,17 @@
+{
+    "category": "AssetStore/Unity", 
+    "description": "Unity Ads is a video ad network for iOS and Android that allows you to quickly and effectively monetize your games.", 
+    "gitHead": "0d2114387a99011be685886f8ea902242e323e70", 
+    "keywords": [
+        "ads", 
+        "unity"
+    ], 
+    "name": "com.unity.ads", 
+    "repoPackagePath": "build/install/com.unity.ads", 
+    "repository": {
+        "type": "git", 
+        "url": "ssh://git@github.com/Unity-Technologies/com.unity.ads.git"
+    }, 
+    "unity": "2017.4", 
+    "version": "2.0.8"
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.ads@2.0.8/package.json.meta b/Library/PackageCache/com.unity.ads@2.0.8/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..38201ff4e0ab470043c74a0fcb732d49920dd3b0
--- /dev/null
+++ b/Library/PackageCache/com.unity.ads@2.0.8/package.json.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dced8f6ea9f964e8e8e61574ea889d21
+timeCreated: 1491258710
+licenseType: Pro
+TextScriptImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents.meta b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents.meta
new file mode 100644
index 0000000000000000000000000000000000000000..19ce641febba5113a291be9d59b1049d2c8644b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 96e1a81adb349464a97ebed166911b0e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..9aa8885a7066421d812a910990788599df4ed430
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef
@@ -0,0 +1,3 @@
+{
+	"name": "Analytics"
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef.meta b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d571d31d5b6703f6e710eb03d2d1a2d1a338318b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Analytics.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9811a7ba202944de58374f6369b5bceb
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b8e7ea791e2a61daf289a0ba6ce50b93b10d0e47
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..417e4866c2b56bd00388eba732569922d50c9cfc
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb.meta b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..09cc79323300544c13619fff1108f3de871effea
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.mdb.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 36e8bb3feb5e6402185947b817a6ed8d
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.meta b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4dab83aa28ff3b3560a397903834a9d82fb91231
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/AnalyticsStandardEvents/Unity.Analytics.StandardEvents.dll.meta
@@ -0,0 +1,46 @@
+fileFormatVersion: 2
+guid: dce91326f102345f3ba2f0987c0679c2
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude N3DS: 1
+        Exclude PS4: 1
+        Exclude PSP2: 1
+        Exclude Switch: 1
+        Exclude WiiU: 1
+        Exclude XboxOne: 1
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md b/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..d0abbebf233078be400287ca68f4cab52218af9c
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md
@@ -0,0 +1,60 @@
+## [3.2.3] - 2019-10-29
+- Add a fix for the deprecated API build time warning on webgl platform while using Data Privacy service.
+
+## [3.2.2] - 2018-11-02
+- Removed FetchOptOutStatus and Initialize call. All application of opt out
+  status will be handled by the engine. The Analytics/Data Privacy package still
+  provides FetchPrivacyUrl to provide a URL from which to opt out.
+
+## [3.2.1] - 2018-10-25
+- Move editor and playmode tests to be packed within the package.
+
+## [3.2.0] - 2018-10-11
+- Prevent double-registration of standard events.
+- Fixed build error on platforms that don't support analytics.
+- Update package docs so they can be built and published and be accessible from
+  the Package Manager UI.
+- Fixed a crash occurring on iOS device when the device has cellular capability
+  but was never configured with any carrier service.
+- Fixed an android build failure occurring due to conflicting install referrer
+  AIDL files.
+
+## [3.1.1] - 2018-08-21
+- Add DataPrivacy plugin into package.
+- Fixed an issue where Android project build would fail when proguard is enabled
+  in publishing settings.
+- Fixed an issue where iOS product archive would fail because bitcode was not
+  enabled.
+
+## [3.0.9] - 2018-07-31
+- Fixing issue with NullReferenceException during editor playmode
+
+## [3.0.8] - 2018-07-26
+- Fixing linking issue when building Android il2cpp
+
+## [3.0.7] - 2018-07-10
+- Adding in continuous events for signal strength, battery level, battery
+  temperature, memory usage, available storage
+
+## [3.0.6] - 2018-06-01
+- Reorganizing platformInfo event around session start/resume/pause
+
+## [3.0.5] - 2018-05-29
+- Fixing cellular signal strength incorrect array format
+
+## [3.0.4] - 2018-05-04
+- Breaking change to only work with 2018.2 (change name of whitelisted dll's in
+  engine to conform to PackageManager standard)
+- Changed name of old Analytics dll to the Unity.Analytics.Tracker.dll and
+  replaced the old one with the new platform information package.
+- Changed naming convention of dlls to the PackageManager Standard:
+  Unity.Analytics.dll, Unity.Analytics.Editor.dll, Unity.Analytics.Tracker.dll,
+  Unity.Analytics.StandardEvents.dll.
+- Deprecated old Analytics tracker and removed it from the add component menu.
+- Merged Standardevents package into Analytics package.
+
+## [2.0.14] - 2018-02-08
+- Added proper documentation and better description text.
+
+## [2.0.5] -
+- Update analytics tracker to 2.0 (1.0 version is still available)
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md.meta b/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..80fcec7f2890a255f2a28ce0294117f6f59eafb4
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/CHANGELOG.md.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: bcd27da1c9ae94d2cafe094482a20792
+timeCreated: 1511216857
+licenseType: Pro
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy.meta
new file mode 100644
index 0000000000000000000000000000000000000000..80f7551f382c05afdb8f5b20a7693f4d884faedf
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8aafd27f78c12564281bac0d0067df8d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a97f27472ef79a2b728e1efe1f428e367e05fa20
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.Tests")]
+[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.WebRequest.Tests")]
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bee8db4f67e8b971bd53cda98513e5407d248912
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/AssemblyInfo.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7aad9e80c95b4991a1f4d017c8caf386
+timeCreated: 1526477558
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f48eb13130115a6b768e2bc1e27b57fc7a07402b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs
@@ -0,0 +1,132 @@
+#if ENABLE_CLOUD_SERVICES_ANALYTICS
+using System;
+using System.Text;
+using UnityEngine.Networking;
+
+namespace UnityEngine.Analytics
+{
+    public class DataPrivacy
+    {
+        [Serializable]
+        internal struct UserPostData
+        {
+            public string appid;
+            public string userid;
+            public long sessionid;
+            public string platform;
+            public UInt32 platformid;
+            public string sdk_ver;
+            public bool debug_device;
+            public string deviceid;
+            public string plugin_ver;
+        }
+
+        [Serializable]
+        internal struct TokenData
+        {
+            public string url;
+            public string token;
+        }
+
+        const string kVersion = "3.0.0";
+        const string kVersionString = "DataPrivacyPackage/" + kVersion;
+
+        internal const string kBaseUrl = "https://data-optout-service.uca.cloud.unity3d.com";
+        const string kTokenUrl = kBaseUrl + "/token";
+
+        internal static UserPostData GetUserData()
+        {
+            var postData = new UserPostData
+            {
+                appid = Application.cloudProjectId,
+                userid = AnalyticsSessionInfo.userId,
+                sessionid = AnalyticsSessionInfo.sessionId,
+                platform = Application.platform.ToString(),
+                platformid = (UInt32)Application.platform,
+                sdk_ver = Application.unityVersion,
+                debug_device = Debug.isDebugBuild,
+                deviceid = SystemInfo.deviceUniqueIdentifier,
+                plugin_ver = kVersionString
+            };
+
+            return postData;
+        }
+
+        static string GetUserAgent()
+        {
+            var message = "UnityPlayer/{0} ({1}/{2}{3} {4})";
+            return String.Format(message,
+                Application.unityVersion,
+                Application.platform.ToString(),
+                (UInt32)Application.platform,
+                Debug.isDebugBuild ? "-dev" : "",
+                kVersionString);
+        }
+
+        static String getErrorString(UnityWebRequest www)
+        {
+            var json = www.downloadHandler.text;
+            var error = www.error;
+            if (String.IsNullOrEmpty(error))
+            {
+                // 5.5 sometimes fails to parse an error response, and the only clue will be
+                // in www.responseHeadersString, which isn't accessible.
+                error = "Empty response";
+            }
+
+            if (!String.IsNullOrEmpty(json))
+            {
+                error += ": " + json;
+            }
+
+            return error;
+        }
+
+        public static void FetchPrivacyUrl(Action<string> success, Action<string> failure = null)
+        {
+            string postJson = JsonUtility.ToJson(GetUserData());
+            byte[] bytes = Encoding.UTF8.GetBytes(postJson);
+            var uploadHandler = new UploadHandlerRaw(bytes);
+            uploadHandler.contentType = "application/json";
+
+            var www = UnityWebRequest.Post(kTokenUrl, "");
+            www.uploadHandler = uploadHandler;
+#if !UNITY_WEBGL
+            www.SetRequestHeader("User-Agent", GetUserAgent());
+#endif
+            var async = www.SendWebRequest();
+
+            async.completed += (AsyncOperation async2) =>
+                {
+                    var json = www.downloadHandler.text;
+                    if (!String.IsNullOrEmpty(www.error) || String.IsNullOrEmpty(json))
+                    {
+                        var error = getErrorString(www);
+                        if (failure != null)
+                        {
+                            failure(error);
+                        }
+                    }
+                    else
+                    {
+                        TokenData tokenData;
+                        tokenData.url = ""; // Just to quell "possibly unassigned" error
+                        try
+                        {
+                            tokenData = JsonUtility.FromJson<TokenData>(json);
+                        }
+                        catch (Exception e)
+                        {
+                            if (failure != null)
+                            {
+                                failure(e.ToString());
+                            }
+                        }
+
+                        success(tokenData.url);
+                    }
+                };
+        }
+    }
+}
+#endif //ENABLE_CLOUD_SERVICES_ANALYTICS
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0559a4b04227a54947b07b21f392c67047136e5f
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacy.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bff25ea4cf0d3d841b6787b9f649f21b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b69c7228a9f1db79400d9b30605f96afa86d83dc
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs
@@ -0,0 +1,57 @@
+#if ENABLE_CLOUD_SERVICES_ANALYTICS
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine.UI;
+
+namespace UnityEngine.Analytics
+{
+    public class DataPrivacyButton : Button
+    {
+#if UNITY_WEBGL && !UNITY_EDITOR
+        [DllImport("__Internal")]
+        private static extern void OpenNewWindow(string url);
+#endif
+        bool urlOpened = false;
+
+        DataPrivacyButton()
+        {
+            onClick.AddListener(OpenDataPrivacyUrl);
+        }
+
+        void OnFailure(string reason)
+        {
+            interactable = true;
+            Debug.LogWarning(String.Format("Failed to get data privacy url: {0}", reason));
+        }
+
+        void OpenUrl(string url)
+        {
+            interactable = true;
+            urlOpened = true;
+
+        #if UNITY_WEBGL && !UNITY_EDITOR
+            OpenNewWindow(url);
+        #else
+            Application.OpenURL(url);
+        #endif
+        }
+
+        void OpenDataPrivacyUrl()
+        {
+            interactable = false;
+            DataPrivacy.FetchPrivacyUrl(OpenUrl, OnFailure);
+        }
+
+        void OnApplicationFocus(bool hasFocus)
+        {
+            if (hasFocus && urlOpened)
+            {
+                urlOpened = false;
+                // Immediately refresh the remote config so new privacy settings can be enabled
+                // as soon as possible if they have changed.
+                RemoteSettings.ForceUpdate();
+            }
+        }
+    }
+}
+#endif //ENABLE_CLOUD_SERVICES_ANALYTICS
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..444ade1e6dadd4404acac98250819691796c0033
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a5ebb11c6fc3a2f498bd89593f7744aa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab
new file mode 100644
index 0000000000000000000000000000000000000000..53543550f814358b2b173d49926721c8aef20968
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab
@@ -0,0 +1,246 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &109074
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22409074}
+  - 222: {fileID: 22209074}
+  - 114: {fileID: 11409072}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &109076
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22409076}
+  - 222: {fileID: 22209076}
+  - 114: {fileID: 11409074}
+  - 114: {fileID: 11409076}
+  m_Layer: 5
+  m_Name: DataPrivacyButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &109078
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22409078}
+  - 222: {fileID: 22209078}
+  - 114: {fileID: 11409078}
+  m_Layer: 0
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11409072
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109074}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1}
+  m_Sprite: {fileID: 21300000, guid: 599a5fd92bab81a4ab02e52d0b1b1c60, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11409074
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109076}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11409076
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109076}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: a5ebb11c6fc3a2f498bd89593f7744aa, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+    m_ColorMultiplier: 1
+    m_FadeDuration: .100000001
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11409074}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11409078
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109078}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1}
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Open Data Privacy Page
+--- !u!222 &22209074
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109074}
+--- !u!222 &22209076
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109076}
+--- !u!222 &22209078
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109078}
+--- !u!224 &22409074
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109074}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22409076}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 1, y: .5}
+  m_AnchorMax: {x: 1, y: .5}
+  m_AnchoredPosition: {x: -8, y: 0}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 1, y: .5}
+--- !u!224 &22409076
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109076}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22409078}
+  - {fileID: 22409074}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_AnchorMin: {x: .5, y: .5}
+  m_AnchorMax: {x: .5, y: .5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 200, y: 30}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22409078
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109078}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22409076}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: .850000024, y: 1}
+  m_AnchoredPosition: {x: 8, y: 0}
+  m_SizeDelta: {x: -12, y: 0}
+  m_Pivot: {x: 0, y: .5}
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 109076}
+  m_IsPrefabParent: 1
+  m_IsExploded: 1
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4eaf22f2b7bbdcca44b510df4f01e680ecc7af4e
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyButton.prefab.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 71b11355001648444b41d17fd36c150d
+NativeFormatImporter:
+  userData: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..564b374b0cce88e07e0f305242aae50b82fff218
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..12cb067b05ef249f4da33da46243eea8e8bbaa5d
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/DataPrivacyIcon.png.meta
@@ -0,0 +1,94 @@
+fileFormatVersion: 2
+guid: 599a5fd92bab81a4ab02e52d0b1b1c60
+TextureImporter:
+  internalIDToNameTable:
+  - first:
+      6642: 664227380
+    second: ImportLogs
+  externalObjects: {}
+  serializedVersion: 10
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 256
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: 16
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 256
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..ee1346b81f70ad4a93170a90d0ab25d6c3f80d63
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef
@@ -0,0 +1,12 @@
+{
+    "name": "Unity.Analytics.DataPrivacy",
+    "references": [],
+    "optionalUnityReferences": [],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef.meta b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..787823b6d07c46fa2481123e8d0678d52b33a9c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0fda7ebe61ab2164383d10e32efb9c6e
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Documentation~/analytics.md b/Library/PackageCache/com.unity.analytics@3.2.3/Documentation~/analytics.md
new file mode 100644
index 0000000000000000000000000000000000000000..21782ac38bcd9a8b842268fef50552cebb8178f4
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Documentation~/analytics.md
@@ -0,0 +1,51 @@
+# About the Analytics Package
+
+This Analytics package supports the following Unity Analytics features:
+
+* [Standard Events](https://docs.unity3d.com/Manual/UnityAnalyticsStandardEvents.html)
+* [Analytics Event Tracker](https://docs.unity3d.com/Manual/class-AnalyticsEventTracker.html)
+* [Unity Analytics Data Privacy Plug-in](https://docs.unity3d.com/Manual/UnityAnalyticsDataPrivacy.html)
+
+For instructions on using the features in the Analytics package, refer to the [Analytics section of
+the Unity Manual](https://docs.unity3d.com/Manual/UnityAnalytics.html).
+
+The package is supported by Unity 2018.3+ and includes functionality previously included in
+earlier Unity Asset Store and Package Manager packages. When upgrading existing projects to
+2018.3 or later, older, redundant packages should be removed from the project.
+
+
+## Installing the Analytics Package
+
+The Analytics package is built into the Unity Editor and enabled automatically. Use the Unity
+Package Manager (menu: **Window** > **Package Manager**) to disable or enable the package.
+The Analytics package is listed under the built-in packages.
+
+
+<a name="UsingAnalytics"></a>
+## Using the Analytics Package
+
+For instructions on using the features in the Analytics package, refer to the Unity Manual:
+
+* [Standard Events](https://docs.unity3d.com/Manual/UnityAnalyticsStandardEvents.html)
+* [Analytics Event Tracker](https://docs.unity3d.com/Manual/class-AnalyticsEventTracker.html)
+* [Unity Analytics Data Privacy Plug-in](https://docs.unity3d.com/Manual/UnityAnalyticsDataPrivacy.html)
+
+
+## Package contents
+
+The following table indicates the major classes, components, and files included in the Analytics package:
+
+|Item|Description|
+|---|---|
+|[`AnalyticsEvent` class](https://docs.unity3d.com/2018.3/Documentation/ScriptReference/Analytics.AnalyticsEvent.html) | The primary class for sending Standard and Custom analytics events to the Unity Analytics service.|
+|[Analytics Event Tracker component](https://docs.unity3d.com/Manual/class-AnalyticsEventTracker.html) | A Unity component that you can use to send Standard and Custom analytics events (without writing code).|
+|[DataPrivacy class](https://docs.unity3d.com/Manual/UnityAnalyticsDataPrivacyAPI.html)| A utility class that helps applications using Unity Analytics comply with the EU General Data Protection Regulation (GDPR).|
+|`Packages/Analytics Library/DataPrivacy/DataPrivacyButton`| A Prefab GameObject you can use when building a user interface to allow players to opt out of Analytics data collection.|
+|`Packages/Analytics Library/DataPrivacy/DataPrivacyIcon`| An icon graphic you can use when creating your own opt-out button or control.|
+
+
+## Document revision history
+
+|Date|Reason|
+|---|---|
+|October 5, 2018|Document created. Matches package version 3.2.0.|
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d29d133a789c957ab9c9cf150d8608d3c22b47ee
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7fd5e77e7e7ea4eea8198138cd9cc814
+folderAsset: yes
+timeCreated: 1491256195
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..23763936e1b15c7a40e628106cc314a22e3fb75a
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..124e6e949f212f0f7f532c861627f5615e5812d5
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/AnalyticsEventTracker icon.png.meta	
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 5e7c9ab97e5884e4eaa5967e9024f39d
+timeCreated: 1492409422
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ebb2d76a02c32ae4c6def9edd7a58a4e35f2a1e2
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..b34952639ee0f2796a94c01bae9644c4f6084d4c
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3acc6079845a544bebe3c4e06f678fa059b602da
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.mdb.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fec197bad419341558f81f2ec8a05e18
+timeCreated: 1491256222
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..66af373061d60cd6b97a563468deb453657f12c3
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Editor.dll.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 224ede67b4f3a4109bfec4d5cb161b05
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 1
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 1
+        Exclude Editor: 0
+        Exclude Linux: 1
+        Exclude Linux64: 1
+        Exclude LinuxUniversal: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+        Exclude iOS: 1
+  - first:
+      '': first
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        CPU: ARMv7
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Facebook: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Facebook: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 0
+      settings:
+        AddToEmbeddedBinaries: false
+        CompileFlags: 
+        FrameworkDependencies: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll
new file mode 100644
index 0000000000000000000000000000000000000000..21975ccfe38402c56b348058424376873435bd29
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..222bb048cb2ee427a02c9dca1b0637f3071f541c
Binary files /dev/null and b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5b0f4d17229f10c5f651c6e1a824381dc6cc8429
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.mdb.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d607a67dc772b484da060e66a3d61a4e
+timeCreated: 1491256195
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0136db15b8617b20041f0262edd088ea492aa855
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Editor/Unity.Analytics.Tracker.dll.meta
@@ -0,0 +1,46 @@
+fileFormatVersion: 2
+guid: 220224b43fc464c28bc0e8de8f54a432
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      '': Any
+    second:
+      enabled: 0
+      settings:
+        Exclude N3DS: 1
+        Exclude PS4: 1
+        Exclude PSP2: 1
+        Exclude Switch: 1
+        Exclude WiiU: 1
+        Exclude XboxOne: 1
+  - first:
+      Any: 
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/License.md b/Library/PackageCache/com.unity.analytics@3.2.3/License.md
new file mode 100644
index 0000000000000000000000000000000000000000..21eda1d1cab764a4ab662373f2e55260bc12b3a9
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/License.md
@@ -0,0 +1,32 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2018 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*. 
+
+    3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+    3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. 
+
+    3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. 
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
+
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/License.md.meta b/Library/PackageCache/com.unity.analytics@3.2.3/License.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..51c396874b7d6086f9ec3a13470f23626a4979c6
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/License.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 15bf9c691b85b41a39c18bee2f87e21b
+timeCreated: 1504642560
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Plugins.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7cd48d4296a2cc73a78ebb03c705ce8aef9227d2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 71e1652fdff664f9bb0ae9e0327b0d90
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib
new file mode 100644
index 0000000000000000000000000000000000000000..859b69ab61a82bcfb18a6923385bfa0c415a7e98
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib
@@ -0,0 +1,5 @@
+mergeInto(LibraryManager.library, {
+  OpenNewWindow: function (str) {
+    window.open(str);
+  }
+});
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2f0443f73b0a5631377686944d640d3300f74602
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Plugins/WindowUtil.jslib.meta
@@ -0,0 +1,37 @@
+fileFormatVersion: 2
+guid: 9c28ac06b3e4042b49dd5e1471a4c81a
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 1
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Facebook: WebGL
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      WebGL: WebGL
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/README.md b/Library/PackageCache/com.unity.analytics@3.2.3/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d6fd499e087fb25368cc5265aa9c4fcfc25fea6
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/README.md
@@ -0,0 +1,14 @@
+Unity Analytics: Tracker
+------------------------------
+Please visit the following URL to see documentation for the Analytics Event Tracker.
+
+https://docs.google.com/document/d/1glh4zEk0KQ_FhOgk95H-VOubcdzrVGyu5BYCmhFQCh0/edit#
+
+Please note, the documentation at this URL is considered a "living" document and subject to change.
+
+
+Unity Analytics: Standard Events
+------------------------------
+Track player behavior specific to your game
+
+Standard Events are a set of curated custom events focused on player experience.
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/README.md.meta b/Library/PackageCache/com.unity.analytics@3.2.3/README.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f874e1826c985a821f4fbd71ca9fc24b838c74f9
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/README.md.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 884f8f0e4025a420893d3a8d1d3063e1
+timeCreated: 1511217314
+licenseType: Pro
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8f14a0b99fcd66692de99230cbfe45df8ffb1463
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7a573b834e2608c4f982daf527bdb47a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/.tests.json b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/.tests.json
new file mode 100644
index 0000000000000000000000000000000000000000..327abb29e523ac0bf5338190d4ca6c9a765838bc
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/.tests.json
@@ -0,0 +1,3 @@
+{
+	"createSeparatePackage": false
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..64435dd99d02de9d086a86812ff0fd1f88158f4b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 931f3395378214a6c94333853bd0659b
+folderAsset: yes
+timeCreated: 1489179043
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f4c1af3e2dbc6ef89f91aa3ea537afa0100844b3
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs
@@ -0,0 +1,48 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AchievementStep_StepIndexTest(
+            [Values(-1, 0, 1)] int stepIndex
+            )
+        {
+            var achievementId = "unit_tester";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AchievementStep_AchievementIdTest(
+            [Values("unit_tester", "", null)] string achievementId
+            )
+        {
+            var stepIndex = 0;
+
+            if (string.IsNullOrEmpty(achievementId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void AchievementStep_CustomDataTest()
+        {
+            var stepIndex = 0;
+            var achievementId = "unit_tester";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9ca9a73499f39b6f45854541d54ae46fcf23d038
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementStepTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a592d27ead6884163839d4f8da3977ef
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4cb4c4bd3e4f31707f48435f56313216c5b95623
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AchievementUnlocked_AchievementIdTest(
+            [Values("unit_tester", "", null)] string achievementId
+            )
+        {
+            if (string.IsNullOrEmpty(achievementId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.AchievementUnlocked(achievementId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void AchievementUnlocked_CustomDataTest()
+        {
+            var achievementId = "unit_tester";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3d3f40e19e234264f2af434b9448709c83acb976
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AchievementUnlockedTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d1114812d620342e1a4ad3eaae7e220c
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5efd551afc1e09a1e834eed9214f8b79ba2c88d7
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AdComplete_RewardedTest(
+            [Values(true, false)] bool rewarded
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdComplete_NetworkStringTest(
+            [Values("unityads", "", null)] string network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdComplete_NetworkEnumTest(
+            [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdComplete_PlacementIdTest(
+            [Values("rewardedVideo", "", null)] string placementId
+            )
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdComplete_CustomDataTest()
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+            var placementId = "rewardedVideo";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eb1155c389aadc9c27f351a887d1e75f14e686bc
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdCompleteTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9405b416c158444b19157040fd664533
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c5dfedb4fb34e315d851dbb224d2815c5809d9ab
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AdOffer_RewardedTest(
+            [Values(true, false)] bool rewarded
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdOffer_NetworkStringTest(
+            [Values("unityads", "", null)] string network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdOffer_NetworkEnumTest(
+            [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdOffer_PlacementIdTest(
+            [Values("rewardedVideo", "", null)] string placementId
+            )
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdOffer_CustomDataTest()
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+            var placementId = "rewardedVideo";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f9845981447f38bcc4a2c93f74a2b7a0167518af
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdOfferTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 96626a3e271e94e76a848c68828fbbac
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8c554b6549121b5aeecaba38b453502888b97c31
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AdSkip_RewardedTest(
+            [Values(true, false)] bool rewarded
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdSkip_NetworkStringTest(
+            [Values("unityads", "", null)] string network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdSkip_NetworkEnumTest(
+            [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdSkip_PlacementIdTest(
+            [Values("rewardedVideo", "", null)] string placementId
+            )
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdSkip_CustomDataTest()
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+            var placementId = "rewardedVideo";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..186be883673bcf9eb09d3c442848d4caca640de4
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdSkipTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c09652e660b34484cb10d35ed2206df5
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ae104d8895750c7e35d1ab2ef6fda9547f7c420e
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void AdStart_RewardedTest(
+            [Values(true, false)] bool rewarded
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdStart_NetworkStringTest(
+            [Values("unityads", "", null)] string network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdStart_NetworkEnumTest(
+            [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdStart_PlacementIdTest(
+            [Values("rewardedVideo", "", null)] string placementId
+            )
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void AdStart_CustomDataTest()
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+            var placementId = "rewardedVideo";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..98f15871f821ba062bbca65cbf16b07ab9ca0e2b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AdStartTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 589b3ddef1e4d44cea68e0144bd95434
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e24c6919548e1afd7c1abad9ba7e4e5471a66f08
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs
@@ -0,0 +1,115 @@
+#pragma warning disable 0612, 0618
+
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    [TestFixture, Category("Standard Event SDK")]
+    public partial class AnalyticsEventTests
+    {
+        readonly Dictionary<string, object> m_CustomData = new Dictionary<string, object>();
+        AnalyticsResult m_Result = AnalyticsResult.Ok;
+
+        [SetUp]
+        public void TestCaseSetUp()
+        {
+            m_Result = AnalyticsResult.Ok;
+
+            m_CustomData.Clear();
+            m_CustomData.Add("custom_param", "test");
+        }
+
+        [Test]
+        public void SdkVersion_FormatTest()
+        {
+            int major, minor, patch;
+            var versions = AnalyticsEvent.sdkVersion.Split('.');
+
+            Assert.AreEqual(3, versions.Length, "Number of integer fields in version format");
+
+            Assert.IsTrue(int.TryParse(versions[0], out major), "Major version is an integer");
+            Assert.IsTrue(int.TryParse(versions[1], out minor), "Minor version is an integer");
+            Assert.IsTrue(int.TryParse(versions[2], out patch), "Patch version is an integer");
+
+            Assert.LessOrEqual(0, major, "Major version");
+            Assert.LessOrEqual(0, minor, "Minor version");
+            Assert.LessOrEqual(0, patch, "Patch version");
+        }
+
+        [Test]
+        public void Custom_EventNameTest(
+            [Values("custom_event", "", null)] string eventName
+            )
+        {
+            if (string.IsNullOrEmpty(eventName))
+            {
+                Assert.Throws<ArgumentException>(() => m_Result = AnalyticsEvent.Custom(eventName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void Custom_EventDataTest()
+        {
+            var eventName = "custom_event";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void Custom_RegisterUnregisterUnnamedTest()
+        {
+            Action<IDictionary<string, object>> myAction =
+                eventData => eventData.Add("my_key", "my_value");
+
+            AnalyticsEvent.Register(myAction); // Registering for a named AnalyticsEvent
+
+            var eventName = "custom_event";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData));
+
+            EvaluateRegisteredCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            AnalyticsEvent.Unregister(myAction);
+        }
+
+        /// Normal. Unregistered.
+        public static void EvaluateCustomData(IDictionary<string, object> customData)
+        {
+            Assert.AreEqual(1, customData.Count, "Custom param count");
+        }
+
+        /// For Registered case.
+        public static void EvaluateRegisteredCustomData(IDictionary<string, object> customData)
+        {
+            Assert.AreEqual(2, customData.Count, "Custom param count");
+        }
+
+        public static void EvaluateAnalyticsResult(AnalyticsResult result)
+        {
+            switch (result)
+            {
+                case AnalyticsResult.Ok:
+                    break;
+                case AnalyticsResult.InvalidData:
+                    Assert.Fail("Event data is invalid.");
+                    break;
+                case AnalyticsResult.TooManyItems:
+                    Assert.Fail("Event data consists of too many parameters.");
+                    break;
+                default:
+                    Debug.LogFormat("A result of {0} is passable for the purpose of this test.", result);
+                    break;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bb75d13ea187eed1c339f4aabc035a0b5e47b92e
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/AnalyticsEventTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b5366b8adc0f44b3c9cb261a3f752d7a
+timeCreated: 1492730660
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..56496550d652f327a27c9ab496814e78c2a20739
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void ChatMessageSent_NoArgsTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent());
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ChatMessageSent_CustomDataTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent(m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..16cb7f8d5b5cddc749b3a45371e8303c65e57014
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ChatMessageSentTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7b186a0d29a784d81809e8a5471d155e
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4b3cfd35d2ba2671113765745c3db54ee13b8df2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void CutsceneSkip_CutsceneNameTest(
+            [Values("test_cutscene", "", null)] string name
+            )
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.CutsceneSkip(name));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void CutsceneSkip_CustomDataTest()
+        {
+            var name = "test_cutscene";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3722ed813f796842da7096242624cd16f7a91bd8
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneSkipTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f03b3e03b69e74ef9bd0f20377217a73
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..508cc790f40421dc32db54573359bda4f0005a1a
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void CutsceneStart_CutsceneNameTest(
+            [Values("test_cutscene", "", null)] string name
+            )
+        {
+            if (string.IsNullOrEmpty(name))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.CutsceneStart(name));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void CutsceneStart_CustomDataTest()
+        {
+            var name = "test_cutscene";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..47f3e96753913c651e2027341a4c932f421869fa
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/CutsceneStartTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: edf97aac6cc5a437ebf600a06a2e5ac7
+timeCreated: 1492896816
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a5cc844286800a12c4b9fcd74885ef80147a0630
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs
@@ -0,0 +1,33 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void FirstInteraction_NoArgsTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction());
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void FirstInteraction_ActionIdTest(
+            [Values("test_user_action", "", null)] string actionId
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void FirstInteraction_CustomDataTest()
+        {
+            var actionId = "test_user_action";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d913d1026e28d828b0d97639253e7c795035696c
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/FirstInteractionTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 78759e25237a7430587982cd92a2a0d8
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8e88f4456006af3ad2b2aa39439e92282b95c964
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void GameOver_NoArgsTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver());
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void GameOver_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void GameOver_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void GameOver_LevelIndex_LevelNameTest(
+            [Values(0)] int levelIndex,
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void GameOver_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..60aa2a1945a24ca7bbeb088906bae68b9f7446e2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameOverTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a30e59ca9f68d46db88323ac18f49e31
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..18749c7cb7500f2a8de9de92cabe90acd3dd75a2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void GameStart_NoArgsTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameStart());
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void GameStart_CustomDataTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameStart(m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e17c1ba114ddfc373ee73f4421c61ef09956d62f
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/GameStartTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2b2be9ee9f41a4b2db6b502697ba31b1
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..439d4e77bcb1dd602d2f7ac0f789ee5e6a88ea73
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs
@@ -0,0 +1,111 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void IAPTransaction_ContextTest(
+            [Values("test", "", null)] string context)
+        {
+            var price = 1f;
+            var itemId = "test_item";
+
+            if (string.IsNullOrEmpty(context))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.IAPTransaction(context, price, itemId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+            }
+
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_PriceTest(
+            [Values(-1f, 0f, 1f)] float price)
+        {
+            var context = "test";
+            var itemId = "test_item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_ItemIdTest(
+            [Values("test_item", "", null)] string itemId)
+        {
+            var context = "test";
+            var price = 1f;
+
+            if (string.IsNullOrEmpty(itemId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.IAPTransaction(context, price, itemId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+            }
+
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_ItemTypeTest(
+            [Values("test_type", "", null)] string itemType)
+        {
+            var context = "test";
+            var price = 1f;
+            var itemId = "test_item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_LevelTest(
+            [Values("test_level", "", null)] string level)
+        {
+            var context = "test";
+            var price = 1f;
+            var itemId = "test_item";
+            var itemType = "test_type";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_TransactionIdTest(
+            [Values("test_id", "", null)] string transactionId)
+        {
+            var context = "test";
+            var price = 1f;
+            var itemId = "test_item";
+            var itemType = "test_type";
+            var level = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level, transactionId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void IAPTransaction_CustomDataTest()
+        {
+            var context = "test";
+            var price = 1f;
+            var itemId = "test_item";
+            var itemType = "test_type";
+            var level = "test_level";
+            var transactionId = "test_id";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level, transactionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a9cb068c67bd4385a7d80a4eeebcbf398a507f8a
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/IAPTransactionTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8b4a8234f532f4b34aba0ab70400d90d
+timeCreated: 1497539738
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ec2b6683b6744e9377b6c9d8c4e1597e7b8fd8a7
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs
@@ -0,0 +1,176 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void ItemAcquired_CurrencyTypeTest(
+            [Values(AcquisitionType.Premium, AcquisitionType.Soft)] AcquisitionType currencyType)
+        {
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_ContextTest(
+            [Values("test", "", null)] string context)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            if (string.IsNullOrEmpty(context))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void ItemAcquired_AmountTest(
+            [Values(-1f, 0f, 1f)] float amount)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_ItemIdTest(
+            [Values("test_item", "", null)] string itemId)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var balance = 1f;
+
+            if (string.IsNullOrEmpty(itemId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+                EvaluateAnalyticsResult(m_Result);
+
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void ItemAcquired_BalanceTest(
+            [Values(-1f, 0, 1f)] float balance)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_ItemTypeTest(
+            [Values("test_type", "", null)] string itemType)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_LevelTest(
+            [Values("test_level", "", null)] string level)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_TransactionIdTest(
+            [Values("test_id", "", null)] string transactionId)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+            var level = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level, transactionId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level, transactionId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemAcquired_CustomDataTest()
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+            var level = "test_level";
+            var transactionId = "test_id";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level, transactionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level, transactionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..72834076ecd9d0d625c398e48dfb99c022cfd702
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemAcquiredTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5e7a49a6952af4d4ab2c3b038be68141
+timeCreated: 1497539770
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..52ee942272f432455275ae3327e60a580735a08d
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs
@@ -0,0 +1,176 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void ItemSpent_CurrencyTypeTest(
+            [Values(AcquisitionType.Premium, AcquisitionType.Soft)] AcquisitionType currencyType)
+        {
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_ContextTest(
+            [Values("test", "", null)] string context)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            if (string.IsNullOrEmpty(context))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void ItemSpent_AmountTest(
+            [Values(-1f, 0f, 1f)] float amount)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_ItemIdTest(
+            [Values("test_item", "", null)] string itemId)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var balance = 1f;
+
+            if (string.IsNullOrEmpty(itemId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+                EvaluateAnalyticsResult(m_Result);
+
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void ItemSpent_BalanceTest(
+            [Values(-1f, 0, 1f)] float balance)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_ItemTypeTest(
+            [Values("test_type", "", null)] string itemType)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_LevelTest(
+            [Values("test_level", "", null)] string level)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_TransactionIdTest(
+            [Values("test_id", "", null)] string transactionId)
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+            var level = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level, transactionId));
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level, transactionId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ItemSpent_CustomDataTest()
+        {
+            var currencyType = AcquisitionType.Soft;
+            var context = "test";
+            var amount = 1f;
+            var itemId = "test_item";
+            var balance = 1f;
+            var itemType = "test_type";
+            var level = "test_level";
+            var transactionId = "test_id";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level, transactionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level, transactionId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ab3b390a8883beaa3beccac6c9e6a05241c9bd83
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ItemSpentTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 00ed25e3298ac440eb327c706a964e3a
+timeCreated: 1497539780
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..274e37c4f1c7fa8d736bf575a5679258f9979a77
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelComplete_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelComplete_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            if (string.IsNullOrEmpty(levelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelComplete(levelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelComplete_LevelIndex_LevelNameTest (
+        //     [Values(0)] int levelIndex,
+        //     [Values("test_level", "", null)] string levelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex, levelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelComplete_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..70202cf9f5e9bbc171525053988f30ebd4b08e0b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelCompleteTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: fa4ff09b6aaaa4df29a884efa38bce56
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fece2eade29f4db81cec5fca6998f6391e2c2c06
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelFail_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelFail_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            if (string.IsNullOrEmpty(levelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelFail(levelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelFail_LevelIndex_LevelNameTest (
+        //     [Values(-1, 0, 1)] int levelIndex,
+        //     [Values("test_level", "", null)] string levelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex, levelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelFail_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..05b52fdb83d67088184208f370f88a5278ae0fd2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelFailTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 036d03e26977243fa9a2d7af48e51e08
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e4859aba98fe79e2b1017018183369adb2d436db
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelQuit_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelQuit_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            if (string.IsNullOrEmpty(levelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelQuit(levelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelQuit_LevelIndex_LevelNameTest (
+        //     [Values(-1, 0, 1)] int levelIndex,
+        //     [Values("test_level", "", null)] string levelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex, levelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelQuit_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0b0c0f7700282dd8e66345beb3c11a94698f3f1c
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelQuitTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 617202f4e2bed4ef8acccfd6c1ecd6fa
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fcbe9eb6284692ada4fa6d90a3ae567d5be4b18f
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelSkip_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelSkip_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            if (string.IsNullOrEmpty(levelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelSkip(levelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelSkip_LevelIndex_LevelNameTest (
+        //     [Values(-1, 0, 1)] int levelIndex,
+        //     [Values("test_level", "", null)] string levelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex, levelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelSkip_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d5b103cd9b5f02edd6c3767674977d55849f244
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelSkipTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 93f7ca1a9c5c945a89e884f9611c70f0
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ff4ef4341d4921b03660e9235790be590bbada51
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelStart_LevelIndexTest(
+            [Values(-1, 0, 1)] int levelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelStart_LevelNameTest(
+            [Values("test_level", "", null)] string levelName
+            )
+        {
+            if (string.IsNullOrEmpty(levelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelStart(levelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelStart_LevelIndex_LevelNameTest (
+        //     [Values(0)] int levelIndex,
+        //     [Values("test_level", "", null)] string levelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex, levelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelStart_CustomDataTest()
+        {
+            var levelIndex = 0;
+            var levelName = "test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..121018d8a01869430d152ab48bce1f689b172dff
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelStartTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 876d47a520ae34f81a97792e1afed14b
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..96578a71039ee74786d26d3b0af697406186146b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void LevelUp_LevelIndexTest(
+            [Values(0, 1, 2)] int newLevelIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void LevelUp_LevelNameTest(
+            [Values("new_test_level", "", null)] string newLevelName
+            )
+        {
+            if (string.IsNullOrEmpty(newLevelName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.LevelUp(newLevelName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        // [Test]
+        // public void LevelUp_LevelIndex_LevelNameTest (
+        //     [Values(1)] int newLevelIndex,
+        //     [Values("new_test_level", "", null)] string newLevelName
+        // )
+        // {
+        //     Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex, newLevelName));
+        //     EvaluateAnalyticsResult(m_Result);
+        // }
+
+        [Test]
+        public void LevelUp_CustomDataTest()
+        {
+            var newLevelIndex = 1;
+            var newLevelName = "new_test_level";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1d650da1b936781f05497d87cb085a57a04d6269
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/LevelUpTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b0bb2afc5cd494e6f9b44455a0fc22f8
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..80ffa6df1618c89c49c31717211b422552e8491f
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void PostAdAction_RewardedTest(
+            [Values(true, false)] bool rewarded
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void PostAdAction_NetworkStringTest(
+            [Values("unityads", "", null)] string network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void PostAdAction_NetworkEnumTest(
+            [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+            )
+        {
+            var rewarded = true;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void PostAdAction_PlacementIdTest(
+            [Values("rewardedVideo", "", null)] string placementId
+            )
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network, placementId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void PostAdAction_CustomDataTest()
+        {
+            var rewarded = true;
+            var network = AdvertisingNetwork.UnityAds;
+            var placementId = "rewardedVideo";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network, placementId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..405d01195b87207705f3ee7b9af527e82702a2f8
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PostAdActionTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 293182c4d29604c05b6724ae00fd121a
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5923cedd8ab8af0ef3e88a327c6425e8f78b630b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void PushNotificationClick_MessageIdTest(
+            [Values("test_message", "", null)] string messageId
+            )
+        {
+            if (string.IsNullOrEmpty(messageId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.PushNotificationClick(messageId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationClick(messageId));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void PushNotificationClick_CustomDataTest()
+        {
+            var messageId = "test_message";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationClick(messageId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1ee5e1f948cc2f4a07653d3f7e1c4a3403162957
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationClickTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 240551e3142f04b0ca801ce8eb645ba2
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2e842bdc73cd16961145304c64e27b1565971c2c
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void PushNotificationEnable_NoArgsTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationEnable());
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void PushNotificationEnable_CustomDataTest()
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationEnable(m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..285653d9da0facb346d2cf7b8c196cdb7d66fdba
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/PushNotificationEnableTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a10564aae782c458cbf1de024f4870f7
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..97a60fcc07c39fbef3792b5c8d0eaca1e91bc713
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs
@@ -0,0 +1,43 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void ScreenVisit_ScreenNameStringTest(
+            [Values("test_screen", "", null)] string screenName
+            )
+        {
+            if (string.IsNullOrEmpty(screenName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.ScreenVisit(screenName));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void ScreenVisit_ScreenNameEnumTest(
+            [Values(ScreenName.CrossPromo, ScreenName.IAPPromo, ScreenName.None)] ScreenName screenName
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void ScreenVisit_CustomDataTest()
+        {
+            var screenName = ScreenName.MainMenu;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6327d182526dd525a4746b93dbee82697b61bb99
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/ScreenVisitTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 768d77435df35443bad74aedc993c0cf
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7cb38a1dc6844014691546c1e65bd8daf98c9fd5
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs
@@ -0,0 +1,110 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void SocialShareAccept_ShareTypeStringTest(
+            [Values("test_share", "", null)] string shareType
+            )
+        {
+            var socialNetwork = SocialNetwork.Facebook;
+
+            if (string.IsNullOrEmpty(shareType))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void SocialShareAccept_ShareTypeEnumTest(
+            [Values(ShareType.TextOnly, ShareType.Image, ShareType.None)] ShareType shareType
+            )
+        {
+            var socialNetwork = SocialNetwork.Twitter;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShareAccept_SocialNetworkStringTest(
+            [Values("test_network", "", null)] string socialNetwork
+            )
+        {
+            var shareType = ShareType.Image;
+
+            if (string.IsNullOrEmpty(socialNetwork))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void SocialShareAccept_SocialNetworkEnumTest(
+            [Values(SocialNetwork.GooglePlus, SocialNetwork.OK_ru, SocialNetwork.None)] SocialNetwork socialNetwork
+            )
+        {
+            var shareType = ShareType.Video;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShareAccept_SenderIdTest(
+            [Values("test_sender", "", null)] string senderId
+            )
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId)
+                );
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShareAccept_RecipientIdTest(
+            [Values("test_recipient", "", null)] string recipientId
+            )
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+            var senderId = "test_sender";
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId, recipientId)
+                );
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShareAccept_CustomDataTest()
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+            var senderId = "test_sender";
+            var recipientId = "test_recipient";
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId, recipientId, m_CustomData)
+                );
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e491cf296846ce3da95805320b2f2f3ab5c16582
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareAcceptTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 138961c4434d141a987d96df1f8d7342
+timeCreated: 1492896446
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0809d04ad56f4100d76031f20dbc827c754bcdb2
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs
@@ -0,0 +1,110 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void SocialShare_ShareTypeStringTest(
+            [Values("test_share", "", null)] string shareType
+            )
+        {
+            var socialNetwork = SocialNetwork.Facebook;
+
+            if (string.IsNullOrEmpty(shareType))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void SocialShare_ShareTypeEnumTest(
+            [Values(ShareType.TextOnly, ShareType.Image, ShareType.None)] ShareType shareType
+            )
+        {
+            var socialNetwork = SocialNetwork.Twitter;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShare_SocialNetworkStringTest(
+            [Values("test_network", "", null)] string socialNetwork
+            )
+        {
+            var shareType = ShareType.Image;
+
+            if (string.IsNullOrEmpty(socialNetwork))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void SocialShare_SocialNetworkEnumTest(
+            [Values(SocialNetwork.GooglePlus, SocialNetwork.OK_ru, SocialNetwork.None)] SocialNetwork socialNetwork
+            )
+        {
+            var shareType = ShareType.Video;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShare_SenderIdTest(
+            [Values("test_sender", "", null)] string senderId
+            )
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId)
+                );
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShare_RecipientIdTest(
+            [Values("test_recipient", "", null)] string recipientId
+            )
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+            var senderId = "test_sender";
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId, recipientId)
+                );
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void SocialShare_CustomDataTest()
+        {
+            var shareType = ShareType.TextOnly;
+            var socialNetwork = SocialNetwork.Twitter;
+            var senderId = "test_sender";
+            var recipientId = "test_recipient";
+
+            Assert.DoesNotThrow(
+                () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId, recipientId, m_CustomData)
+                );
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bc9978d33f08d1e4551efc7bb9f65a79a8a92b1a
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/SocialShareTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 811f7f1f5920641c0a9233503492c9ba
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..367a4599b14bcab4d172768357069ce77b1201c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs
@@ -0,0 +1,75 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void StoreItemClick_StoreTypeTest(
+            [Values(StoreType.Premium, StoreType.Soft)] StoreType storeType
+            )
+        {
+            var itemId = "test_item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void StoreItemClick_ItemIdTest(
+            [Values("test_item", "", null)] string itemId
+            )
+        {
+            var storeType = StoreType.Soft;
+
+            if (string.IsNullOrEmpty(itemId))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void StoreItemClick_ItemId_ItemNameTest(
+            [Values("test_item_id", "", null)] string itemId,
+            [Values("Test Item Name", "", null)] string itemName
+            )
+        {
+            var storeType = StoreType.Soft;
+
+            if (string.IsNullOrEmpty(itemId) && string.IsNullOrEmpty(itemName))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+            }
+            else
+            {
+                if (string.IsNullOrEmpty(itemId))
+                {
+                    Assert.Throws<ArgumentException>(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+                }
+                else
+                {
+                    Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId, itemName));
+                    EvaluateAnalyticsResult(m_Result);
+                }
+            }
+        }
+
+        [Test]
+        public void StoreItemClick_CustomDataTest()
+        {
+            var storeType = StoreType.Soft;
+            var itemId = "test_item";
+            var itemName = "Test Item";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId, itemName, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..182b9d1d1690d68566fb11bf02d43ed8339f4f14
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreItemClickTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c786248494be6489bbfa006bdf59c773
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..489188720331a1353e459aee94aff1f3aa52653e
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void StoreOpened_StoreTypeTest(
+            [Values(StoreType.Premium, StoreType.Soft)] StoreType storeType
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreOpened(storeType));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void StoreOpened_CustomDataTest()
+        {
+            var storeType = StoreType.Soft;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreOpened(storeType, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..65bf472227bafe0c242191b28167ea3c728cccbf
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/StoreOpenedTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f4c7193663918411c8f78e3cf844cb9e
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3e166af23a3a3acfa9bc180f87f2b4e1d33e9d87
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void TutorialComplete_TutorialIdTest(
+            [Values("test_tutorial", "", null)] string tutorialId
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialComplete(tutorialId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void TutorialComplete_CustomDataTest()
+        {
+            var tutorialId = "test_tutorial";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialComplete(tutorialId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b2067fea08ceb4d7997106624e4677d17910349a
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialCompleteTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b025f6f8a47be46418bcb0ed1050cfb4
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9b413edaf9782e999894b6c9c9473f574644e7be
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void TutorialSkip_TutorialIdTest(
+            [Values("test_tutorial", "", null)] string tutorialId
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialSkip(tutorialId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void TutorialSkip_CustomDataTest()
+        {
+            var tutorialId = "test_tutorial";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialSkip(tutorialId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b700e0ed6a99b1bdeab9ceec6304a43246f50823
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialSkipTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3ab6e6972ecb54e2cbd505692415a7ba
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..425f27736e806a2fe5e2582e691c1ba0cf23513a
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void TutorialStart_TutorialIdTest(
+            [Values("test_tutorial", "", null)] string tutorialId
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStart(tutorialId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void TutorialStart_CustomDataTest()
+        {
+            var tutorialId = "test_tutorial";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStart(tutorialId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7a294fefde11bbd7e981e03413df7c47b6d17
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStartTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2622838afa3284cc882c48ceea4c8220
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..524d8195d345db756b5c1976fae624312c2b2aaa
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs
@@ -0,0 +1,39 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void TutorialStep_StepIndexTest(
+            [Values(-1, 0, 1)] int stepIndex
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void TutorialStep_TutorialIdTest(
+            [Values("test_tutorial", "", null)] string tutorialId
+            )
+        {
+            var stepIndex = 0;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex, tutorialId));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void TutorialStep_CustomDataTest()
+        {
+            var stepIndex = 0;
+            var tutorialId = "test_tutorial";
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex, tutorialId, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..54ebcfa2289b2ec0e814f9f231abef0c0dc02a74
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/TutorialStepTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a571de1bea3cb4c9784493c6f1b0b76c
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..e2141b4b898dc342bfe5a7ad2b3261f898b00afb
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef
@@ -0,0 +1,19 @@
+{
+    "name": "Unity.Analytics.StandardEvents.EditorTests",
+    "references": [],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": true,
+    "precompiledReferences": [
+        "Unity.Analytics.StandardEvents.dll"
+    ],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": []
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..074fd4746691067748ed85fb90df0e3c398e8682
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/Unity.Analytics.StandardEvents.EditorTests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: adee0c1377ef8b2489060e152dd0d119
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..56920a63d12f5f9b18561c6b376553569cbad84b
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs
@@ -0,0 +1,43 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+    public partial class AnalyticsEventTests
+    {
+        [Test]
+        public void UserSignup_AuthorizationNetworkStringTest(
+            [Values("test_network", "", null)] string network
+            )
+        {
+            if (string.IsNullOrEmpty(network))
+            {
+                Assert.Throws<ArgumentException>(() => AnalyticsEvent.UserSignup(network));
+            }
+            else
+            {
+                Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network));
+                EvaluateAnalyticsResult(m_Result);
+            }
+        }
+
+        [Test]
+        public void UserSignup_AuthorizationNetworkEnumTest(
+            [Values(AuthorizationNetwork.Facebook, AuthorizationNetwork.GameCenter, AuthorizationNetwork.None)] AuthorizationNetwork network
+            )
+        {
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network));
+            EvaluateAnalyticsResult(m_Result);
+        }
+
+        [Test]
+        public void UserSignup_CustomDataTest()
+        {
+            var network = AuthorizationNetwork.Internal;
+
+            Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network, m_CustomData));
+            EvaluateCustomData(m_CustomData);
+            EvaluateAnalyticsResult(m_Result);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3441ed8be97bb33198fb70e74df9854f9b2b9aae
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Editor/UserSignupTests.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8b0f0c8689876421c90e7b60f096325a
+timeCreated: 1489734081
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a17b3d13221cf8caf1c516aab2a0161c2c951033
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4f5362359d4548b44a34a45f19efb4bf
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs
new file mode 100644
index 0000000000000000000000000000000000000000..921976a58735f7361b301ffbba568002cdce7260
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.Analytics;
+
+public class JsonSerialization
+{
+    // This test was create to verifiy JsonUtility could properly deserialize the nested
+    // structs used for opt-out status. That process is now handled with remote config so
+    // now we just verify that the expected response from the token API can be deserialized.
+
+    const string kTokenJson = "{" +
+        "\"url\": \"https://analytics.cloud.unity3d.com/optout?token=24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1/\"," +
+        "\"token\": \"24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1\"" +
+        "}";
+
+    [Test]
+    public void TestTokenStruct_JsonUtility()
+    {
+        var tokenData = JsonUtility.FromJson<DataPrivacy.TokenData>(kTokenJson);
+        Assert.AreEqual("https://analytics.cloud.unity3d.com/optout?token=24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1/", tokenData.url);
+        Assert.AreEqual("24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1", tokenData.token);
+    }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..feafedcf09f23700907cea3521a6feb3519c6517
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/JsonSerialization.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0fe4c527c3aa3eb42912a1caafbbc6a0
+timeCreated: 1526476500
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..54d317a06341695f77e3eccf728ec701e6a464fa
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef
@@ -0,0 +1,12 @@
+{
+    "name": "Unity.Analytics.DataPrivacy.Tests",
+    "references": [
+        "Unity.Analytics.DataPrivacy"
+    ],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef.meta b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d4c3c4faaa524b2c94af4b8c0db914daadc88da
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/Tests/Runtime/Unity.Analytics.DataPrivacy.Tests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 015812e983113a84b95773e55f3cec13
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/package.json b/Library/PackageCache/com.unity.analytics@3.2.3/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..835e2e8bbdf45fc25c23b032eac64f7d152eccc3
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/package.json
@@ -0,0 +1,17 @@
+{
+  "name": "com.unity.analytics",
+  "version": "3.2.3",
+  "unity": "2018.4",
+  "displayName": "Analytics Library",
+  "description": "The Unity Analytics Library contains the Analytics Event Tracker component, the Data Privacy plug-in, and the Standard Events API.",
+  "keywords": [
+    "analytics",
+    "unity"
+  ],
+  "readme": "Unity Analytics",
+  "repository": {
+    "type": "git",
+    "url": "git@github.cds.internal.unity3d.com:unity/com.unity.analytics.git",
+    "revision": "f067e92ace5c4e219c6d2221be78fdad5602011b"
+  }
+}
diff --git a/Library/PackageCache/com.unity.analytics@3.2.3/package.json.meta b/Library/PackageCache/com.unity.analytics@3.2.3/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..83b0f788b16a4ee394c43af79619ef13f954ea3c
--- /dev/null
+++ b/Library/PackageCache/com.unity.analytics@3.2.3/package.json.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 510d1d319d2754ea4a47c6dd8c421ea0
+timeCreated: 1491258762
+licenseType: Pro
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md b/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..7dfff7caec221c71a6562077caef6c37b0625e23
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md
@@ -0,0 +1,28 @@
+# Changelog
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.2.15] - 2018-11-16
+Added support for non-experimental UIElements.
+
+## [1.2.11] - 2018-09-04
+Made some performance improvements to reduce impact on ReloadAssemblies.
+
+## [1.2.9] - 2018-08-13
+Test issues for the Collab History Window are now fixed.
+
+## [1.2.7] - 2018-08-07
+Toolbar drop-down will no longer show up when package is uninstalled.
+
+## [1.2.6] - 2018-06-15
+Fixed an issue where Collab's History window wouldn't load properly.
+
+## [1.2.5] - 2018-05-21
+This is the first release of *Unity Package CollabProxy*.
+
+### Added
+- Collab history and toolbar windows
+- Collab view and presenter classes
+- Collab Editor tests for view and presenter
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..38274a690cb5171a178a6353cb0a59fee084a482
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 782c49e6e68074dc7ba12c95537825ce
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md b/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md
new file mode 100644
index 0000000000000000000000000000000000000000..57808d565e584ba0e3adaa28af19fbe28db8454b
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
+    <metadata>
+    <id>Unity.CollabProxy.Dependencies</id>
+    <version>1.1.0-experimental</version>
+    <authors>Rohit Garg</authors>
+    <description>Dependencies for the CollabProxy package</description>
+    </metadata>
+</package>
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..24e45c2f674eb5bcd25bad5eeceeb5e7d18acf4a
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/DEPENDENCIES.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 470530e667ad4475786b28fa3187ce95
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Documentation~/collab-proxy.md b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Documentation~/collab-proxy.md
new file mode 100644
index 0000000000000000000000000000000000000000..c1800d6a23d5b6c9f99515fb2fe57ca7e70eedb8
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Documentation~/collab-proxy.md
@@ -0,0 +1,5 @@
+# About Unity Collaborate
+
+Collaborate is a simple way for teams to save, share, and sync their Unity project.
+
+Please refer to the online documentation [here.](https://docs.unity3d.com/Manual/UnityCollaborate.html)
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b54ca871fcbfac68e2febc0038bef398085e3ffa
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d31e5d760880a4e52a3a75322481d0d2
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d7266b636a3ddc7e53f93e98a83bcba5765b564c
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[assembly: InternalsVisibleTo("Unity.CollabProxy.EditorTests")]
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e384b31861e079aef3b4b3d7fb22d6013daeb862
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d4ef26aa386b44923b61c9c4b505a67c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab.meta
new file mode 100644
index 0000000000000000000000000000000000000000..694fc4ea1b077e9f25c67f9946801d5451b5cc19
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c18cb9388313e4287ad5895ee735c47d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs
new file mode 100644
index 0000000000000000000000000000000000000000..029ce1c76371f042e526be20ac565ea34a4bfac4
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs
@@ -0,0 +1,24 @@
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+namespace CollabProxy.UI
+{
+    [InitializeOnLoad]
+    public class Bootstrap
+    {
+        private const float kCollabToolbarButtonWidth = 78.0f;
+        
+        static Bootstrap()
+        {
+            Collab.ShowHistoryWindow = CollabHistoryWindow.ShowHistoryWindow;
+            Collab.ShowToolbarAtPosition = CollabToolbarWindow.ShowCenteredAtPosition;
+            Collab.IsToolbarVisible = CollabToolbarWindow.IsVisible;
+            Collab.CloseToolbar = CollabToolbarWindow.CloseToolbar;
+            Toolbar.AddSubToolbar(new CollabToolbarButton
+            {
+                Width = kCollabToolbarButtonWidth
+            });
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..641d54b788861b6794ca333dcb89423122589177
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Bootstrap.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8aa8171e088f94069bbd1978a053f7dd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c7f90aa14b0c28201575ea0c3801b92ca1306b76
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace UnityEditor.Collaboration
+{
+    internal static class CollabAnalytics
+    {
+        [Serializable]
+        private struct CollabUserActionAnalyticsEvent
+        {
+            public string category;
+            public string action;
+        }
+
+        public static void SendUserAction(string category, string action)
+        {
+            EditorAnalytics.SendCollabUserAction(new CollabUserActionAnalyticsEvent() { category = category, action = action });
+        }
+
+        public static readonly string historyCategoryString = "History";
+    };
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2f46e9bcde065443eb74ec81cdcc10b9709f3e69
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabAnalytics.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f944311c8fff2479fa3ba741f6039fc8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b855bce3e96e7bb738c5c335c4ad53dc2a04cdca
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs
@@ -0,0 +1,330 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEditor.UIElements;
+using UnityEngine.UIElements;
+#else
+using UnityEditor.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+using UnityEngine;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+    internal class CollabHistoryWindow : EditorWindow, ICollabHistoryWindow
+    {
+#if UNITY_2019_1_OR_NEWER
+                private const string ResourcesPath = "Packages/com.unity.collab-proxy/Editor/Resources/Styles/";
+#else
+                private const string ResourcesPath = "StyleSheets/";
+#endif
+
+
+        const string kWindowTitle = "Collab History";
+        const string kServiceUrl = "developer.cloud.unity3d.com";
+
+        [MenuItem("Window/Asset Management/Collab History", false, 1)]
+        public static void ShowHistoryWindow()
+        {
+            EditorWindow.GetWindow<CollabHistoryWindow>(kWindowTitle);
+        }
+
+        [MenuItem("Window/Asset Management/Collab History", true)]
+        public static bool ValidateShowHistoryWindow()
+        {
+            return Collab.instance.IsCollabEnabledForCurrentProject();
+        }
+
+        CollabHistoryPresenter m_Presenter;
+        Dictionary<HistoryState, VisualElement> m_Views;
+        List<CollabHistoryItem> m_HistoryItems = new List<CollabHistoryItem>();
+        HistoryState m_State;
+        VisualElement m_Container;
+        PagedListView m_Pager;
+        ScrollView m_HistoryView;
+        int m_ItemsPerPage = 5;
+        string m_InProgressRev;
+        bool m_RevisionActionsEnabled;
+
+        public CollabHistoryWindow()
+        {
+            minSize = new Vector2(275, 50);
+        }
+
+        public void OnEnable()
+        {
+            SetupGUI();
+            name = "CollabHistory";
+
+            if (m_Presenter == null)
+            {
+                m_Presenter = new CollabHistoryPresenter(this, new CollabHistoryItemFactory(), new RevisionsService(Collab.instance, UnityConnect.instance));
+            }
+            m_Presenter.OnWindowEnabled();
+        }
+
+        public void OnDisable()
+        {
+            m_Presenter.OnWindowDisabled();
+        }
+
+        public bool revisionActionsEnabled
+        {
+            get { return m_RevisionActionsEnabled; }
+            set
+            {
+                if (m_RevisionActionsEnabled == value)
+                    return;
+
+                m_RevisionActionsEnabled = value;
+                foreach (var historyItem in m_HistoryItems)
+                {
+                    historyItem.RevisionActionsEnabled = value;
+                }
+            }
+        }
+
+        private void AddStyleSheetPath(VisualElement root, string path)
+        {
+#if UNITY_2019_1_OR_NEWER
+            root.styleSheets.Add(EditorGUIUtility.Load(path) as StyleSheet);
+#else
+            root.AddStyleSheetPath(path);
+#endif
+        }
+
+
+        public void SetupGUI()
+        {
+#if UNITY_2019_1_OR_NEWER
+            var root = this.rootVisualElement;
+#else
+            var root = this.GetRootVisualContainer();
+#endif
+            AddStyleSheetPath(root, ResourcesPath + "CollabHistoryCommon.uss");
+            if (EditorGUIUtility.isProSkin)
+            {
+                AddStyleSheetPath(root, ResourcesPath + "CollabHistoryDark.uss");
+            }
+            else
+            {
+                AddStyleSheetPath(root, ResourcesPath + "CollabHistoryLight.uss");
+            }
+
+            m_Container = new VisualElement();
+            m_Container.StretchToParentSize();
+            root.Add(m_Container);
+
+            m_Pager = new PagedListView()
+            {
+                name = "PagedElement",
+                pageSize = m_ItemsPerPage
+            };
+
+            var errorView = new StatusView()
+            {
+                message = "An Error Occurred",
+                icon = EditorGUIUtility.LoadIconRequired("Collab.Warning") as Texture,
+            };
+
+            var noInternetView = new StatusView()
+            {
+                message = "No Internet Connection",
+                icon = EditorGUIUtility.LoadIconRequired("Collab.NoInternet") as Texture,
+            };
+
+            var maintenanceView = new StatusView()
+            {
+                message = "Maintenance",
+            };
+
+            var loginView = new StatusView()
+            {
+                message = "Sign in to access Collaborate",
+                buttonText = "Sign in...",
+                callback = SignInClick,
+            };
+
+            var noSeatView = new StatusView()
+            {
+                message = "Ask your project owner for access to Unity Teams",
+                buttonText = "Learn More",
+                callback = NoSeatClick,
+            };
+
+            var waitingView = new StatusView()
+            {
+                message = "Updating...",
+            };
+
+            m_HistoryView = new ScrollView() { name = "HistoryContainer", showHorizontal = false};
+            m_HistoryView.contentContainer.StretchToParentWidth();
+            m_HistoryView.Add(m_Pager);
+
+            m_Views = new Dictionary<HistoryState, VisualElement>()
+            {
+                {HistoryState.Error,       errorView},
+                {HistoryState.Offline,     noInternetView},
+                {HistoryState.Maintenance, maintenanceView},
+                {HistoryState.LoggedOut,   loginView},
+                {HistoryState.NoSeat,      noSeatView},
+                {HistoryState.Waiting,     waitingView},
+                {HistoryState.Ready,       m_HistoryView}
+            };
+        }
+
+        public void UpdateState(HistoryState state, bool force)
+        {
+            if (state == m_State && !force)
+                return;
+
+            m_State = state;
+            switch (state)
+            {
+                case HistoryState.Ready:
+                    UpdateHistoryView(m_Pager);
+                    break;
+                case HistoryState.Disabled:
+                    Close();
+                    return;
+            }
+
+            m_Container.Clear();
+            m_Container.Add(m_Views[m_State]);
+        }
+
+        public void UpdateRevisions(IEnumerable<RevisionData> datas, string tip, int totalRevisions, int currentPage)
+        {
+            var elements = new List<VisualElement>();
+            var isFullDateObtained = false; // Has everything from this date been obtained?
+            m_HistoryItems.Clear();
+
+            if (datas != null)
+            {
+                DateTime currentDate = DateTime.MinValue;
+                foreach (var data in datas)
+                {
+                    if (data.timeStamp.Date != currentDate.Date)
+                    {
+                        elements.Add(new CollabHistoryRevisionLine(data.timeStamp, isFullDateObtained));
+                        currentDate = data.timeStamp;
+                    }
+
+                    var item = new CollabHistoryItem(data);
+                    m_HistoryItems.Add(item);
+
+                    var container = new VisualElement();
+                    container.style.flexDirection = FlexDirection.Row;
+                    if (data.current)
+                    {
+                        isFullDateObtained = true;
+                        container.AddToClassList("currentRevision");
+                        container.AddToClassList("obtainedRevision");
+                    }
+                    else if (data.obtained)
+                    {
+                        container.AddToClassList("obtainedRevision");
+                    }
+                    else
+                    {
+                        container.AddToClassList("absentRevision");
+                    }
+                    // If we use the index as-is, the latest commit will become #1, but we want it to be last
+                    container.Add(new CollabHistoryRevisionLine(data.index));
+                    container.Add(item);
+                    elements.Add(container);
+                }
+            }
+
+            m_HistoryView.scrollOffset = new Vector2(0, 0);
+            m_Pager.totalItems = totalRevisions;
+            m_Pager.curPage = currentPage;
+            m_Pager.items = elements;
+        }
+
+        public string inProgressRevision
+        {
+            get { return m_InProgressRev; }
+            set
+            {
+                m_InProgressRev = value;
+                foreach (var historyItem in m_HistoryItems)
+                {
+                    historyItem.SetInProgressStatus(value);
+                }
+            }
+        }
+
+        public int itemsPerPage
+        {
+            set
+            {
+                if (m_ItemsPerPage == value)
+                    return;
+                m_Pager.pageSize = m_ItemsPerPage;
+            }
+        }
+
+        public PageChangeAction OnPageChangeAction
+        {
+            set { m_Pager.OnPageChanged = value; }
+        }
+
+        public RevisionAction OnGoBackAction
+        {
+            set { CollabHistoryItem.s_OnGoBack = value; }
+        }
+
+        public RevisionAction OnUpdateAction
+        {
+            set { CollabHistoryItem.s_OnUpdate = value; }
+        }
+
+        public RevisionAction OnRestoreAction
+        {
+            set { CollabHistoryItem.s_OnRestore = value; }
+        }
+
+        public ShowBuildAction OnShowBuildAction
+        {
+            set { CollabHistoryItem.s_OnShowBuild = value; }
+        }
+
+        public Action OnShowServicesAction
+        {
+            set { CollabHistoryItem.s_OnShowServices = value; }
+        }
+
+        void UpdateHistoryView(VisualElement history)
+        {
+        }
+
+        void NoSeatClick()
+        {
+            var connection = UnityConnect.instance;
+            var env = connection.GetEnvironment();
+            // Map environment to url - prod is special
+            if (env == "production")
+                env = "";
+            else
+                env += "-";
+
+            var url = "https://" + env + kServiceUrl
+                + "/orgs/" + connection.GetOrganizationId()
+                + "/projects/" + connection.GetProjectName()
+                + "/unity-teams/";
+            Application.OpenURL(url);
+        }
+
+        void SignInClick()
+        {
+            UnityConnect.instance.ShowLogin();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..74358d4067f1956806fb29d975596c3426debfff
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabHistoryWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fed9dda667cab45d398d06402bba03f4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eebe4aca553232cca0737f48e099d2097dcff045
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs
@@ -0,0 +1,297 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+namespace UnityEditor
+{
+    internal class CollabToolbarButton : SubToolbar, IDisposable
+    {
+        // Must match s_CollabIcon array
+        enum CollabToolbarState
+        {
+            NeedToEnableCollab,
+            UpToDate,
+            Conflict,
+            OperationError,
+            ServerHasChanges,
+            FilesToPush,
+            InProgress,
+            Disabled,
+            Offline
+        }
+
+        private class CollabToolbarContent
+        {
+            readonly string m_iconName;
+            readonly string m_toolTip;
+            readonly CollabToolbarState m_state;
+            
+            static Dictionary<CollabToolbarContent, GUIContent> m_CollabIcons;
+
+            public CollabToolbarState RegisteredForState
+            {
+                get { return m_state; }
+            }
+
+            public GUIContent GuiContent
+            {
+                get
+                {
+                    if (m_CollabIcons == null)
+                    {
+                        m_CollabIcons = new Dictionary<CollabToolbarContent, GUIContent>();
+                    }
+            
+                    if (!m_CollabIcons.ContainsKey(this))
+                    {
+                        m_CollabIcons.Add(this, EditorGUIUtility.TrTextContentWithIcon("Collab", m_toolTip, m_iconName));
+                    }
+            
+                    return m_CollabIcons[this];
+                }
+            }
+
+            public CollabToolbarContent(CollabToolbarState state, string iconName, string toolTip)
+            {
+                m_state = state;
+                m_iconName = iconName;
+                m_toolTip = toolTip;
+            }
+        }
+
+        CollabToolbarContent[] m_toolbarContents;
+        CollabToolbarState m_CollabToolbarState = CollabToolbarState.UpToDate;
+        const float kCollabButtonWidth = 78.0f;
+        ButtonWithAnimatedIconRotation m_CollabButton;
+        string m_DynamicTooltip;
+        static bool m_ShowCollabTooltip = false;
+
+        private GUIContent currentCollabContent
+        {
+            get
+            {
+                CollabToolbarContent toolbarContent =
+                    m_toolbarContents.FirstOrDefault(c => c.RegisteredForState.Equals(m_CollabToolbarState));
+                GUIContent content = new GUIContent(toolbarContent == null? m_toolbarContents.First().GuiContent : toolbarContent.GuiContent);
+                if (!m_ShowCollabTooltip)
+                {
+                    content.tooltip = null;
+                }
+                else if (m_DynamicTooltip != "")
+                {
+                    content.tooltip = m_DynamicTooltip;
+                }
+
+                if (Collab.instance.AreTestsRunning())
+                {
+                    content.text = "CTF";
+                }
+
+                return content;
+            }
+        }
+        
+        public CollabToolbarButton()
+        {
+            m_toolbarContents = new[]
+            {
+                new CollabToolbarContent(CollabToolbarState.NeedToEnableCollab, "CollabNew", " You need to enable collab."),
+                new CollabToolbarContent(CollabToolbarState.UpToDate, "Collab", " You are up to date."),
+                new CollabToolbarContent(CollabToolbarState.Conflict, "CollabConflict", " Please fix your conflicts prior to publishing."),
+                new CollabToolbarContent(CollabToolbarState.OperationError, "CollabError", " Last operation failed. Please retry later."),
+                new CollabToolbarContent(CollabToolbarState.ServerHasChanges, "CollabPull", " Please update, there are server changes."),
+                new CollabToolbarContent(CollabToolbarState.FilesToPush, "CollabPush", " You have files to publish."),
+                new CollabToolbarContent(CollabToolbarState.InProgress, "CollabProgress", " Operation in progress."),
+                new CollabToolbarContent(CollabToolbarState.Disabled, "CollabNew", " Collab is disabled."),
+                new CollabToolbarContent(CollabToolbarState.Offline, "CollabNew", " Please check your network connection.")
+            };
+            
+            Collab.instance.StateChanged += OnCollabStateChanged;
+            UnityConnect.instance.StateChanged += OnUnityConnectStateChanged;
+            UnityConnect.instance.UserStateChanged += OnUnityConnectUserStateChanged;
+        }
+
+        void OnUnityConnectUserStateChanged(UserInfo state)
+        {
+            UpdateCollabToolbarState();
+        }
+
+        void OnUnityConnectStateChanged(ConnectInfo state)
+        {
+            UpdateCollabToolbarState();
+        }
+
+        public override void OnGUI(Rect rect)
+        {
+            DoCollabDropDown(rect);
+        }
+
+        Rect GUIToScreenRect(Rect guiRect)
+        {
+            Vector2 screenPoint = GUIUtility.GUIToScreenPoint(new Vector2(guiRect.x, guiRect.y));
+            guiRect.x = screenPoint.x;
+            guiRect.y = screenPoint.y;
+            return guiRect;
+        }
+        
+        void ShowPopup(Rect rect)
+        {
+            // window should be centered on the button
+            ReserveRight(kCollabButtonWidth / 2, ref rect);
+            ReserveBottom(5, ref rect);
+            // calculate screen rect before saving assets since it might open the AssetSaveDialog window
+            var screenRect = GUIToScreenRect(rect);
+            // save all the assets
+            AssetDatabase.SaveAssets();
+            if (Collab.ShowToolbarAtPosition != null && Collab.ShowToolbarAtPosition(screenRect))
+            {
+                GUIUtility.ExitGUI();
+            }
+        }
+
+        void DoCollabDropDown(Rect rect)
+        {
+            UpdateCollabToolbarState();
+            GUIStyle collabButtonStyle = "OffsetDropDown";
+            bool showPopup = Toolbar.requestShowCollabToolbar;
+            Toolbar.requestShowCollabToolbar = false;
+
+            bool enable = !EditorApplication.isPlaying;
+
+            using (new EditorGUI.DisabledScope(!enable))
+            {
+                bool animate = m_CollabToolbarState == CollabToolbarState.InProgress;
+
+                EditorGUIUtility.SetIconSize(new Vector2(12, 12));
+                if (GetCollabButton().OnGUI(rect, currentCollabContent, animate, collabButtonStyle))
+                {
+                    showPopup = true;
+                }
+                EditorGUIUtility.SetIconSize(Vector2.zero);
+            }
+
+            if (m_CollabToolbarState == CollabToolbarState.Disabled)
+                return;
+
+            if (showPopup)
+            {
+                ShowPopup(rect);
+            }
+        }
+
+        public void OnCollabStateChanged(CollabInfo info)
+        {
+            UpdateCollabToolbarState();
+        }
+
+        public void UpdateCollabToolbarState()
+        {
+            var currentCollabState = CollabToolbarState.UpToDate;
+            bool networkAvailable = UnityConnect.instance.connectInfo.online && UnityConnect.instance.connectInfo.loggedIn;
+            m_DynamicTooltip = "";
+
+            if (UnityConnect.instance.isDisableCollabWindow)
+            {
+                currentCollabState = CollabToolbarState.Disabled;
+            }
+            else if (networkAvailable)
+            {
+                Collab collab = Collab.instance;
+                CollabInfo currentInfo = collab.collabInfo;
+                UnityErrorInfo errInfo;
+                bool error = false;
+                if (collab.GetError((UnityConnect.UnityErrorFilter.ByContext | UnityConnect.UnityErrorFilter.ByChild), out errInfo))
+                {
+                    error = (errInfo.priority <= (int)UnityConnect.UnityErrorPriority.Error);
+                    m_DynamicTooltip = errInfo.shortMsg;
+                }
+
+                if (!currentInfo.ready)
+                {
+                    currentCollabState = CollabToolbarState.InProgress;
+                }
+                else if (error)
+                {
+                    currentCollabState = CollabToolbarState.OperationError;
+                }
+                else if (currentInfo.inProgress)
+                {
+                    currentCollabState = CollabToolbarState.InProgress;
+                }
+                else
+                {
+                    bool collabEnable = Collab.instance.IsCollabEnabledForCurrentProject();
+
+                    if (UnityConnect.instance.projectInfo.projectBound == false || !collabEnable)
+                    {
+                        currentCollabState = CollabToolbarState.NeedToEnableCollab;
+                    }
+                    else if (currentInfo.update)
+                    {
+                        currentCollabState = CollabToolbarState.ServerHasChanges;
+                    }
+                    else if (currentInfo.conflict)
+                    {
+                        currentCollabState = CollabToolbarState.Conflict;
+                    }
+                    else if (currentInfo.publish)
+                    {
+                        currentCollabState = CollabToolbarState.FilesToPush;
+                    }
+                }
+            }
+            else
+            {
+                currentCollabState = CollabToolbarState.Offline;
+            }
+
+            if (Collab.IsToolbarVisible != null)
+            {
+                if (currentCollabState != m_CollabToolbarState ||
+                    Collab.IsToolbarVisible() == m_ShowCollabTooltip)
+                {
+                    m_CollabToolbarState = currentCollabState;
+                    m_ShowCollabTooltip = !Collab.IsToolbarVisible();
+                    Toolbar.RepaintToolbar();
+                }
+            }
+        }
+        
+        void ReserveRight(float width, ref Rect pos)
+        {
+            pos.x += width;
+        }
+
+        void ReserveBottom(float height, ref Rect pos)
+        {
+            pos.y += height;
+        }
+
+        ButtonWithAnimatedIconRotation GetCollabButton()
+        {
+            if (m_CollabButton == null)
+            {
+                const int repaintsPerSecond = 20;
+                const float animSpeed = 500f;
+                const bool mouseDownButton = true;
+                m_CollabButton = new ButtonWithAnimatedIconRotation(() => (float)EditorApplication.timeSinceStartup * animSpeed, Toolbar.RepaintToolbar, repaintsPerSecond, mouseDownButton);
+            }
+
+            return m_CollabButton;
+        }
+
+        public void Dispose()
+        {
+            Collab.instance.StateChanged -= OnCollabStateChanged;
+            UnityConnect.instance.StateChanged -= OnUnityConnectStateChanged;
+            UnityConnect.instance.UserStateChanged -= OnUnityConnectUserStateChanged;
+
+            if (m_CollabButton != null)
+                m_CollabButton.Clear();
+        }
+    }
+} // namespace
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..949d8db94900880052f8ef8ff6f2fbce6faa46eb
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 882f1a4147a284f028899b9c018e63eb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs
new file mode 100644
index 0000000000000000000000000000000000000000..279387502b172d22f97855ba09ddeaaea8340163
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs
@@ -0,0 +1,137 @@
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEditor.Web;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+    [InitializeOnLoad]
+    internal class WebViewStatic : ScriptableSingleton<WebViewStatic>
+    {
+        [SerializeField]
+        WebView m_WebView;
+
+        static public WebView GetWebView()
+        {
+            return instance.m_WebView;
+        }
+
+        static public void SetWebView(WebView webView)
+        {
+            instance.m_WebView = webView;
+        }
+    }
+
+    [InitializeOnLoad]
+    internal class CollabToolbarWindow : WebViewEditorStaticWindow, IHasCustomMenu
+    {
+        internal override WebView webView
+        {
+            get {return WebViewStatic.GetWebView(); }
+            set {WebViewStatic.SetWebView(value); }
+        }
+
+        private const string kWindowName = "Unity Collab Toolbar";
+
+        private static long s_LastClosedTime;
+        private static CollabToolbarWindow s_CollabToolbarWindow;
+
+        public static bool s_ToolbarIsVisible = false;
+
+        const int kWindowWidth = 320;
+        const int kWindowHeight = 350;
+
+        public static void CloseToolbar()
+        {
+            foreach (CollabToolbarWindow window in Resources.FindObjectsOfTypeAll<CollabToolbarWindow>())
+                window.Close();
+        }
+
+        [MenuItem("Window/Asset Management/Collab Toolbar", false /*IsValidateFunction*/, 2, true /* IsInternalMenu */)]
+        public static CollabToolbarWindow ShowToolbarWindow()
+        {
+            //Create a new window if it does not exist
+            if (s_CollabToolbarWindow == null)
+            {
+                s_CollabToolbarWindow = GetWindow<CollabToolbarWindow>(false, kWindowName) as CollabToolbarWindow;
+            }
+
+            return s_CollabToolbarWindow;
+        }
+
+        [MenuItem("Window/Asset Management/Collab Toolbar", true /*IsValidateFunction*/)]
+        public static bool ValidateShowToolbarWindow()
+        {
+            return true;
+        }
+
+        public static bool IsVisible()
+        {
+            return s_ToolbarIsVisible;
+        }
+
+        public static bool ShowCenteredAtPosition(Rect buttonRect)
+        {
+            buttonRect.x -= kWindowWidth / 2;
+            // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time.
+            long nowMilliSeconds = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+            bool justClosed = nowMilliSeconds < s_LastClosedTime + 50;
+            if (!justClosed)
+            {
+                // Method may have been triggered programmatically, without a user event to consume.
+                if (Event.current.type != EventType.Layout)
+                {
+                    Event.current.Use();
+                }
+                if (s_CollabToolbarWindow == null)
+                    s_CollabToolbarWindow = CreateInstance<CollabToolbarWindow>() as CollabToolbarWindow;
+                var windowSize = new Vector2(kWindowWidth, kWindowHeight);
+                s_CollabToolbarWindow.initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+                s_CollabToolbarWindow.Init();
+                s_CollabToolbarWindow.ShowAsDropDown(buttonRect, windowSize);
+                s_CollabToolbarWindow.OnFocus();
+                return true;
+            }
+            return false;
+        }
+
+        // Receives HTML title
+        public void OnReceiveTitle(string title)
+        {
+            titleContent.text = title;
+        }
+
+        public new void OnInitScripting()
+        {
+            base.OnInitScripting();
+        }
+
+        public override void OnEnable()
+        {
+            minSize = new Vector2(kWindowWidth, kWindowHeight);
+            maxSize = new Vector2(kWindowWidth, kWindowHeight);
+            initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+            base.OnEnable();
+            s_ToolbarIsVisible = true;
+        }
+
+        internal new void OnDisable()
+        {
+            s_LastClosedTime = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+            if (s_CollabToolbarWindow)
+            {
+                s_ToolbarIsVisible = false;
+                NotifyVisibility(s_ToolbarIsVisible);
+            }
+            s_CollabToolbarWindow = null;
+
+            base.OnDisable();
+        }
+
+        public new void OnDestroy()
+        {
+            OnLostFocus();
+            base.OnDestroy();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b08bf2aad726842cb2cd0b4246e4fba031d902dd
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/CollabToolbarWindow.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6f516f1ec21a54a59a92bf99db2d9535
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters.meta
new file mode 100644
index 0000000000000000000000000000000000000000..91331532fd2a7c37783b7c7cdb68b9e7d0fcd0ac
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d437fe60bb34f45728664a5d930c1635
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..91d500be7bf37702afdfe2195ca834e4549cc8bc
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs
@@ -0,0 +1,228 @@
+using System.Collections.Generic;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryPresenter
+    {
+        public const int ItemsPerPage = 5;
+        ICollabHistoryWindow m_Window;
+        ICollabHistoryItemFactory m_Factory;
+        IRevisionsService m_Service;
+        ConnectInfo m_ConnectState;
+        CollabInfo m_CollabState;
+        bool m_IsCollabError;
+        int m_TotalRevisions;
+        int m_CurrentPage;
+        int m_RequestedPage;
+        bool m_FetchInProgress;
+
+        BuildAccess m_BuildAccess;
+        string m_ProgressRevision;
+        public bool BuildServiceEnabled {get; set; }
+
+        public CollabHistoryPresenter(ICollabHistoryWindow window, ICollabHistoryItemFactory factory, IRevisionsService service)
+        {
+            m_Window = window;
+            m_Factory = factory;
+            m_Service = service;
+            m_CurrentPage = 0;
+            m_BuildAccess = new BuildAccess();
+            m_Service.FetchRevisionsCallback += OnFetchRevisions;
+        }
+
+        public void OnWindowEnabled()
+        {
+            UnityConnect.instance.StateChanged += OnConnectStateChanged;
+            Collab.instance.StateChanged += OnCollabStateChanged;
+            Collab.instance.RevisionUpdated += OnCollabRevisionUpdated;
+            Collab.instance.JobsCompleted += OnCollabJobsCompleted;
+            Collab.instance.ErrorOccurred += OnCollabError;
+            Collab.instance.ErrorCleared += OnCollabErrorCleared;
+            EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+            m_ConnectState = UnityConnect.instance.GetConnectInfo();
+            m_CollabState = Collab.instance.GetCollabInfo();
+
+            m_Window.revisionActionsEnabled = !EditorApplication.isPlayingOrWillChangePlaymode;
+
+            // Setup window callbacks
+            m_Window.OnPageChangeAction = OnUpdatePage;
+            m_Window.OnUpdateAction = OnUpdate;
+            m_Window.OnRestoreAction = OnRestore;
+            m_Window.OnGoBackAction = OnGoBack;
+            m_Window.OnShowBuildAction = ShowBuildForCommit;
+            m_Window.OnShowServicesAction = ShowServicePage;
+            m_Window.itemsPerPage = ItemsPerPage;
+
+            // Initialize data
+            UpdateBuildServiceStatus();
+            var state = RecalculateState();
+            // Only try to load the page if we're ready
+            if (state == HistoryState.Ready)
+                OnUpdatePage(m_CurrentPage);
+            m_Window.UpdateState(state, true);
+        }
+
+        public void OnWindowDisabled()
+        {
+            UnityConnect.instance.StateChanged -= OnConnectStateChanged;
+            Collab.instance.StateChanged -= OnCollabStateChanged;
+            Collab.instance.RevisionUpdated -= OnCollabRevisionUpdated;
+            Collab.instance.JobsCompleted -= OnCollabJobsCompleted;
+            EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+        }
+
+        private void OnConnectStateChanged(ConnectInfo state)
+        {
+            m_ConnectState = state;
+
+            m_Window.UpdateState(RecalculateState(), false);
+        }
+
+        private void OnCollabStateChanged(CollabInfo state)
+        {
+            // Sometimes a collab state change will trigger even though everything is the same
+            if (m_CollabState.Equals(state))
+                return;
+
+            if (m_CollabState.tip != state.tip)
+                OnUpdatePage(m_CurrentPage);
+
+            m_CollabState = state;
+            m_Window.UpdateState(RecalculateState(), false);
+            if (state.inProgress)
+            {
+                m_Window.inProgressRevision = m_ProgressRevision;
+            }
+            else
+            {
+                m_Window.inProgressRevision = null;
+            }
+        }
+
+        private void OnCollabRevisionUpdated(CollabInfo state)
+        {
+            OnUpdatePage(m_CurrentPage);
+        }
+
+        private void OnCollabJobsCompleted(CollabInfo state)
+        {
+            m_ProgressRevision = null;
+        }
+
+        private void OnCollabError()
+        {
+            m_IsCollabError = true;
+            m_Window.UpdateState(RecalculateState(), false);
+        }
+
+        private void OnCollabErrorCleared()
+        {
+            m_IsCollabError = false;
+            m_FetchInProgress = true;
+            m_Service.GetRevisions(m_CurrentPage * ItemsPerPage, ItemsPerPage);
+            m_Window.UpdateState(RecalculateState(), false);
+        }
+
+        private void OnPlayModeStateChanged(PlayModeStateChange stateChange)
+        {
+            // If entering play mode, disable
+            if (stateChange == PlayModeStateChange.ExitingEditMode ||
+                stateChange == PlayModeStateChange.EnteredPlayMode)
+            {
+                m_Window.revisionActionsEnabled = false;
+            }
+            // If exiting play mode, enable!
+            else if (stateChange == PlayModeStateChange.EnteredEditMode ||
+                     stateChange == PlayModeStateChange.ExitingPlayMode)
+            {
+                m_Window.revisionActionsEnabled = true;
+            }
+        }
+
+        private HistoryState RecalculateState()
+        {
+            if (!m_ConnectState.online)
+                return HistoryState.Offline;
+            if (m_ConnectState.maintenance || m_CollabState.maintenance)
+                return HistoryState.Maintenance;
+            if (!m_ConnectState.loggedIn)
+                return HistoryState.LoggedOut;
+            if (!m_CollabState.seat)
+                return HistoryState.NoSeat;
+            if (!Collab.instance.IsCollabEnabledForCurrentProject())
+                return HistoryState.Disabled;
+            if (!Collab.instance.IsConnected() || !m_CollabState.ready || m_FetchInProgress)
+                return HistoryState.Waiting;
+            if (m_ConnectState.error || m_IsCollabError)
+                return HistoryState.Error;
+
+            return HistoryState.Ready;
+        }
+
+        // TODO: Eventually this can be a listener on the build service status
+        public void UpdateBuildServiceStatus()
+        {
+            foreach (var service in UnityConnectServiceCollection.instance.GetAllServiceInfos())
+            {
+                if (service.name.Equals("Build"))
+                {
+                    BuildServiceEnabled = service.enabled;
+                }
+            }
+        }
+
+        public void ShowBuildForCommit(string revisionID)
+        {
+            m_BuildAccess.ShowBuildForCommit(revisionID);
+        }
+
+        public void ShowServicePage()
+        {
+            m_BuildAccess.ShowServicePage();
+        }
+
+        public void OnUpdatePage(int page)
+        {
+            m_FetchInProgress = true;
+            m_Service.GetRevisions(page * ItemsPerPage, ItemsPerPage);
+            m_Window.UpdateState(RecalculateState(), false);
+            m_RequestedPage = page;
+        }
+
+        private void OnFetchRevisions(RevisionsResult data)
+        {
+            m_FetchInProgress = false;
+            IEnumerable<RevisionData> items = null;
+            if (data != null)
+            {
+                m_CurrentPage = m_RequestedPage;
+                m_TotalRevisions = data.RevisionsInRepo;
+                items = m_Factory.GenerateElements(data.Revisions, m_TotalRevisions, m_CurrentPage * ItemsPerPage, m_Service.tipRevision, m_Window.inProgressRevision, m_Window.revisionActionsEnabled, BuildServiceEnabled, m_Service.currentUser);
+            }
+
+            // State must be recalculated prior to inserting items
+            m_Window.UpdateState(RecalculateState(), false);
+            m_Window.UpdateRevisions(items, m_Service.tipRevision, m_TotalRevisions, m_CurrentPage);
+        }
+
+        private void OnRestore(string revisionId, bool updatetorevision)
+        {
+            m_ProgressRevision = revisionId;
+            Collab.instance.ResyncToRevision(revisionId);
+        }
+
+        private void OnGoBack(string revisionId, bool updatetorevision)
+        {
+            m_ProgressRevision = revisionId;
+            Collab.instance.GoBackToRevision(revisionId, false);
+        }
+
+        private void OnUpdate(string revisionId, bool updatetorevision)
+        {
+            m_ProgressRevision = revisionId;
+            Collab.instance.Update(revisionId, updatetorevision);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c37ecd8326c303bc2cc7840d3caf261a88e8b3e
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a7c91a123806d41a0873fcdcb629b1c4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f62ac6be15f32b70769d2c762f12f94ee62ba434
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fd0a39b4d296d4d509b4f1dbd08d0630
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ac3754d2b766b89f4c0538752d9dab6ae807ec67
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs
@@ -0,0 +1,53 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal class BuildStatusButton : Button
+    {
+        private readonly string iconPrefix = "Icons/Collab.Build";
+        private readonly string iconSuffix = ".png";
+        Label labelElement = new Label();
+        Image iconElement = new Image() {name = "BuildIcon"};
+
+        public BuildStatusButton(Action clickEvent) : base(clickEvent)
+        {
+            iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+            labelElement.text = "Build Now";
+            Add(iconElement);
+            Add(labelElement);
+        }
+
+        public BuildStatusButton(Action clickEvent, BuildState state, int failures) : base(clickEvent)
+        {
+            switch (state)
+            {
+                case BuildState.InProgress:
+                    iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+                    labelElement.text = "In progress";
+                    break;
+
+                case BuildState.Failed:
+                    iconElement.image = EditorGUIUtility.Load(iconPrefix + "Failed" + iconSuffix) as Texture;
+                    labelElement.text = failures + ((failures == 1) ? " failure" : " failures");
+                    break;
+
+                case BuildState.Success:
+                    iconElement.image = EditorGUIUtility.Load(iconPrefix + "Succeeded" + iconSuffix) as Texture;
+                    labelElement.text = "success";
+                    break;
+            }
+
+            Add(iconElement);
+            Add(labelElement);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d74a58aff8353d675950f8449d01113aa5ab8afa
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/BuildStatusButton.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0217a80286f79419daa202f69409f19b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e3bb05a68588af022c0354557f7e385659790ab2
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEditor.Connect;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryDropDown : VisualElement
+    {
+        private readonly VisualElement m_FilesContainer;
+        private readonly Label m_ToggleLabel;
+        private int m_ChangesTotal;
+        private string m_RevisionId;
+
+        public CollabHistoryDropDown(ICollection<ChangeData> changes, int changesTotal, bool changesTruncated, string revisionId)
+        {
+            m_FilesContainer = new VisualElement();
+            m_ChangesTotal = changesTotal;
+            m_RevisionId = revisionId;
+
+            m_ToggleLabel = new Label(ToggleText(false));
+            m_ToggleLabel.AddManipulator(new Clickable(ToggleDropdown));
+            Add(m_ToggleLabel);
+
+            foreach (ChangeData change in changes)
+            {
+                m_FilesContainer.Add(new CollabHistoryDropDownItem(change.path, change.action));
+            }
+
+            if (changesTruncated)
+            {
+                m_FilesContainer.Add(new Button(ShowAllClick)
+                {
+                    text = "Show all on dashboard"
+                });
+            }
+        }
+
+        private void ToggleDropdown()
+        {
+            if (Contains(m_FilesContainer))
+            {
+                CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseAssets");
+                Remove(m_FilesContainer);
+                m_ToggleLabel.text = ToggleText(false);
+            }
+            else
+            {
+                CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandAssets");
+                Add(m_FilesContainer);
+                m_ToggleLabel.text = ToggleText(true);
+            }
+        }
+
+        private string ToggleText(bool open)
+        {
+            var icon = open ? "\u25bc" : "\u25b6";
+            var change = m_ChangesTotal == 1 ? "Change" : "Changes";
+            return string.Format("{0} {1} Asset {2}", icon, m_ChangesTotal, change);
+        }
+
+        private void ShowAllClick()
+        {
+            var host = UnityConnect.instance.GetConfigurationURL(CloudConfigUrl.CloudServicesDashboard);
+            var org = UnityConnect.instance.GetOrganizationId();
+            var proj = UnityConnect.instance.GetProjectGUID();
+            var url = string.Format("{0}/collab/orgs/{1}/projects/{2}/commits?commit={3}", host, org, proj, m_RevisionId);
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowAllOnDashboard");
+            Application.OpenURL(url);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..513b66bf651515d17bddabd3cfa9588b629f7400
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDown.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a483595b0257945278dc75c5ff7d82ee
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3ad43f23ae92a55f4f4e9cba477d58f78212853f
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryDropDownItem : VisualElement
+    {
+        public CollabHistoryDropDownItem(string path, string action)
+        {
+            var fileName = Path.GetFileName(path);
+            var isFolder = Path.GetFileNameWithoutExtension(path).Equals(fileName);
+            var fileIcon = GetIconElement(action, fileName, isFolder);
+            var metaContainer = new VisualElement();
+            var fileNameLabel = new Label
+            {
+                name = "FileName",
+                text = fileName
+            };
+            var filePathLabel = new Label
+            {
+                name = "FilePath",
+                text = path
+            };
+            metaContainer.Add(fileNameLabel);
+            metaContainer.Add(filePathLabel);
+            Add(fileIcon);
+            Add(metaContainer);
+        }
+
+        private Image GetIconElement(string action, string fileName, bool isFolder)
+        {
+            var prefix = isFolder ? "Folder" : "File";
+            var actionName = action.First().ToString().ToUpper() + action.Substring(1);
+            // Use the same icon for renamed and moved files
+            actionName = actionName.Equals("Renamed") ? "Moved" : actionName;
+            var iconElement = new Image
+            {
+                name = "FileIcon",
+                image = EditorGUIUtility.LoadIcon("Icons/Collab." + prefix + actionName + ".png")
+            };
+            return iconElement;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..10bf40eb45e8aeea9b4225db6a48855779d0b8b3
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d912d4873af534bd4a9d44bf1b52f14e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs
new file mode 100644
index 0000000000000000000000000000000000000000..24e5d1ddf7db83f6f176184488972f85189e1aa9
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Linq;
+using System.Security.Cryptography;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryItem : VisualElement
+    {
+        public static RevisionAction s_OnRestore;
+        public static RevisionAction s_OnGoBack;
+        public static RevisionAction s_OnUpdate;
+        public static ShowBuildAction s_OnShowBuild;
+        public static Action s_OnShowServices;
+
+        private readonly string m_RevisionId;
+        private readonly string m_FullDescription;
+        private readonly DateTime m_TimeStamp;
+        private readonly Button m_Button;
+        private readonly HistoryProgressSpinner m_ProgressSpinner;
+        private VisualElement m_ActionsTray;
+        private VisualElement m_Details;
+        private Label m_Description;
+        private Label m_TimeAgo;
+        private readonly Button m_ExpandCollapseButton;
+        private bool m_Expanded;
+
+        private const int kMaxDescriptionChars = 500;
+
+        public bool RevisionActionsEnabled
+        {
+            set
+            {
+                m_Button.SetEnabled(value);
+            }
+        }
+
+        public DateTime timeStamp
+        {
+            get { return m_TimeStamp; }
+        }
+
+        public CollabHistoryItem(RevisionData data)
+        {
+            m_RevisionId = data.id;
+            m_TimeStamp = data.timeStamp;
+            name = "HistoryItem";
+            m_ActionsTray = new VisualElement {name = "HistoryItemActionsTray"};
+            m_ProgressSpinner = new HistoryProgressSpinner();
+            m_Details = new VisualElement {name = "HistoryDetail"};
+            var author = new Label(data.authorName) {name = "Author"};
+            m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp));
+            m_FullDescription = data.comment;
+            var shouldTruncate = ShouldTruncateDescription(m_FullDescription);
+            if (shouldTruncate)
+            {
+                m_Description = new Label(GetTruncatedDescription(m_FullDescription));
+            }
+            else
+            {
+                m_Description = new Label(m_FullDescription);
+            }
+            m_Description.name = "RevisionDescription";
+            var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id);
+            if (data.current)
+            {
+                m_Button = new Button(Restore) {name = "ActionButton", text = "Restore"};
+            }
+            else if (data.obtained)
+            {
+                m_Button = new Button(GoBackTo) {name = "ActionButton", text = "Go back to..."};
+            }
+            else
+            {
+                m_Button = new Button(UpdateTo) {name = "ActionButton", text = "Update"};
+            }
+            m_Button.SetEnabled(data.enabled);
+            m_ProgressSpinner.ProgressEnabled = data.inProgress;
+
+            m_ActionsTray.Add(m_ProgressSpinner);
+            m_ActionsTray.Add(m_Button);
+
+            m_Details.Add(author);
+            m_Details.Add(m_TimeAgo);
+            m_Details.Add(m_Description);
+
+            if (shouldTruncate)
+            {
+                m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" };
+                m_Details.Add(m_ExpandCollapseButton);
+            }
+
+            if (data.buildState != BuildState.None)
+            {
+                BuildStatusButton buildButton;
+                if (data.buildState == BuildState.Configure)
+                    buildButton = new BuildStatusButton(ShowServicePage);
+                else
+                    buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures);
+
+                m_Details.Add(buildButton);
+            }
+
+            m_Details.Add(m_ActionsTray);
+            m_Details.Add(dropdown);
+
+            Add(m_Details);
+
+            this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20);
+        }
+
+        public static void SetUpCallbacks(RevisionAction Restore, RevisionAction GoBack, RevisionAction Update)
+        {
+            s_OnRestore = Restore;
+            s_OnGoBack = GoBack;
+            s_OnUpdate = Update;
+        }
+
+        public void SetInProgressStatus(string revisionIdInProgress)
+        {
+            if (String.IsNullOrEmpty(revisionIdInProgress))
+            {
+                m_Button.SetEnabled(true);
+                m_ProgressSpinner.ProgressEnabled = false;
+            }
+            else
+            {
+                m_Button.SetEnabled(false);
+                if (m_RevisionId.Equals(revisionIdInProgress))
+                {
+                    m_ProgressSpinner.ProgressEnabled = true;
+                }
+            }
+        }
+
+        void ShowBuildForCommit()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowBuild");
+            if (s_OnShowBuild != null)
+            {
+                s_OnShowBuild(m_RevisionId);
+            }
+        }
+
+        void ShowServicePage()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowServices");
+            if (s_OnShowServices != null)
+            {
+                s_OnShowServices();
+            }
+        }
+
+        void Restore()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Restore");
+            if (s_OnRestore != null)
+            {
+                s_OnRestore(m_RevisionId, false);
+            }
+        }
+
+        void GoBackTo()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "GoBackTo");
+            if (s_OnGoBack != null)
+            {
+                s_OnGoBack(m_RevisionId, false);
+            }
+        }
+
+        void UpdateTo()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Update");
+            if (s_OnUpdate != null)
+            {
+                s_OnUpdate(m_RevisionId, true);
+            }
+        }
+
+        void UpdateTimeAgo()
+        {
+            m_TimeAgo.text = TimeAgo.GetString(m_TimeStamp);
+        }
+
+        bool ShouldTruncateDescription(string description)
+        {
+            return description.Contains(Environment.NewLine) || description.Length > kMaxDescriptionChars;
+        }
+
+        string GetTruncatedDescription(string description)
+        {
+            string result = description.Contains(Environment.NewLine) ?
+                description.Substring(0, description.IndexOf(Environment.NewLine)) : description;
+            if (result.Length > kMaxDescriptionChars)
+            {
+                result = result.Substring(0, kMaxDescriptionChars) + "...";
+            }
+            return result;
+        }
+
+        void ToggleDescription()
+        {
+            if (m_Expanded)
+            {
+                CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseDescription");
+                m_Expanded = false;
+                m_ExpandCollapseButton.text = "Show More";
+                m_Description.text = GetTruncatedDescription(m_FullDescription);
+            }
+            else
+            {
+                CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandDescription");
+                m_Expanded = true;
+                m_ExpandCollapseButton.text = "Show Less";
+                m_Description.text = m_FullDescription;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..290bd28e5d5ba089d38d94a30700335e23629ed9
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c4c1445ee948a4124bfa9fb818a17e36
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e7d7aa6cd268dbcda6eed06b4b1c7d37119fd933
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryItemFactory : ICollabHistoryItemFactory
+    {
+        const int k_MaxChangesPerRevision = 10;
+
+        public IEnumerable<RevisionData> GenerateElements(IEnumerable<Revision> revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser)
+        {
+            int index = startIndex;
+
+            foreach (var rev in revisions)
+            {
+                index++;
+                var current = rev.revisionID == tipRev;
+
+                // Calculate build status
+                BuildState buildState = BuildState.None;
+                int buildFailures = 0;
+                if (rev.buildStatuses != null && rev.buildStatuses.Length > 0)
+                {
+                    bool inProgress = false;
+                    foreach (CloudBuildStatus buildStatus in rev.buildStatuses)
+                    {
+                        if (buildStatus.complete)
+                        {
+                            if (!buildStatus.success)
+                            {
+                                buildFailures++;
+                            }
+                        }
+                        else
+                        {
+                            inProgress = true;
+                            break;
+                        }
+                    }
+
+                    if (inProgress)
+                    {
+                        buildState = BuildState.InProgress;
+                    }
+                    else if (buildFailures > 0)
+                    {
+                        buildState = BuildState.Failed;
+                    }
+                    else
+                    {
+                        buildState = BuildState.Success;
+                    }
+                }
+                else if (current && !buildServiceEnabled)
+                {
+                    buildState = BuildState.Configure;
+                }
+
+                // Calculate the number of changes performed on files and folders (not meta files)
+                var paths = new Dictionary<string, ChangeData>();
+                foreach (ChangeAction change in rev.entries)
+                {
+                    if (change.path.EndsWith(".meta"))
+                    {
+                        var path = change.path.Substring(0, change.path.Length - 5);
+                        // Actions taken on meta files are secondary to any actions taken on the main file
+                        if (!paths.ContainsKey(path))
+                            paths[path] = new ChangeData() {path = path, action = change.action};
+                    }
+                    else
+                    {
+                        paths[change.path] = new ChangeData() {path = change.path, action = change.action};
+                    }
+                }
+
+                var displayName = (rev.author != currentUser) ? rev.authorName : "You";
+
+                var item = new RevisionData
+                {
+                    id = rev.revisionID,
+                    index = totalRevisions - index + 1,
+                    timeStamp = TimeStampToDateTime(rev.timeStamp),
+                    authorName = displayName,
+                    comment = rev.comment,
+
+                    obtained = rev.isObtained,
+                    current = current,
+                    inProgress = (rev.revisionID == inProgressRevision),
+                    enabled = revisionActionsEnabled,
+
+                    buildState = buildState,
+                    buildFailures = buildFailures,
+
+                    changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(),
+                    changesTotal = paths.Values.Count,
+                    changesTruncated = paths.Values.Count > k_MaxChangesPerRevision,
+                };
+
+                yield return item;
+            }
+        }
+
+        private static DateTime TimeStampToDateTime(double timeStamp)
+        {
+            DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+            dateTime = dateTime.AddSeconds(timeStamp).ToLocalTime();
+            return dateTime;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3250d9664f4bf84c09d8495239eed9fec4dc76c0
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fc46f91ea1e8e4ca2ab693fef9156dbe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2b8fe65209b2ff1cb49f63cc982c5dc144e9bed4
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs
@@ -0,0 +1,94 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal class CollabHistoryRevisionLine : VisualElement
+    {
+        public CollabHistoryRevisionLine(int number)
+        {
+            AddNumber(number);
+            AddLine("topLine");
+            AddLine("bottomLine");
+            AddIndicator();
+        }
+
+        public CollabHistoryRevisionLine(DateTime date, bool isFullDateObtained)
+        {
+            AddLine(isFullDateObtained ? "obtainedDateLine" : "absentDateLine");
+            AddHeader(GetFormattedHeader(date));
+            AddToClassList("revisionLineHeader");
+        }
+
+        private void AddHeader(string content)
+        {
+            Add(new Label
+            {
+                text = content
+            });
+        }
+
+        private void AddIndicator()
+        {
+            Add(new VisualElement
+            {
+                name = "RevisionIndicator"
+            });
+        }
+
+        private void AddLine(string className = null)
+        {
+            var line = new VisualElement
+            {
+                name = "RevisionLine"
+            };
+            if (!String.IsNullOrEmpty(className))
+            {
+                line.AddToClassList(className);
+            }
+            Add(line);
+        }
+
+        private void AddNumber(int number)
+        {
+            Add(new Label
+            {
+                text = number.ToString(),
+                name = "RevisionIndex"
+            });
+        }
+
+        private string GetFormattedHeader(DateTime date)
+        {
+            string result = "Commits on " + date.ToString("MMM d");
+            switch (date.Day)
+            {
+                case 1:
+                case 21:
+                case 31:
+                    result += "st";
+                    break;
+                case 2:
+                case 22:
+                    result += "nd";
+                    break;
+                case 3:
+                case 23:
+                    result += "rd";
+                    break;
+                default:
+                    result += "th";
+                    break;
+            }
+            return result;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2659a3c369eda325434d4f63f8615cda3fa05a9f
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c737f7a9d78541d1ab25f28f045dd32
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fad3b824866567682726459685401ed91bb751fd
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs
@@ -0,0 +1,69 @@
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal class HistoryProgressSpinner : Image
+    {
+        private readonly Texture2D[] m_StatusWheelTextures;
+        private bool m_ProgressEnabled;
+        private IVisualElementScheduledItem m_Animation;
+
+        public bool ProgressEnabled
+        {
+            set
+            {
+                if (m_ProgressEnabled == value)
+                    return;
+
+                m_ProgressEnabled = value;
+                visible = value;
+
+
+                if (value)
+                {
+                    if (m_Animation == null)
+                    {
+                        m_Animation = this.schedule.Execute(AnimateProgress).Every(33);
+                    }
+                    else
+                    {
+                        m_Animation.Resume();
+                    }
+                }
+                else
+                {
+                    if (m_Animation != null)
+                    {
+                        m_Animation.Pause();
+                    }
+                }
+            }
+        }
+
+        public HistoryProgressSpinner()
+        {
+            m_StatusWheelTextures = new Texture2D[12];
+            for (int i = 0; i < 12; i++)
+            {
+                m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00"));
+            }
+            image = m_StatusWheelTextures[0];
+            style.width = m_StatusWheelTextures[0].width;
+            style.height = m_StatusWheelTextures[0].height;
+            visible = false;
+        }
+
+        private void AnimateProgress(TimerState obj)
+        {
+            int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f);
+            image = m_StatusWheelTextures[frame];
+            MarkDirtyRepaint();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0ded4e8a0ffca141b02d923fef37b0c738f08d48
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/HistoryProgressSpinner.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cf6aca931950a4a6a886e214e9e649c4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..03239a33ee61fc860433a2c75609c8a1d7f09485
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal interface ICollabHistoryItemFactory
+    {
+        IEnumerable<RevisionData> GenerateElements(IEnumerable<Revision> revsRevisions, int mTotalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser);
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..08e908561c0206d5b8abb7eab0b982e76415c41a
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 821f5482c5a3f4389885f4432433f56f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs
new file mode 100644
index 0000000000000000000000000000000000000000..472a70e741abd1016f18a026e2f02ee5a6aa38e7
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal interface IPagerData
+    {
+        int curPage { get; }
+        int totalPages { get; }
+        PageChangeAction OnPageChanged { get; }
+    }
+
+    internal class PagerElement : VisualElement
+    {
+        IPagerData m_Data;
+        readonly Label m_PageText;
+        readonly Button m_DownButton;
+        readonly Button m_UpButton;
+
+        public PagerElement(IPagerData dataSource)
+        {
+            m_Data = dataSource;
+
+            this.style.flexDirection = FlexDirection.Row;
+            this.style.alignSelf = Align.Center;
+
+            Add(m_DownButton = new Button(OnPageDownClicked) {text = "\u25c5 Newer"});
+            m_DownButton.AddToClassList("PagerDown");
+
+            m_PageText = new Label();
+            m_PageText.AddToClassList("PagerLabel");
+            Add(m_PageText);
+
+            Add(m_UpButton = new Button(OnPageUpClicked) {text = "Older \u25bb"});
+            m_UpButton.AddToClassList("PagerUp");
+
+            UpdateControls();
+        }
+
+        void OnPageDownClicked()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "NewerPage");
+            m_Data.OnPageChanged(m_Data.curPage - 1);
+        }
+
+        void OnPageUpClicked()
+        {
+            CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "OlderPage");
+            m_Data.OnPageChanged(m_Data.curPage + 1);
+        }
+
+        public void Refresh()
+        {
+            UpdateControls();
+        }
+
+        void UpdateControls()
+        {
+            var curPage = m_Data.curPage;
+            var totalPages = m_Data.totalPages;
+
+            m_PageText.text = (curPage + 1) + " / " + totalPages;
+            m_DownButton.SetEnabled(curPage > 0);
+            m_UpButton.SetEnabled(curPage < totalPages - 1);
+        }
+    }
+
+    internal enum PagerLocation
+    {
+        Top,
+        Bottom,
+    }
+
+    internal class PagedListView : VisualElement, IPagerData
+    {
+        public const int DefaultItemsPerPage = 10;
+
+        readonly VisualElement m_ItemContainer;
+        readonly PagerElement m_PagerTop, m_PagerBottom;
+        int m_PageSize = DefaultItemsPerPage;
+        IEnumerable<VisualElement> m_Items;
+        int m_TotalItems;
+        int m_CurPage;
+
+        public int pageSize
+        {
+            set { m_PageSize = value; }
+        }
+
+        public IEnumerable<VisualElement> items
+        {
+            set
+            {
+                m_Items = value;
+                LayoutItems();
+            }
+        }
+
+        public int totalItems
+        {
+            set
+            {
+                if (m_TotalItems == value)
+                    return;
+
+                m_TotalItems = value;
+                UpdatePager();
+            }
+        }
+
+        public PageChangeAction OnPageChanged { get; set; }
+
+        public PagedListView()
+        {
+            m_PagerTop = new PagerElement(this);
+
+            m_ItemContainer = new VisualElement()
+            {
+                name = "PagerItems",
+            };
+            Add(m_ItemContainer);
+            m_Items = new List<VisualElement>();
+
+            m_PagerBottom = new PagerElement(this);
+        }
+
+        void LayoutItems()
+        {
+            m_ItemContainer.Clear();
+            foreach (var item in m_Items)
+            {
+                m_ItemContainer.Add(item);
+            }
+        }
+
+        void UpdatePager()
+        {
+            if (m_PagerTop.parent != this && totalPages > 1 && curPage > 0)
+                Insert(0, m_PagerTop);
+            if (m_PagerTop.parent == this && (totalPages <= 1 || curPage == 0))
+                Remove(m_PagerTop);
+
+            if (m_PagerBottom.parent != this && totalPages > 1)
+                Add(m_PagerBottom);
+            if (m_PagerBottom.parent == this && totalPages <= 1)
+                Remove(m_PagerBottom);
+
+            m_PagerTop.Refresh();
+            m_PagerBottom.Refresh();
+        }
+
+        int pageCount
+        {
+            get
+            {
+                var pages = m_TotalItems / m_PageSize;
+                if (m_TotalItems % m_PageSize > 0)
+                    pages++;
+
+                return pages;
+            }
+        }
+
+        public int curPage
+        {
+            get { return m_CurPage; }
+            set
+            {
+                m_CurPage = value;
+                UpdatePager();
+            }
+        }
+
+        public int totalPages
+        {
+            get
+            {
+                var extraPage = 0;
+                if (m_TotalItems % m_PageSize > 0)
+                    extraPage = 1;
+                return m_TotalItems / m_PageSize + extraPage;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..565f7a2e9f65af1e7f615322f1c34efe6f1d8848
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/PagedListView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 50de529b6a28f4a7093045e08810a5df
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9b50e7a53d19f2b7064b67a8cc700e8c160812a3
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs
@@ -0,0 +1,88 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+    internal class StatusView : VisualElement
+    {
+        Image m_Image;
+        Label m_Message;
+        Button m_Button;
+        Action m_Callback;
+
+        public Texture icon
+        {
+            get { return m_Image.image; }
+            set
+            {
+                m_Image.image = value;
+                m_Image.visible = value != null;
+                // Until "display: hidden" is added, this is the only way to hide an element
+                m_Image.style.height = value != null ? 150 : 0;
+            }
+        }
+
+        public string message
+        {
+            get { return m_Message.text; }
+            set
+            {
+                m_Message.text = value;
+                m_Message.visible = value != null;
+            }
+        }
+
+        public string buttonText
+        {
+            get { return m_Button.text; }
+            set
+            {
+                m_Button.text = value;
+                UpdateButton();
+            }
+        }
+
+        public Action callback
+        {
+            get { return m_Callback; }
+            set
+            {
+                m_Callback = value;
+                UpdateButton();
+            }
+        }
+
+        public StatusView()
+        {
+            name = "StatusView";
+
+            this.StretchToParentSize();
+
+            m_Image = new Image() { name = "StatusIcon", visible = false, style = { height = 0f }};
+            m_Message = new Label() { name = "StatusMessage", visible = false};
+            m_Button = new Button(InternalCallaback) { name = "StatusButton", visible = false};
+
+            Add(m_Image);
+            Add(m_Message);
+            Add(m_Button);
+        }
+
+        private void UpdateButton()
+        {
+            m_Button.visible = m_Button.text != null && m_Callback != null;
+        }
+
+        private void InternalCallaback()
+        {
+            m_Callback();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bb634b1937607759931958d185a2951f07684f33
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Collab/Views/StatusView.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 08e9894bdf0834710b22d3c0aa245ac0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..01229c29e42c3c1b447dc2799a00d1d115d04381
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a6ab6fd2b91214e8a9c8ec2224a528de
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0ff038244ab5d3b7e2ea7450b194ae66792060d6
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6b1ae1e78552c459d9ce27048ff51c7f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss
new file mode 100644
index 0000000000000000000000000000000000000000..3968493332ae8b52fd698aded0ec8b1ae27badb5
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss
@@ -0,0 +1,259 @@
+.unity-button {
+    min-height:unset;
+    -unity-text-align:middle-center;
+    margin-left:4px;
+    margin-top:3px;
+    margin-right:4px;
+    margin-bottom:3px;
+    border-left-width:6px;
+    border-top-width:4px;
+    border-right-width:6px;
+    border-bottom-width:4px;
+    padding-left:6 px;
+    padding-top:2 px;
+    padding-right:6 px;
+    padding-bottom:3 px;
+}
+
+.unity-label {
+  overflow: hidden;
+    margin-left:4px;
+    margin-top:2px;
+    margin-right:4px;
+    margin-bottom:2px;
+    padding-left:2 px;
+    padding-top:1 px;
+    min-height: unset;
+}
+
+#HistoryContainer {
+  flex: 1 0 0;
+}
+
+#HistoryItem {
+  flex: 1 0 0;
+  flex-direction: row;
+}
+
+#HistoryDetail {
+  margin-top: 10px;
+  margin-left: 10px;
+  margin-bottom: 10px;
+  margin-right: 10px;
+  padding-top: 4px;
+  flex: 1 0 0;
+}
+
+#Author {
+  -unity-font-style: bold;
+  font-size: 12px;
+}
+
+#HistoryDetail > Button {
+  align-self: flex-end;
+}
+
+CollabHistoryRevisionLine {
+  width: 40px;
+}
+
+#RevisionLine {
+  flex: 1 0 0;
+  margin-left: 35px;
+  width: 1.5px;
+}
+
+#RevisionLine.topLine {
+  height: 20px;
+  flex: 0 0 auto;
+}
+
+#RevisionLine.absentDateLine {
+  background-color: #797676;
+}
+
+.absentRevision #RevisionLine {
+  background-color: #797676;
+}
+
+.currentRevision #RevisionLine.topLine {
+  background-color: #797676;
+}
+
+#RevisionIndex {
+  position: absolute;
+  min-width: 23px;
+  -unity-text-align: middle-right;
+  top: 15.8px;
+  font-size: 9px;
+}
+
+#RevisionIndicator {
+  position: absolute;
+  background-color: #000;
+  border-radius: 3px;
+  width: 8px;
+  height: 8px;
+  border-bottom-width: 2px;
+  border-left-width: 2px;
+  border-right-width: 2px;
+  border-top-width: 2px;
+  top: 20px;
+  left: 32px;
+}
+
+.revisionLineHeader {
+  width: 200px;
+  height: 20px;
+}
+
+.revisionLineHeader > .unity-label {
+  position: absolute;
+  margin-left: 47px;
+  margin-top: 3px;
+}
+
+#PagerItems {
+  flex-direction: column;
+}
+
+PagerElement > .unity-label {
+  margin-top: 8px;
+}
+
+.absentRevision #RevisionIndicator {
+  border-color: #797676;
+}
+
+.absentRevision #RevisionIndex {
+  color: #797676;
+}
+
+.currentRevision #HistoryDetail {
+  border-top-width: 2px;
+}
+
+#HistoryItem #RevisionDescription {
+  white-space: normal;
+}
+
+#HistoryItem #ToggleDescription {
+  align-self: flex-start;
+  padding-top: 0;
+  padding-left: 0;
+  padding-right: 0;
+  padding-bottom: 2;
+}
+
+#HistoryItem #ActionButton {
+  position: absolute;
+  right: 0;
+}
+
+#HistoryItem #BuildIcon {
+  width: 16px;
+  height: 13px;
+}
+
+#HistoryItemActionsTray {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  height: 38px;
+  margin-left: 10px;
+  margin-right: 10px;
+}
+
+CollabHistoryDropDown {
+  border-top-width: 1px;
+}
+
+CollabHistoryDropDown > .unity-label {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+CollabHistoryDropDownItem {
+  flex-direction: row;
+  border-top-width: 1px;
+  overflow: hidden;
+}
+
+#FileIcon {
+  align-self: center;
+  width: 26px;
+  height: 26px;
+}
+
+#FileName {
+  -unity-font-style: bold;
+  padding-bottom: 0;
+  margin-bottom: 0;
+}
+
+#FileIcon {
+  padding-top: 0;
+  margin-top: 0;
+}
+
+#ErrorBar {
+    height: 24px;
+    background-color: #ff0000;
+    color: #000;
+    font-size: 12px;
+}
+
+#ErrorBar > #CloseButton {
+    position: absolute;
+    right: 0;
+    top: 0;
+    width: 24px;
+    height: 24;
+    color: #000;
+    font-size: 18px;
+    -unity-font-style: bold;
+}
+
+#StatusView {
+    flex-direction: column;
+    justify-content: center;
+    align-self: center;
+    align-items: center;
+    flex: 1 0 0;
+}
+
+#StatusView > #StatusIcon {
+    width: 115px;
+    height: 150px;
+}
+
+#StatusView > #StatusMessage {
+    font-size: 22px;
+    width: 230px;
+    white-space: normal;
+    -unity-text-align: middle-center;
+}
+
+#StatusView > #StatusButton {
+    font-size: 12px;
+    margin-top: 20px;
+    background-image: none;
+    width: 108px;
+    height: 29px;
+}
+
+BuildStatusButton.unity-button {
+    flex-direction: row;
+    align-self: flex-end;
+    align-items: center;
+    margin-right: 10px;
+    padding-left:unset;
+    padding-top:unset;
+    padding-right:unset;
+    padding-bottom:unset;
+}
+
+BuildStatusButton.unity-button .unity-label {
+    padding-left: 2px;
+}
+
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..035b66217eb13b772f8a4ebe2737ec7b2517034a
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryCommon.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3a2d94c8977984b67984caeff9fa666e
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: stylesheet
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss
new file mode 100644
index 0000000000000000000000000000000000000000..de436f89f4c7fbe82fe7444feedb2cd1d8854772
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+  background-color: #292929;
+}
+
+.obtainedRevision #HistoryDetail {
+  background-color: #333;
+}
+
+.absentRevision #HistoryDetail {
+  background-color: #595959;
+}
+
+#StatusView {
+  background-color: #292929;
+}
+
+#StatusView > #StatusMessage {
+    color: #959995;
+}
+
+BuildStatusButton.unity-button {
+    color: #B4B4B4;
+    background-image: resource("Builtin Skins/DarkSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+    color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active {
+    background-image: resource("Builtin Skins/DarkSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+    color: #F0F0F0;
+    background-image: resource("Builtin Skins/DarkSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+    color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+    background-image: resource("Builtin Skins/DarkSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+    background-image: resource("Builtin Skins/DarkSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+  border-color: #292929;
+}
+
+CollabHistoryDropDownItem {
+  border-color: #292929;
+}
+
+#RevisionLine.obtainedDateLine {
+  background-color: #0cb4cc;
+}
+
+.obtainedRevision #RevisionLine {
+  background-color: #0cb4cc;
+}
+
+#RevisionIndex {
+  color: #0cb4cc;
+}
+
+#RevisionIndicator {
+  border-color: #0cb4cc;
+}
+
+.currentRevision #RevisionIndicator {
+  background-color: #0cb4cc;
+}
+
+.currentRevision #HistoryDetail {
+  border-color: #0cb4cc;
+}
+
+#StatusView > #StatusButton {
+    background-color: #0cb4cc;
+    border-color: #0cb4cc;
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..35a7d097a875a4211e3aa21ad434d7ae935f56b4
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryDark.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 70d4d75a2877243758b0750cbc75b6eb
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: stylesheet
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss
new file mode 100644
index 0000000000000000000000000000000000000000..3f9b85f309a177385c1d0fa2fabd1adfd35e9ab8
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+  background-color: #a2a2a2;
+}
+
+.obtainedRevision #HistoryDetail {
+  background-color: #c2c2c2;
+}
+
+.absentRevision #HistoryDetail {
+  background-color: #dedede;
+}
+
+#StatusView {
+  background-color: #a2a2a3;
+}
+
+#StatusView > #StatusMessage {
+  color: #000;
+}
+
+BuildStatusButton.unity-button {
+  color: #111;
+  background-image: resource("Builtin Skins/LightSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+  color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+  color: #F0F0F0;
+  background-image: resource("Builtin Skins/LightSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+  color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+  border-color: #a2a2a2;
+}
+
+CollabHistoryDropDownItem {
+  border-color: #a2a2a2;
+}
+
+#RevisionLine.obtainedDateLine {
+  background-color: #018d98;
+}
+
+.obtainedRevision #RevisionLine {
+  background-color: #018d98;
+}
+
+#RevisionIndex {
+  color: #018d98;
+}
+
+#RevisionIndicator {
+  border-color: #018d98;
+}
+
+.currentRevision #RevisionIndicator {
+  background-color: #018d98;
+}
+
+.currentRevision #HistoryDetail {
+  border-color: #018d98;
+}
+
+#StatusView > #StatusButton {
+    background-color: #018d98;
+    border-color: #018d98;
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..28c860e53ddfac7fe81fa38ee4e6b0353c082f08
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Resources/Styles/CollabHistoryLight.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b52bde26a83564960bcb90217f72b910
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: stylesheet
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..66511e1dbaddfafa73801c268f75573a9305ccd5
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef
@@ -0,0 +1,7 @@
+{
+    "name": "Unity.CollabProxy.Editor",
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..03ebeca0dd1d353feda7e8c046f3a18f452243e1
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Editor/Unity.CollabProxy.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 645165c8169474bfbbeb8fb0bcfd26f5
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md b/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..31bde4e47efb13591068afa2c5733ad48ca6f3af
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md
@@ -0,0 +1,31 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*.
+
+    3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+    3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+    3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..30f5c3a68ed000e3df56559ba7261bc4dfcaa450
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c754112a02f354a6696fa4f2b99e95a5
+TextScriptImporter:
+  externalObjects: {}
+  userData:
+  assetBundleName:
+  assetBundleVariant:
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md b/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5cfbd88aca55090dbfa2962883f7445610f7d108
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md
@@ -0,0 +1,16 @@
+# Collab Proxy UPM Package
+This is the packaged version of Collab, currently limited to containing the History and Toolbar windows, along with supporting classes.
+
+## Development
+Check this repository out in your {$PROJECT}/Packages/ folder, under the name com.unity.collab-proxy. The classes will be built by Unity.
+
+## Testing
+In order to run the tests, you will need to add this project to the testables key in your manifest.json - once you have done this, the tests will be picked up by the Unity Test Runner window.
+
+## Building
+You may build this project using msbuild. The commands to do so can be seen under .gitlab-ci.yml.
+
+## Deploying
+Gitlab will automatically build your project when you deploy. You can download the resulting artifact, which will be a dll, and place it in your Editor/bin/ folder. Open the package in Unity to generate the meta files, and then you will be able to publish.
+
+We're currently looking into a way to avoid this manual process.
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b3ad9937271a12f09d89db2f41b8d3afcab1eda0
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ac281230df7b14becb40b3c479f1b429
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f43ddd351e8950ed68460f3bacd2906b12024c71
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1369382d2c5e64dc5b2ec0b6b0a94531
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b80cefdb3ccc8bbc50b104c3aa7fa60b437944f3
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4506ac79f5b274cb1b249ed7f4abfb9a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ba79a2049eef5389f959a91eb27ceeb7f2b7fa05
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs
@@ -0,0 +1,583 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+
+namespace UnityEditor.Collaboration.Tests
+{
+    [TestFixture]
+    internal class HistoryTests
+    {
+        private TestHistoryWindow _window;
+        private TestRevisionsService _service;
+        private CollabHistoryPresenter _presenter;
+
+        [SetUp]
+        public void SetUp()
+        {
+            _window = new TestHistoryWindow();
+            _service = new TestRevisionsService();
+            _presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service);
+        }
+
+        [TearDown]
+        public void TearDown()
+        {
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"),
+                }
+            };
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual("revisionID", item.id);
+            Assert.AreEqual("authorName", item.authorName);
+            Assert.AreEqual("comment", item.comment);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder()
+        {
+            _service.result = new RevisionsResult()
+            {
+                RevisionsInRepo = 4,
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                    new Revision(revisionID: "1"),
+                    new Revision(revisionID: "2"),
+                    new Revision(revisionID: "3"),
+                }
+            };
+
+            _presenter.OnUpdatePage(0);
+            var items = _window.items.ToArray();
+
+            Assert.AreEqual(4, items[0].index);
+            Assert.AreEqual(3, items[1].index);
+            Assert.AreEqual(2, items[2].index);
+            Assert.AreEqual(1, items[3].index);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages()
+        {
+            _service.result = new RevisionsResult()
+            {
+                RevisionsInRepo = 12,
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                    new Revision(revisionID: "1"),
+                    new Revision(revisionID: "2"),
+                    new Revision(revisionID: "3"),
+                    new Revision(revisionID: "4"),
+                }
+            };
+
+            _presenter.OnUpdatePage(1);
+            var items = _window.items.ToArray();
+
+            Assert.AreEqual(12, items[0].index);
+            Assert.AreEqual(11, items[1].index);
+            Assert.AreEqual(10, items[2].index);
+            Assert.AreEqual(9, items[3].index);
+            Assert.AreEqual(8, items[4].index);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(isObtained: false),
+                    new Revision(isObtained: true),
+                }
+            };
+
+            _presenter.OnUpdatePage(0);
+            var items = _window.items.ToArray();
+
+            Assert.IsFalse(items[0].obtained);
+            Assert.IsTrue(items[1].obtained);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "1"),
+                    new Revision(revisionID: "2"),
+                    new Revision(revisionID: "3"),
+                }
+            };
+            _service.tipRevision = "2";
+
+            _presenter.OnUpdatePage(0);
+            var items = _window.items.ToArray();
+
+            Assert.AreEqual(false, items[0].current);
+            Assert.AreEqual(true, items[1].current);
+            Assert.AreEqual(false, items[2].current);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "1"),
+                    new Revision(revisionID: "2"),
+                    new Revision(revisionID: "3"),
+                }
+            };
+            _window.inProgressRevision = "2";
+
+            _presenter.OnUpdatePage(0);
+            var items = _window.items.ToArray();
+
+            Assert.IsFalse(items[0].inProgress);
+            Assert.IsTrue(items[1].inProgress);
+            Assert.IsFalse(items[2].inProgress);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _window.revisionActionsEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(true, item.enabled);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _window.revisionActionsEnabled = false;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(false, item.enabled);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "1"),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = false;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.None, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.None, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = false;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.Configure, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = false;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.Configure, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0"),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.None, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        revisionID: "0",
+                        buildStatuses: new CloudBuildStatus[1]
+                    {
+                        new CloudBuildStatus(complete: true, success: true),
+                    }
+                    ),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.Success, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        revisionID: "0",
+                        buildStatuses: new CloudBuildStatus[1]
+                    {
+                        new CloudBuildStatus(complete: false),
+                    }
+                    ),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.InProgress, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        revisionID: "0",
+                        buildStatuses: new CloudBuildStatus[1]
+                    {
+                        new CloudBuildStatus(complete: true, success: false),
+                    }
+                    ),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.Failed, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        revisionID: "0",
+                        buildStatuses: new CloudBuildStatus[3]
+                    {
+                        new CloudBuildStatus(complete: true, success: false),
+                        new CloudBuildStatus(complete: true, success: false),
+                        new CloudBuildStatus(complete: true, success: true),
+                    }
+                    ),
+                }
+            };
+            _service.tipRevision = "0";
+            _presenter.BuildServiceEnabled = true;
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(BuildState.Failed, item.buildState);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+                }
+            };
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+            var changes = item.changes.ToList();
+
+            Assert.AreEqual("Path0", changes[0].path);
+            Assert.AreEqual("Path1", changes[1].path);
+            Assert.AreEqual("Path2", changes[2].path);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+                }
+            };
+
+            _presenter.OnUpdatePage(0);
+            var item = _window.items.First();
+
+            Assert.AreEqual(3, item.changes.Count);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated()
+        {
+            for (var i = 0; i < 20; i++)
+            {
+                _service.result = new RevisionsResult()
+                {
+                    Revisions = new List<Revision>()
+                    {
+                        new Revision(revisionID: "0", entries: GenerateChangeActions(i)),
+                    }
+                };
+
+                _presenter.OnUpdatePage(0);
+                var item = _window.items.First();
+
+                Assert.AreEqual(i > 10, item.changesTruncated);
+            }
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)),
+                }
+            };
+
+            _presenter.OnUpdatePage(1);
+            var item = _window.items.First();
+
+            Assert.AreEqual(10, item.changes.Count);
+            Assert.AreEqual(12, item.changesTotal);
+            Assert.AreEqual(true, item.changesTruncated);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        authorName: "Test",
+                        author: "test",
+                        revisionID: "",
+                        entries: new ChangeAction[2]
+                    {
+                        new ChangeAction(path: "Path1", action: "Action1"),
+                        new ChangeAction(path: "Path1.meta", action: "Action1"),
+                    }
+                    ),
+                }
+            };
+
+            _presenter.OnUpdatePage(1);
+            var item = _window.items.First();
+
+            Assert.AreEqual(1, item.changes.Count);
+            Assert.AreEqual(1, item.changesTotal);
+            Assert.AreEqual("Path1", item.changes.First().path);
+        }
+
+        [Test]
+        public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted()
+        {
+            _service.result = new RevisionsResult()
+            {
+                Revisions = new List<Revision>()
+                {
+                    new Revision
+                    (
+                        authorName: "Test",
+                        author: "test",
+                        entries: new ChangeAction[1]
+                    {
+                        new ChangeAction(path: "Folder1.meta", action: "Action1"),
+                    }
+                    ),
+                }
+            };
+
+            _presenter.OnUpdatePage(1);
+            var item = _window.items.First();
+
+            Assert.AreEqual(1, item.changes.Count);
+            Assert.AreEqual(1, item.changesTotal);
+            Assert.AreEqual("Folder1", item.changes.First().path);
+        }
+
+        private static ChangeAction[] GenerateChangeActions(int count)
+        {
+            var entries = new ChangeAction[count];
+            for (var i = 0; i < count; i++)
+                entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i);
+            return entries;
+        }
+    }
+
+    internal class TestRevisionsService : IRevisionsService
+    {
+        public RevisionsResult result;
+        public event RevisionsDelegate FetchRevisionsCallback;
+
+        public string tipRevision { get; set; }
+        public string currentUser { get; set; }
+
+        public void GetRevisions(int offset, int count)
+        {
+          if(FetchRevisionsCallback != null)
+          {
+            FetchRevisionsCallback(result);
+          }
+        }
+    }
+
+    internal class TestHistoryWindow : ICollabHistoryWindow
+    {
+        public IEnumerable<RevisionData> items;
+
+        public bool revisionActionsEnabled { get; set; }
+        public int itemsPerPage { get; set; }
+        public string errMessage { get; set; }
+        public string inProgressRevision { get; set; }
+        public PageChangeAction OnPageChangeAction { get; set; }
+        public RevisionAction OnGoBackAction { get; set; }
+        public RevisionAction OnUpdateAction { get; set; }
+        public RevisionAction OnRestoreAction { get; set; }
+        public ShowBuildAction OnShowBuildAction { get; set; }
+        public Action OnShowServicesAction { get; set; }
+
+        public void UpdateState(HistoryState state, bool force)
+        {
+        }
+
+        public void UpdateRevisions(IEnumerable<RevisionData> items, string tip, int totalRevisions, int currPage)
+        {
+            this.items = items;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d648a7ff5a5774f0428df6f2865786168b75eb21
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/HistoryTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 23a56a19774ed42b6b65646af08a003c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..3467a9ed66cbd7a5668d7aafd601705c7bd7f985
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
@@ -0,0 +1,13 @@
+{
+    "name": "Unity.CollabProxy.EditorTests",
+    "references": [
+        "Unity.CollabProxy.Editor"
+    ],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..57db5c7d8ec7d6acb5394ee7e997dca644b7800d
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 782de34c17796430ba8d0ceddb60944e
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json b/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..473c78213738b4103e5f5bb65ea6e0defb83d9e7
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json
@@ -0,0 +1,21 @@
+{
+  "name": "com.unity.collab-proxy",
+  "displayName": "Unity Collaborate",
+  "version": "1.2.15",
+  "unity": "2018.3",
+  "description": "Collaborate is a simple way for teams to save, share, and sync their Unity project",
+  "keywords": [
+    "collab",
+    "collaborate",
+    "teams",
+    "team",
+    "cloud",
+    "backup"
+  ],
+  "dependencies": {},
+  "repository": {
+    "type": "git",
+    "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/cloud-services/collab-proxy.git",
+    "revision": "95a78b0bc11f99338fc2bd037a817aa69d199b56"
+  }
+}
diff --git a/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json.meta b/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c52d0c603d9fad0b0cc95e8f0ff0380e82e24cb4
--- /dev/null
+++ b/Library/PackageCache/com.unity.collab-proxy@1.2.15/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57b0c806ba25b48aa8a6ecb3345a4a9b
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..fcb248a74fa8210c4fef3844d8cec4bc9f6a7da8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md
@@ -0,0 +1,140 @@
+# Changelog
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [2.0.8] - 2019-09-17
+- Open offline documentations when online documentations are not accessible.
+
+## [2.0.7] - 2019-03-06
+- Fix version parse for .NET 3.5
+
+## [2.0.4] - 2018-12-02
+- Fix version conversion to support different CultureInfos
+
+## [2.0.3] - 2018-10-10
+- When a preview package is installed, keep showing updates even if "Show Preview Packages" is not checked
+- When user as not already choose to show or hide Preview Packages:
+	- If a preview package is already installed, "Show Preview Packages" is checked
+	- If no preview packages are installed, "Show Preview Packages" is not checked
+
+## [2.0.2] - 2018-10-04
+- Documentation Update
+- Update dialog title to "Unity Package Manager"
+
+## [2.0.1] - 2018-09-14
+- Move undesired public classes to internal
+- Minor fix to the documentation
+
+## [2.0.0] - 2018-09-10
+- Always mark a package as up to date when it's not installed
+- Add "Advanced" menu
+- Hide preview packages by default
+- Labelled packages with major version '0' as preview
+- Fixed cropped error message
+- Disabled downgrading Package Manager UI to incompatible versions
+- Updated docs to reflect the new UI
+- Fix incorrect verified tag on preview packages
+- UI Fixes:
+	- Change mouse cursor when hovering over links
+	- Tweak UI layout for better alignment
+- Fixed dropdown to work with 2018.3 editor
+- Updated style to reflect changes in VisualElements
+- Added packages serialization to avoid unnecessary refreshes
+- Enable "View Documentation" Button on built-in packages, and make it point to the url contained in the description string
+- Added persistent error icon when there are package add or remove errors
+- Filter by name, category, version and release tag
+- Show All Package by default
+- MenuDropdown for All packages/In project/Built-in
+- UI redesign
+- Remove sentence "This package is installed for..." and all other sentence regarding status of the package
+- Hide buttons for embedded, git and local packages
+- Display "No results for ""
+
+## [1.9.9] - 2018-05-09
+- Only show user visible versions in the UI
+
+## [1.9.8] - 2018-05-01
+- Fixed package to work with 2018.3
+- Deprecated 2018.1 because of its inability to update without error
+
+## [1.9.6] - 2018-04-10
+- Added ability to choose a package version
+- Added loading indicator when retrieving package lists
+
+## [1.9.5] - 2018-03-28
+- Optimize packages list loading
+- Fixes for UXML factories changes in Unity
+- UI Fixes:
+	- "View changes" update position and label should say "View Changelog"
+	- Packages list should not have padding
+	- preview and verified tags should be lower case everywhere
+	- the package displayed name should stay on 1 line
+
+## [1.9.3] - 2018-03-11
+- Added caching for faster UI response time
+- Exposed APIs for the Package Manager UI extension mechanism
+
+## [1.8.2] - 2018-03-02
+- Modified Tags to reflect new package workflow (Preview -> Released(no tag) -> Verified)
+
+## [1.8.1] - 2018-02-23
+- Removed Recommended tag if package version is alpha, beta or experimental
+
+## [1.8.0] - 2018-02-16
+- Removed support built-in packages
+- Fixed packages sorting in All tab
+- Fixed error reporting with an invalid manifest
+
+## [1.7.2] - 2018-02-08
+- Fixed errors when an exception is thrown during an operation
+- Changed to only show "View Changes" when there is an update button
+- Fixed typos in dialog when updating package manager ui
+
+## [1.7.0] - 2018-02-05
+- Added 'View Documentation' link to package details
+- Added 'View changes' link to package details
+
+## [1.6.1] - 2018-01-30
+### Fixes
+- When updating from 1.5.1, ask user to confirm close of window prior to update
+- Made window dockable
+- Reworked UI styles
+- Enhanced keyboard navigation
+
+## [1.5.1] - 2018-01-18
+### Fixes
+- Replaced VisualContainer by VisualElement in code and templates
+- Moved "Project->Packages->Manage" menu item to "Window->Package Manager"
+- Showed the latest version and description in tab "Install" instead of the current version
+- Added "Recommended" tag properly
+- Added "Go back to" when latest version is less than current one
+- Removed "Update to" when current version is greater than latest one. (case for embedded or local packages)
+- Replaced packages action button label:
+	- "Install" instead of "Add" for packages
+	- "Enable/Disable" instead of "Add/Remove" for built-in packages
+- Added "alpha", "beta", "experimental" and "recommended" tags support
+- Added loading progress while opening window
+- Added package description and display name update
+- Added extra messaging on package state
+- Performed Documentation update
+
+## [1.3.0] - 2017-12-12
+### Changes
+- Added assembly definition files
+- Forced SemVer to use .NetStandard
+- Fixed ValidationSuiteTests tests
+- Handled compatible versions returned in PackageInfo
+
+## [1.2.0] - 2017-11-16
+### Fixes
+- Fixed flickering test When_Default_FirstPackageUIElement_HasSelectedClass, use package only
+- Fixed documentation
+- Added Doxygen configuration file
+- Removed unused fields in package.json
+- Changed 'Modules' for 'Built In Packages'
+- Removed version display for Built In Packages
+
+## [1.0.0] - 2017-11-10
+### This is the first release of *Unity Package Manager UI*.
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..abc6762f893022dd9e80ce9b11b593f5c18960d4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6277a751c6c9f46359fc7004b3ee12f0
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DetailsPane.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DetailsPane.png
new file mode 100644
index 0000000000000000000000000000000000000000..e1c8fc9e61fb0414701d605795d58410e07d5972
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DetailsPane.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DocSite.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DocSite.png
new file mode 100644
index 0000000000000000000000000000000000000000..25b4fb94ee4dc8cd01c2b18cabdfebd17f8d7e8a
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-DocSite.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-ExternalPackageButton.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-ExternalPackageButton.png
new file mode 100644
index 0000000000000000000000000000000000000000..df69fdf75ea0f5422f9adb221cfba8613546adb8
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-ExternalPackageButton.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-Main.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-Main.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9e1803a701d232338a9b461af904323486244f4
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-Main.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-SearchResults.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-SearchResults.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad43b6b08fa6c19c16c58a168d137f8665f3e259
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-SearchResults.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Network.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Network.png
new file mode 100644
index 0000000000000000000000000000000000000000..e276b57cca27f39dc589f241c6db789d5da1fe6e
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Network.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Update.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Update.png
new file mode 100644
index 0000000000000000000000000000000000000000..62757a818e251aa17babb230e5f0227134d223e8
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-StatusBar_Update.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-checkmark.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-checkmark.png
new file mode 100644
index 0000000000000000000000000000000000000000..05dbce91ec4d755a882632f4d44a2d31e5baf79d
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-checkmark.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-downloadicon.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-downloadicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..4393f6740bf063cfcca0d5aaf1f98cce3af814bc
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-downloadicon.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-errorflag.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-errorflag.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7fa0ef745bd9713e0d192af76c2ca721b980f0e
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/Images/PackageManagerUI-errorflag.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/package-manager-ui.md b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/package-manager-ui.md
new file mode 100644
index 0000000000000000000000000000000000000000..3c969cb1cd05dbf4fb9fb75d6c4a12c13c5ea023
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Documentation~/package-manager-ui.md
@@ -0,0 +1,372 @@
+# Unity Package Manager
+
+A package is a container that holds any combination of Assets, Shaders, Textures, plug-ins, icons, and scripts that enhance various parts of your Project, including Unity modules (such as Physics or Animation). Unity packages are newer, more tightly integrated versions of Asset Store packages, able to deliver a wide range of enhancements to Unity.
+
+Use the Unity Package Manager (in Unity’s top menu: __Window__ > __Package Manager__) to view which packages are available for installation or already installed in your Project. In addition, you can use this window to see [which versions are available](#VersionList), and [install](#PackManInstall), [remove](#PackManRemove), [disable](#PackManDisable), or [update](#PackManUpdate) packages for each Project.
+
+![Packages window](Images/PackageManagerUI-Main.png)
+
+The Packages window displays:
+
+- (A) The [package scope drop-down menu](#scope), which allows you to filter which packages appear in the list.
+- (B) The [Advanced button](#advanced), which allows you to display preview packages in addition to packages that have been verified to work with Unity.
+- (C) The [search box](#searchText), which allows you to look for packages by name.
+- (D) The [packages list view](#PackManLists), which displays all packages that match the filter and search parameters you specify.
+- (E) The [package-specific detail view](#PackManDetails), which displays information specific to the package selected in the list.
+- (F) The [status bar](#statusbar), which displays messages about the package load status and warnings about the network.
+- (G) The [Add package from disk button](#extpkg), which allows you to specify the location of an external package.
+
+<a name="PackManLists"></a>
+## Finding packages
+
+The Packages window displays the following types of Unity packages:
+
+- **Read-only packages**
+
+  These are packages which the Package Manager downloads from the [Unity package registry](#PackManRegistry) as needed. They are not bundled with the Project source and may have dependencies on other packages in external Projects. This type is typical of most Unity packages.
+
+- **Local packages**
+
+  These are packages that you saved on your computer in an [external](#extpkg) location outside of your current Unity Project.
+
+- **Built-in packages**
+
+  These represent some of the core Unity features. You can use these packages to [turn Unity modules on and off](#PackManDisable).
+
+**Note**: You can find out more about what each module implements in the [Unity Scripting API](https://docs.unity3d.com/ScriptReference/). Each module assembly page lists which APIs the built-in package implements.
+
+By default, the Packages window displays the list of all packages either registered in the [package registry](#PackManRegistry) or installed [locally](#extpkg).
+
+The following icons show you package status:
+
+![check mark](Images/PackageManagerUI-checkmark.png) A check mark indicates that the package is already [installed](#PackManInstall) or [enabled](#PackManDisable).
+
+![download icon](Images/PackageManagerUI-downloadicon.png) The download icon indicates that the installed packages has [an available update](#PackManUpdate).
+
+![error indicator](Images/PackageManagerUI-errorflag.png) An error icon indicates that something went wrong during installation or loading. For more advice on resolving errors, see [Error messages](#troubleshooting) below.
+
+You can [filter](#scope) the list to display only packages installed in your Project (including [local](#extpkg) packages), or display only built-in Unity packages. You can also [search](#searchText) for a specific package by package name, tag, or package version number.
+
+<a name="scope"></a>
+### Filtering the list
+
+To change which packages appear in the list, select the scope you want from the drop-down menu in the left hand corner of the Packages window.
+
+You can select from these options:
+
+- The **All packages** scope (the default) displays all packages on the [package registry](#PackManRegistry), regardless of whether they are already installed in your Project. This also includes [local](#extpkg) packages (which are always installed).
+- The **In Project** scope displays all packages currently installed in your Project, including [local](#extpkg) packages.
+- The **Built-in packages** scope displays only built-in Unity packages.
+
+When you select a new scope, your choice appears on the package scope drop-down menu and the list displays the packages matching your choice.
+
+**Note:** If you entered any text in the [search box](#searchText), the list only displays packages which match both the scope and the search criteria.
+
+<a name="advanced"></a>
+### Advanced button
+
+The **Advanced** button opens a drop-down menu that allows you to show preview packages. Preview package are not verified to work with Unity and might be unstable. They are not not supported in production environments.
+
+To show the preview packages that are available, click the **Advanced** button, then click the **Show preview packages** menu item.
+
+<a name="searchText"></a>
+### Searching for packages
+
+You can use the search box at the top of the Packages window to find any packages that match the text you enter. The Package Manager updates the package list as you enter text, displaying every package within the current scope that matches. For example, if you enter `web` in the search box, the list displays different results depending on whether you chose the **Built-in packages** scope or the **All packages** scope:
+
+![Built-in package scope](Images/PackageManagerUI-SearchResults.png)
+
+You can look for a package by its [package name](#PackManManifestsPackage), its [tag name](#version_tags), or its [package version number](#VersionList).  The Package Manager analyzes the text that you enter to detect which method you are using and updates the list of packages dynamically.
+
+**Package name**
+
+You can search for either the display name as it appears in the Packages window, or the registered package name that begins with `com.unity`.
+
+Your search text could match the beginning, middle, or end of the package's name.
+
+**Tag name**
+
+To search by tag name, enter one of the package version tags. For example, if you enter `verified` in the search box, only packages with a verified tag appear, regardless of their package name.
+
+**Version number**
+
+Enter the [version number](#VersionList) in version order (`MAJOR.MINOR.PATCH`). For example, typing `1` returns all packages with versions matching `1.x.x` (for example, `1.0.0`, `1.3.2`, and `1.10.1` all match but not `0.1.0` ).
+
+<a name="statusbar"></a>
+### Status bar
+
+The Package Manager displays messages in the status bar at the bottom left of the Packages window.
+
+There are typically three status messages that you might see. The **Loading packages** message appears briefly the first time you open Packman UI in a new Project. However, if the Package Manager [detects a problem](#troubleshooting), such as a missing network connection, the Package Manager displays a warning in the status bar:
+
+![Network error message](Images/PackageManagerUI-StatusBar_Network.png)
+
+You will also often see a message informing you when the last update occurred:
+
+![Update message](Images/PackageManagerUI-StatusBar_Update.png)
+
+<a name="PackManDetails"></a>
+## Viewing package details
+
+The pane on the right side of the Packages window displays details about the selected package.
+
+![Details pane](Images/PackageManagerUI-DetailsPane.png)
+
+These details include the following information:
+ - (A) The display name
+ - (B) The [version number](#VersionList) (and [tag](#version_tags), if available)
+ - \(C\) The [links](#links) to open the package documentation page, the package change log (if available), and the license information.
+ - (D) The official package name from the [registry](#PackManRegistry) starting with `com.unity.`
+ - (E) The author
+ - (F) A brief description
+ - (G) Buttons to [install](#PackManInstall) or [update](#PackManUpdate) a package (or the **Up to date** message if the selected version is already installed)
+ - (H) The package version drop-down menu
+ - (I) Buttons to [remove](#PackManRemove) or [disable](#PackManDisable) the package
+
+<a name="VersionList"></a>
+### List of versions
+
+You can view the list of versions available for the current package by clicking the version drop-down menu beside the **Update to** or **Install** button in the upper right of the Package specific detail view.
+
+- (A) The main menu displays the current version, the latest version (even if it is a preview), and the verified version.
+- (B) The submenu displays all available versions.
+
+You can select any of these versions for the current package and install that specific version using the **Install** or **Update to** button.
+
+<a name="version_tags"></a>
+### Version tags
+
+Some packages display tags next to the version number. These tags convey information about that version of the package.
+
+The Package Manager uses the following values:
+
+| **Tag** | **Meaning** |
+|--|--|
+| `Verified` | This package has been verified by Unity's Quality Assurance team to work with a specific version of the Editor. |
+| `Preview` | This package is at an early stage of the release cycle and may not have been documented and fully validated by either the development team or Unity's Quality Assurance team. |
+| `Local` | This package is located on your local disk but is external to your Unity Project folder. |
+| *(no tag)* | This package is considered production quality, which means it is fully validated, documented, supported, and incrementally updated. |
+
+
+<a name="links"></a>
+### Finding more information
+
+You can find out more about a package by viewing its documentation, changelog, or license information.
+
+To access any of these pages, click the **View documentation**, **View changelog**, or **View licences** links.
+
+The package page opens in your default browser.
+
+![Package information page](Images/PackageManagerUI-DocSite.png)
+
+To switch back and forth between the *Manual* documentation, the *Scripting API* documentation, the *Changelog*, and the *License* information for this package, click the corresponding link at the top of the page.
+
+<a name="PackManOpen"></a>
+## Installing, removing, disabling, and updating packages
+You can perform a variety of tasks through the Packages window:
+
+ - [Install a new package](#PackManInstall)
+ - [Remove an installed package](#PackManRemove)
+ - [Disable a built-in package](#PackManDisable)
+ - [Update an installed package](#PackManUpdate)
+ - [Specify an external package location](#extpkg)
+
+### Accessing the Packages window
+
+To open the Packages window, navigate to Unity's main menu and go to **Window** > **Package Manager**.
+
+<a name="PackManInstall"></a>
+### Installing a new package
+
+To install a new package:
+
+1.  Open the Packages window and select **All packages** from the [package scope](#scope) drop-down menu.
+2.  Select the package you want to install from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
+3. Select the version you want from the [version drop-down menu](#VersionList).
+4. Click the **Install** button. When the progress bar finishes, the new package is ready to use.
+
+<a name="PackManRemove"></a>
+### Removing an installed package
+
+You can only remove packages which are not required by another package.
+
+When you remove a package, any Editor or run-time functionality which it implemented is no longer available.
+
+To remove an installed package:
+
+1. Open the Packages window and select **In Project** (or **All packages**) from the [package scope](#scope) drop-down menu.
+2. Select the package you want to remove from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
+3. Click the **Remove** button. When the progress bar finishes, the package disappears from the list.
+
+You can restore a removed package from the list when you are in the **All packages** scope.
+
+<a name="PackManDisable"></a>
+### Disabling a built-in package
+
+You can disable a built-in package if you don't need some modules and you want to save resources. However, when you disable a built-in package, the corresponding Unity functionality is no longer available. This results in the following:
+
+- If you use a Scripting API implemented by a disabled package, you get compiler errors.
+- Components implemented by the disabled built-in package are also disabled, which means you cannot add them to any GameObjects. If you have a GameObject that already has one of these components, Unity ignores them in Play mode. You can see them in the Inspector window but they are greyed out to indicate that they are not available.
+- When building a game, Unity strips all disabled components. For build targets which support engine code stripping (like WebGL, iOS, and Android), Unity doesn't add any code from a disabled built-in package.
+
+To disable a built-in package:
+  1. Open the Packages window and select **Built-in packages** from the [package scope](#scope) drop-down menu.
+  2. Select the package you want to remove from the [list of packages](#PackManLists). Its information appears in the Details pane.
+  3. Click the **Disable** button. When the progress bar finishes, the check mark no longer appears next to the built-in package and the **Disable** button becomes an **Enable** button.
+
+To re-enable a disabled built-in package, click the **Enable** button.
+
+<a name="PackManUpdate"></a>
+### Updating an installed package
+
+You can update a package while in either the **In Project** or **All** mode:
+
+1. Open the Packages window. An arrow indicator appears next to any packages that have updates available.
+2. Select the package you want to update from the [list of packages](#PackManLists). The package information appears in the [details pane](#PackManDetails).
+3. Select the version you want from the [version drop-down menu](#VersionList).
+4. Click the **Update to** button.
+
+When the progress bar finishes, the new package version information appears in the Details pane, and any new functionality is immediately available.
+
+<a name="extpkg"></a>
+### Specifying a local package location
+
+The Package Manager can load a package from anywhere on your computer even if you saved it outside your Unity Project folder. For example, if you have a package called `com.unity.my-local-package` and you save it on the `Desktop` but your Unity Project is under the `Documents` folder.
+
+To load a package from your local disk:
+
+1. Click the plus (`+`) icon in the status bar.
+
+   The **Add package from disk** button appears.
+
+   ![Add package from disk button](Images/PackageManagerUI-ExternalPackageButton.png)
+
+2. Click the **Add package from disk** button to bring up a file browser.
+3. Navigate to the folder root of your local package.
+4. Double-click the `package.json` file in the file browser.
+
+   The file browser closes and the package now appears in the [package list](#PackManLists) with the `local` tag.
+
+<a name="troubleshooting"></a>
+## Error messages
+
+The Package Manager displays error indicators when it encounters problems:
+
+- **System-wide issues**
+
+  Error messages that appear in the [status bar](#statusbar) indicate the Package Manager has detected an issue that is not related to a specific package. For example, if the Package Manager cannot access the [package registry server](#PackManRegistry), it displays this message in the status bar:
+
+  ![Network error message](Images/PackageManagerUI-StatusBar_Network.png)
+
+  If your network cannot reach the package registry server, it is probably because there is a connection problem with the network. When you or your system administrator fix the network error, the status bar clears.
+
+- **Package-specific issues**
+
+  If a specific package has a problem when loading or installing, the error icon (![error indicator](Images/PackageManagerUI-errorflag.png)) appears in the [package list](#PackManLists) next to the compromised package. To find out what the problem is, open the compromised package's [details pane](#PackManDetails).
+
+## Understanding how packages work
+
+In addition to its contents (Assets, Shaders, Textures, plug-ins, icons, and scripts), a Unity package contains a [package manifest file](#PackManManifestsPackage). The package manifest tells Unity how to display its information page in the Packages window, and how to install the package in the Project.
+
+It also contains several files that help manage package deployment, including the tests, samples, license, changelog, and documentation.
+
+<a name="PackManManifests"></a>
+### Manifests
+
+There are two types of manifest files: [Project](#PackManManifestsProject) manifests (`manifest.json`), and [package](#PackManManifestsPackage) manifests (`package.json`). Both files use JSON (JavaScript Object Notation) syntax to communicate with the Package Manager, by describing which packages are available for each Project, and what each package contains.
+
+<a name="PackManManifestsProject"></a>
+#### Project manifests
+
+Project manifests (`manifest.json`) tell the Package Manager which packages and versions are available to the Project.
+
+Project manifests support the following value:
+
+| Key | JSON Type | Description |
+|--|--|--|
+| `dependencies` | Object |List of packages for the Package Manager to load. These are usually packages officially registered with Unity, but may also include [local packages that are external](#extpkg) to your Unity project. |
+
+
+Example of a `manifest.json` file:
+
+	{
+		"dependencies": {
+			"com.unity.package-1": "1.0.0",
+			"com.unity.package-2": "2.0.0",
+			"com.unity.package-3": "3.0.0",
+			"com.unity.my-local-package": "file:/<external_path>/com.unity.my-local-package"
+		}
+	}
+
+Unity stores each Project manifest in the `[your_Project_root_folder]/Packages/manifest.json` file.
+
+<a name="PackManManifestsPackage"></a>
+#### Package manifests
+
+The Package Manager uses package manifests (`package.json`) to determine which version of the package to load, and what information to display in the Packages window.
+
+Package manifests support the following values:
+
+| Key | JSON Type | Description |
+|--|--|--|
+| `name` | String |The officially registered package name, following this naming convention: `"com.unity.[package name]"`. For example, `"com.unity.resourcemanager"` |
+| `displayName` | String |The package name as it appears in the Packages window. For example, `"Resource Manager"` |
+| `version` | String |The package version `"MAJOR.MINOR.PATCH"`. Unity packages follow the [Semantic Versioning](https://semver.org) system. For example, `"1.3.0"`. |
+| `unity` | String |The Unity version that supports this package. For example, `"2018.1"` indicates compatibility starting with Unity version 2018.1. |
+| `description` | String |A brief description of the package. This is the text that appears on the Details pane of the Packages window. Some special formatting character codes are supported, such as line breaks (`\n`) and bullets (`\u25AA`). |
+| `category` | String |The category this packages is in. For example, `"Forces"`. |
+| `dependencies` | Object |A list of packages that this package depends on, expressed as a JSON dictionary where the key is the package name and the value is the version number. Unity downloads all dependencies and loads them into the project alongside this package. |
+
+Example of a `package.json` file:
+
+	{
+		"name": "com.unity.package-4",
+		"displayName": "Package Number 4",
+		"version": "2.5.1",
+		"unity": "2018.2",
+		"description": "This package provides X, Y, and Z. \n\nTo find out more, click the \"View documentation\" link.",
+		"keywords": ["key X", "key Y", "key Z"],
+		"category": "Controllers",
+		"dependencies": {
+			"com.unity.package-1": "1.0.0",
+			"com.unity.package-2": "2.0.0",
+			"com.unity.package-3": "3.0.0"
+		}
+	}
+
+Unity stores each package manifest in the `[package_root_folder]/package.json` file.
+
+<a name="PackManRegistry"></a>
+### Package registry
+
+Unity maintains a central registry of official packages that are available for distribution. When Unity loads, the Package Manager communicates with the registry, checks the Project manifest file, and displays the status of each available package in the Packages window.
+
+When you remove a package from the Project, the Package Manager updates the Project manifest to exclude that package from the list when in **In Project** mode but it is still available in **All packages** mode because it is still in the registry.
+
+When you install or update a package, the Package Manager downloads the package from the registry.
+
+# Technical details
+
+## Requirements
+
+This version of Unity Package Manager is compatible with the following versions of the Unity Editor:
+
+* 2018.3 and later (recommended)
+
+## Documentation revision history
+|Date|Reason|
+|---|---|
+|October 3, 2018|Documentation updated. Image updates and minor corrections.|
+|September 14, 2018|Documentation updated. Matches package version 2.0.1.|
+|June 4, 2018|Documentation updated. Matches package version 2.0.0.|
+|May 25, 2018|Documentation updated. Matches package version 1.9.9.|
+|May 4, 2018|Documentation updated. Matches package version 1.9.8.|
+|March 19, 2018|Documentation updated. Matches package version 1.9.0.|
+|Feb 8, 2018|Documentation updated. Matches package version 1.7.0.|
+|Feb 6, 2018|Documentation cleaned up. Matches package version 1.6.1.|
+|Jan 31, 2018|Documentation updated (developmental review)|
+|Jan 29, 2018|Document updated. Matches package version 1.6.0.|
+|Jan 18, 2018|Document updated. Matches package version 1.5.1.|
+|Jan 17, 2018|Document updated. Matches package version 1.5.0.|
+|Jan 12, 2018|Document updated. Matches package version 1.4.0.|
+|Nov 7, 2017|Document created. Matches package version 1.0.0.|
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..33f59435e6f7d1d54b27fdd07a9bc2839c0706c9
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 797cf0c5f1b7e4e1ab17481bd9b698eb
+folderAsset: yes
+timeCreated: 1501783286
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3aaf347a84127d9ba816bfd2f133994b00eab6dc
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs
@@ -0,0 +1,8 @@
+using System.Runtime.CompilerServices;
+using UnityEditor.Experimental.UIElements;
+
+[assembly: InternalsVisibleTo("Unity.PackageManagerCaptain.Editor")]
+[assembly: InternalsVisibleTo("Unity.PackageManagerUI.EditorTests")]
+#if UNITY_2018_3_OR_NEWER
+[assembly: UxmlNamespacePrefix("UnityEditor.PackageManager.UI", "upm")]
+#endif
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..986a6967a12b476d35cae0fa1504bcd8b05495e9
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ca53a6f1e29564d528bb56b92e0f181c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..837bded3862b69d718f4d799f487e0d2e2593f78
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b0c12f0066bd444a1b3a900679169f30
+folderAsset: yes
+timeCreated: 1501783300
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images.meta
new file mode 100644
index 0000000000000000000000000000000000000000..70921ee34c68b535e658bda4ba77520bea9d5cb7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: da0b41deddf0a4414b09681018c171f1
+folderAsset: yes
+timeCreated: 1502292048
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fb0032ce7d0752bcbdeac4382fd821a145d86977
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8c25f8b5c9da143328c516248414b95d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png
new file mode 100644
index 0000000000000000000000000000000000000000..13e377b7b819365c77af6ee29d5095161143df7b
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9769775dfa0b14584eb2eaaba345dcdaf1b5329a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/download.png.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 4dfd3f5da88944ec6ac5977d676c30c6
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6e1c0973466cc6a66edfaade91e165f7e2cd7ab
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ef50b34f9d7a765c86a4739ede616ab328b8e83b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/error.png.meta
@@ -0,0 +1,97 @@
+fileFormatVersion: 2
+guid: acc34040a66fe4170bc8885268860cfe
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 6
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd36a035266647092327af1890f6871a5955c2f1
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0f1828e079705455a1d88f72901df8808b5f4af3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Dark/loading.png.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 3cf132d4fa07f4f0cb2883499c5c7dd0
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 66120540d98c346bab32966fe3676afd
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eee80319f109726be78e178be9f55fcf34511852
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 907731821455c4fa989ac14278e02251
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png
new file mode 100644
index 0000000000000000000000000000000000000000..0af6af8db7f9318a83c34abd855b2ffd1f6aad1b
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5cfce239ec78baa21f9a01d58953e1cba959fffe
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/download.png.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: f8eca3a711f4842eba0c52ea9885ef7f
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6e1c0973466cc6a66edfaade91e165f7e2cd7ab
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5de6c97a1646222260a1dcedb1fc7a554bd432bf
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/error.png.meta
@@ -0,0 +1,97 @@
+fileFormatVersion: 2
+guid: 4c433abcdb28444ebb7bd395ba5c76fc
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 6
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3828db9d68fec22f44fa4642a9d889f11bd458d
Binary files /dev/null and b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png differ
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png.meta
new file mode 100644
index 0000000000000000000000000000000000000000..29433252304eb5e2c074c9ee242b6513af9cbfb3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Images/Light/loading.png.meta
@@ -0,0 +1,105 @@
+fileFormatVersion: 2
+guid: 01e02995805eb483690380a911a657e2
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 5
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapU: 1
+    wrapV: 1
+    wrapW: -1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: f6ebd98fa3a904bd4bb57dae59f0a4ce
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a8c0801e02a99af7e2e2e1d34e7edcb56cbc3730
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: fe684bbd80eab45778b9eb316893ff7c
+folderAsset: yes
+timeCreated: 1502132899
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss
new file mode 100644
index 0000000000000000000000000000000000000000..1e4b87b29150ff95a3c6d3bfd17589da06059bd6
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss
@@ -0,0 +1,74 @@
+/***************************************************************************************************
+
+														*** Auto-Generated - Do not modify .uss File ***
+
+																		Only Modify Main.scss
+
+***************************************************************************************************/
+
+//--------------------------------------------------------------------------------------------------
+// Pure theme colors
+//--------------------------------------------------------------------------------------------------
+
+$unity-text-color: #b4b4b4;
+$unity-list-hover-background: #484848;
+$unity-list-selected-background: #3e5f96;
+$unity-background: #383838;
+
+//--------------------------------------------------------------------------------------------------
+// Custom colors
+//--------------------------------------------------------------------------------------------------
+
+$unity-background-light-contrast: #3c3c3c;			// For dark contrast, use: #404040 and #232323
+$unity-background-dark-contrast: #707070;			//	$
+$unity-text-color-highlight: #f4f4f4;
+
+$unity-installed-color-highlight: rgba(255,255,254,0.4);
+$not-installed-package-background-color: #424242;
+
+$package-tag-color: #ffa44e;
+$package-tag-recommended-color: #e4e4e4;
+
+$caret-text-color: #646464;
+
+$link-text-color: #4F80F8;
+
+//--------------------------------------------------------------------------------------------------
+// Custom backgrounds
+//--------------------------------------------------------------------------------------------------
+$installed-package-background: resource("Builtin Skins/DarkSkin/Images/MenuItemOn.png");
+
+$background-left-button: resource("Builtin Skins/DarkSkin/Images/btn left.png");
+$background-left-button-selected: resource("Builtin Skins/DarkSkin/Images/btn left on.png");;
+$background-mid-button: resource("Builtin Skins/DarkSkin/Images/btn mid.png");
+$background-mid-button-selected: resource("Builtin Skins/DarkSkin/Images/btn mid on.png");
+$background-right-button: resource("Builtin Skins/DarkSkin/Images/btn right.png");
+$background-right-button-selected: resource("Builtin Skins/DarkSkin/Images/btn right on.png");
+
+$background-button-slice-right: 0;
+$background-button-slice-left: 0;
+$background-button-slice-middle: 1;
+
+$background-status-outdated: resource("Images/Dark/download");
+$background-status-error: resource("Images/Dark/error");
+
+$background-spinner-normal: resource("Images/Dark/loading");
+$background-spinner-large: resource("Images/Dark/loading");
+
+$popup-background: resource("Builtin Skins/DarkSkin/Images/mini popup.png");
+
+$toolbar-background: resource("Builtin Skins/DarkSkin/Images/Toolbar.png");
+$toolbar-button-background: resource("Builtin Skins/DarkSkin/Images/toolbar button.png");
+$toolbar-button-active-background: resource("Builtin Skins/DarkSkin/Images/toolbar button act.png");
+$toolbar-button-pulldown-background: resource("Builtin Skins/DarkSkin/Images/toolbar pulldown.png");
+$toolbar-button-popup-background: resource("Builtin Skins/DarkSkin/Images/toolbar popup.png");
+$toolbar-search-textfield-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearch.png");
+$toolbar-search-textfield-focus-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearch focused.png");
+$toolbar-search-cancel-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButton.png");
+$toolbar-search-cancel-active-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonActive.png");
+$toolbar-search-cancel-off-background: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonOff.png");
+
+//--------------------------------------------------------------------------------------------------
+// Common stylesheet
+//--------------------------------------------------------------------------------------------------
+@import "common";
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..75616f4fa5cce0af8bf74fdc5b88f952713372fc
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.scss.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 880f2fc52037c4fe09edb80cfe84ac7c
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss
new file mode 100644
index 0000000000000000000000000000000000000000..c7aa8316cac269fca8b68f97d650be11ffae620b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss
@@ -0,0 +1,1038 @@
+/***************************************************************************************************
+
+														*** Auto-Generated - Do not modify .uss File ***
+
+																		Only Modify Main.scss
+
+***************************************************************************************************/
+#container {
+  -unity-position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+}
+
+.display-none {
+  position: absolute;
+  overflow: hidden;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+
+.row, #detailListView .combo, #detailListView #detailView .detail #detailActions, #detailListView #detailView .detail .detailActions, #detailListView #detailView .detail .versionContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+}
+
+.column, #detailListView .emptyArea, #detailListView #packageListGroup #listContainerOuter, #detailListView #packageListGroup #packageList, #detailListView #packageListGroup #listContainer, #detailListView #packageListGroup #listGroups, #detailListView #packageListGroup #scrollView {
+  flex: 1 0 0;
+  flex-direction: column;
+}
+
+.tag {
+  border-top-width: 1;
+  border-left-width: 1;
+  border-bottom-width: 1;
+  border-right-width: 1;
+  padding-top: 1;
+  padding-left: 3;
+  padding-bottom: 1;
+  padding-right: 3;
+  font-size: 9;
+  border-radius: 5;
+  -unity-text-align: middle-center;
+  border-color: #000000;
+  color: #000000;
+}
+
+#toolbarContainer {
+  flex: 0 0 auto;
+  flex-direction: row;
+  align-items: flex-start;
+  height: 18;
+}
+#toolbarContainer #toolbarView {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: flex-start;
+  background-image: resource("Builtin Skins/DarkSkin/Images/Toolbar.png");
+  margin-top: -1;
+  -unity-slice-top: 1;
+  -unity-slice-left: 1;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 1;
+}
+#toolbarContainer #toolbarView .toolbarButton {
+  flex: 1 0 0;
+  font-size: 9;
+  -unity-text-align: middle-center;
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbar button.png");
+  flex: 0 0 auto;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: -1;
+  padding-top: 0;
+  padding-left: 5;
+  padding-bottom: 0;
+  padding-right: 5;
+  height: 19;
+}
+#toolbarContainer #toolbarView .toolbarButton.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#toolbarContainer #toolbarView .toolbarButton:hover {
+  color: #b4b4b4;
+}
+#toolbarContainer #toolbarView .toolbarButton.space {
+  margin-left: 7;
+}
+#toolbarContainer #toolbarView .toolbarButton.active {
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbar button act.png");
+}
+#toolbarContainer #toolbarView .toolbarButton.pulldown:active {
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbar button.png");
+}
+#toolbarContainer #toolbarView #toolbarLeft {
+  flex: 0 0 auto;
+  flex-direction: row;
+  align-items: flex-start;
+}
+#toolbarContainer #toolbarView #toolbarRight {
+  flex: 1 0 0;
+  flex-direction: row;
+  justify-content: flex-end;
+}
+#toolbarContainer #toolbarView #toolbarRight #toolbarSearch {
+  flex: 1 0 0;
+  height: 18;
+  max-width: 500;
+  flex-direction: row;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 5;
+}
+
+#searchContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  justify-content: flex-start;
+  height: 14;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#searchContainer #searchTextField {
+  flex: 1 0 0;
+  font-size: 9;
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbarsearch.png");
+  margin-top: 2;
+  margin-left: 5;
+  margin-bottom: 1;
+  margin-right: 5;
+  padding-top: 2;
+  padding-left: 17;
+  padding-bottom: 1;
+  padding-right: 17;
+  -unity-slice-top: 1;
+  -unity-slice-left: 14;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 0;
+  height: 14;
+}
+#searchContainer #searchTextField:focus {
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbarsearch focused.png");
+}
+#searchContainer #searchTextField.placeholder {
+  color: #707070;
+}
+#searchContainer #searchCancelButton {
+  width: 14;
+  height: 15;
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonOff.png");
+  flex: 0 0 auto;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  -unity-slice-top: 1;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 14;
+  margin-top: 3;
+  margin-left: -10;
+  margin-bottom: 2;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#searchContainer #searchCancelButton.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#searchContainer #searchCancelButton:hover {
+  color: #b4b4b4;
+}
+#searchContainer #searchCancelButton.on {
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButton.png");
+}
+#searchContainer #searchCancelButton:active {
+  background-image: resource("Builtin Skins/DarkSkin/Images/toolbarsearchCancelButtonActive.png");
+}
+
+#detailListView {
+  flex: 1 0 0;
+  flex-direction: row;
+}
+#detailListView .link {
+  color: #4F80F8;
+  background: rgba(0, 0, 0, 0);
+  background-image: none;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  cursor: link;
+}
+#detailListView .emptyArea {
+  flex: 1 0 0;
+}
+#detailListView .emptyArea .title {
+  -unity-text-align: middle-center;
+  font-size: 14;
+}
+#detailListView .emptyArea .loading {
+  -unity-position: relative;
+  top: 7;
+  left: 7;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  width: 14;
+  height: 14;
+  max-width: 14;
+  max-height: 14;
+}
+#detailListView #headerTitle {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-font-style: bold;
+  color: #b4b4b4;
+}
+#detailListView #headerCaret {
+  flex: 0 0 auto;
+  font-size: 12;
+  -unity-font-style: bold;
+  color: #b4b4b4;
+  min-width: 16;
+}
+#detailListView #spinnerContainer {
+  -unity-position: absolute;
+  top: 3;
+  left: 2;
+  right: 0;
+  width: 14;
+  flex: 0.1 0 0;
+  flex-direction: column;
+  align-items: center;
+}
+#detailListView .loading {
+  -unity-position: relative;
+  top: 7;
+  left: 7;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  width: 14;
+  height: 14;
+  max-width: 14;
+  max-height: 14;
+}
+#detailListView .combo {
+  margin-top: 3;
+  margin-left: 3;
+  margin-bottom: 3;
+  margin-right: 3;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 3;
+  padding-right: 3;
+}
+#detailListView .combo .popup {
+  padding-top: 0;
+  padding-left: 8;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-top-width-left-radius: 0;
+  border-bottom-width-left-radius: 0;
+}
+#detailListView .combo .button {
+  flex: 1 0 0;
+  font-size: 12;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 2;
+  padding-left: 6;
+  padding-bottom: 3;
+  padding-right: 6;
+  -unity-slice-top: 4;
+  -unity-slice-left: 1;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 1;
+  -unity-text-align: middle-center;
+  border-left-width: 0;
+  border-top-width: 0;
+  border-right-width: 0;
+  border-bottom-width: 0;
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn mid.png");
+  border-top-width-right-radius: 0;
+  border-bottom-width-right-radius: 0;
+  border-top-width-left-radius: 0;
+  border-bottom-width-left-radius: 0;
+}
+#detailListView .combo .button.selected {
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn mid on.png");
+  color: #f4f4f4;
+}
+#detailListView .combo .button.first {
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 0;
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn left.png");
+}
+#detailListView .combo .button.first.selected {
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn left on.png");
+}
+#detailListView .combo .button.last {
+  -unity-slice-top: 4;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn right.png");
+}
+#detailListView .combo .button.last.selected {
+  background-image: resource("Builtin Skins/DarkSkin/Images/btn right on.png");
+}
+#detailListView .combo .button.small {
+  flex: 0.5 0 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #packageListGroup {
+  width: 270;
+}
+#detailListView #packageListGroup #groupContainerOuter #headerContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  border-color: rgba(0, 0, 0, 0.5);
+}
+#detailListView #packageListGroup #groupContainerOuter #headerContainer #headerTitle {
+  height: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #packageListGroup #groupContainerOuter #groupContainer {
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #packageListGroup #scrollView #VerticalScroller {
+  bottom: 0;
+}
+#detailListView #packageListGroup #scrollView #HorizontalScroller {
+  height: 0;
+}
+#detailListView #packageListGroup #scrollView #ContentViewport {
+  bottom: 0;
+}
+#detailListView #packageListGroup #scrollView #ContentViewport #ContentView {
+  right: 0;
+  left: 0;
+}
+#detailListView #packageListGroup #noResult #noResultText {
+  -unity-word-wrap: true;
+}
+#detailListView .package {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-bottom-width: 1;
+}
+#detailListView .package.selected {
+  background-color: #3e5f96;
+  color: #f4f4f4;
+}
+#detailListView .package.selected #packageName, #detailListView .package.selected #packageVersion {
+  color: #f4f4f4;
+}
+#detailListView .package .status {
+  flex: 0 0 14;
+  width: 14;
+  height: 14;
+  margin-left: 2;
+  margin-right: 0;
+}
+#detailListView .package .status.installed {
+  background-image: resource("Builtin Skins/DarkSkin/Images/MenuItemOn.png");
+}
+#detailListView .package .status.installed.no-icon {
+  background-image: none;
+}
+#detailListView .package .status.outdated {
+  background-image: resource("Images/Dark/download");
+}
+#detailListView .package .status.outdated.no-icon {
+  background-image: none;
+}
+#detailListView .package .status.inprogress {
+  background-image: none;
+}
+#detailListView .package .status.error {
+  background-image: resource("Images/Dark/error");
+}
+#detailListView .package .name {
+  flex: 1 0 0;
+  font-size: 12;
+  margin-left: 0;
+  margin-right: 5;
+  overflow: hidden;
+}
+#detailListView .package .version {
+  flex: 0 0 auto;
+  margin-left: 0;
+  margin-right: 5;
+  font-size: 9;
+}
+#detailListView #detailsGroup {
+  flex: 1 0 0;
+  border-left-width: 1px;
+  border-color: rgba(0, 0, 0, 0.5);
+}
+#detailListView #detailsGroup #detailsContainer {
+  flex: 1 0 0;
+  flex-direction: column;
+  -unity-position: relative;
+}
+#detailListView #detailView {
+  flex: 1 0 0;
+}
+#detailListView #detailView #VerticalScroller {
+  bottom: 0;
+}
+#detailListView #detailView #ContentViewport #ContentView {
+  -unity-position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+}
+#detailListView #detailView .detail {
+  flex: 1 0 0;
+  flex-direction: column;
+  padding-top: 5;
+  padding-left: 5;
+  padding-bottom: 5;
+  padding-right: 5;
+}
+#detailListView #detailView .detail .header {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: flex-start;
+  margin-bottom: 8;
+}
+#detailListView #detailView .detail .header #titleContainer {
+  flex: 0.9 0 0;
+}
+#detailListView #detailView .detail .header #titleContainer #detailTitle {
+  font-size: 18;
+  -unity-font-style: bold;
+  -unity-word-wrap: true;
+  margin-top: 0;
+  margin-left: 4;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #detailView .detail .header #detailsControls {
+  flex: 1 0 0;
+  height: 19;
+  flex-direction: row;
+  align-items: center;
+  flex-wrap: wrap;
+  margin-top: 3;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #detailView .detail .header #updateCombo {
+  flex: 1 0 0;
+  height: 19;
+  align-items: center;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #detailView .detail .header #updateCombo #update {
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer {
+  min-width: 65;
+  max-width: 150;
+  height: 19;
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup {
+  font-size: 12;
+  height: 19;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup:focus {
+  background-image: resource("Builtin Skins/DarkSkin/Images/mini popup.png");
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup:hover .textElement {
+  color: #b4b4b4;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup .textElement {
+  margin-top: 2;
+}
+#detailListView #detailView .detail .header #updateCombo .action {
+  flex: 0 0 auto;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  font-size: 12;
+  padding-top: 2;
+  padding-left: 4;
+  padding-bottom: 3;
+  padding-right: 4;
+  right: -3;
+}
+#detailListView #detailView .detail .header #updateCombo .action:hover {
+  color: #b4b4b4;
+}
+#detailListView #detailView .detail .header #updateContainer {
+  height: 19;
+  flex: 1 0 0;
+  align-items: flex-end;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #detailView .detail .header .button {
+  height: 19;
+  font-size: 12;
+  flex: 0 0 auto;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 4;
+  padding-right: 3;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+}
+#detailListView #detailView .detail .header .button.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#detailListView #detailView .detail .header .button:hover {
+  color: #b4b4b4;
+}
+#detailListView #detailView .detail #detailVersion {
+  font-size: 16;
+  max-height: 30;
+}
+#detailListView #detailView .detail #detailName {
+  flex: 1 0 0;
+  max-height: 20;
+  -unity-font-style: italic;
+}
+#detailListView #detailView .detail #detailPackageStatus {
+  flex: 1 0 0;
+  -unity-font-style: bold;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailTag {
+  width: 60;
+  font-size: 12;
+  border-radius: 5;
+  border-color: #b4b4b4;
+  border-top-width: 2;
+  border-left-width: 2;
+  border-bottom-width: 2;
+  border-right-width: 2;
+  -unity-text-align: middle-center;
+}
+#detailListView #detailView .detail #detailDesc, #detailListView #detailView .detail #detailModuleReference {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailDesc.empty, #detailListView #detailView .detail #detailModuleReference.empty {
+  -unity-font-style: italic;
+}
+#detailListView #detailView .detail #detailAuthor {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailCategory {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+  margin-bottom: 5;
+}
+#detailListView #detailView .detail #changeLogContainer, #detailListView #detailView .detail #viewLicensesContainer {
+  flex: 0 0 auto;
+  flex-direction: row;
+}
+#detailListView #detailView .detail #detailActions, #detailListView #detailView .detail .detailActions {
+  flex: 0 0 auto;
+  flex-direction: row;
+  margin-left: 2;
+}
+#detailListView #detailView .detail #detailActions .detailAction, #detailListView #detailView .detail .detailActions .detailAction {
+  margin-left: 0;
+  margin-right: 0;
+  padding-left: 2;
+  padding-right: 2;
+  border-left-width: 2;
+  border-right-width: 2;
+}
+#detailListView #detailView .detail #detailActions .detailActionSeparator, #detailListView #detailView .detail .detailActions .detailActionSeparator {
+  margin-left: 0;
+  margin-right: 0;
+  padding-left: 0;
+  padding-right: 0;
+  border-left-width: 0;
+  border-right-width: 0;
+}
+#detailListView #detailView .detail #detailActions #thirdPartyNoticeLabel, #detailListView #detailView .detail .detailActions #thirdPartyNoticeLabel {
+  margin-top: 4;
+  margin-left: 0;
+  margin-bottom: 4;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailActions #viewThirdParty, #detailListView #detailView .detail .detailActions #viewThirdParty {
+  border-right-width: 0;
+}
+#detailListView #detailView .detail .versionContainer {
+  align-items: center;
+  justify-content: flex-start;
+}
+#detailListView #detailView .detail .versionContainer #detailVersion {
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .tag {
+  border-color: #ffa44e;
+  color: #ffa44e;
+}
+#detailListView #detailView .detail .tag.verified {
+  border-color: #e4e4e4;
+  color: #e4e4e4;
+}
+#detailListView #detailView .detail .tagLine {
+  flex: 0 0 auto;
+  flex-direction: row;
+}
+#detailListView #detailError {
+  -unity-position: absolute;
+  top: 5;
+  left: 5;
+  right: 5;
+  min-height: 200;
+  -unity-word-wrap: true;
+}
+#detailListView #detailError.display-none {
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #packageStatusBar {
+  -unity-position: relative;
+  flex: 0 0 auto;
+  margin-top: 2;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 1;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #statusBarContainer {
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+#detailListView #statusBarContainer #loadingContainer {
+  flex-direction: row;
+  align-items: center;
+  justify-content: flex-start;
+  margin-left: 2;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingIcon {
+  background-image: resource("Images/Dark/error");
+  width: 16;
+  height: 16;
+  margin-left: -12;
+  margin-right: 0;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingText {
+  padding-left: 2;
+  -unity-font-style: italic;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingText.icon {
+  margin-left: 0;
+}
+#detailListView #statusBarContainer #moreAddOptionsButton {
+  font-size: 16;
+  background-image: none;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: -2;
+  margin-right: 0;
+  padding-top: 3;
+  padding-left: 6;
+  padding-bottom: 6;
+  padding-right: 6;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 0;
+  border-left-width: 1;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #packageAddFromUrlField {
+  -unity-position: absolute;
+  top: -35;
+  left: 0;
+  bottom: 0;
+  right: 0;
+}
+#detailListView #addFromUrlFieldContainer {
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 1;
+  border-left-width: 0;
+  border-bottom-width: 1;
+  border-right-width: 0;
+  flex-direction: row;
+  justify-content: space-between;
+  align-items: center;
+  height: 35;
+  background-color: #383838;
+}
+#detailListView #addFromUrlFieldContainer #urlTextField {
+  flex: 1 0 0;
+  height: 20;
+  -unity-text-align: middle-left;
+}
+#detailListView #addFromUrlFieldContainer #addFromUrlButton {
+  flex: 0 0 auto;
+  height: 20;
+}
+
+.alert {
+  background-color: rgba(200, 0, 0, 0.8);
+  border-color: #FF0000;
+  flex-direction: row;
+  border-top-width: 1;
+  border-left-width: 1;
+  border-bottom-width: 1;
+  border-right-width: 1;
+  padding-top: 5;
+  padding-left: 10;
+  padding-bottom: 5;
+  padding-right: 10;
+}
+.alert #alertMessage {
+  flex: 1 0 0;
+  color: #f4f4f4;
+  -unity-word-wrap: true;
+  overflow: hidden;
+}
+.alert #close {
+  flex: 0 0 auto;
+  max-height: 30;
+  left: 5;
+  flex: 0 0 auto;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 4;
+  padding-right: 3;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+}
+.alert #close.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+.alert #close:hover {
+  color: #b4b4b4;
+}
+
+.spinner {
+  flex: 0 0 auto;
+  top: -7;
+  left: -7;
+  min-width: 14;
+  min-height: 14;
+  max-width: 14;
+  max-height: 14;
+  background-image: resource("Images/Dark/loading");
+}
+
+.largeSpinner {
+  flex: 0 0 auto;
+  top: -16;
+  left: -16;
+  min-width: 32;
+  min-height: 32;
+  max-width: 32;
+  max-height: 32;
+  background-image: resource("Images/Dark/loading");
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..efb671094bd57ecf057f386749119685986b72e1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Dark.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c7559cdbc33f04af1a5a42d2aa5b40a5
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: stylesheet
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss
new file mode 100644
index 0000000000000000000000000000000000000000..85d6b0708dec3b3757e946ddc6264277a791c736
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss
@@ -0,0 +1,74 @@
+/***************************************************************************************************
+
+														*** Auto-Generated - Do not modify .uss File ***
+
+																		Only Modify Main.scss
+
+***************************************************************************************************/
+
+//--------------------------------------------------------------------------------------------------
+// Pure theme colors
+//--------------------------------------------------------------------------------------------------
+
+$unity-text-color: #000000;
+$unity-list-hover-background: #8f8f8f;
+$unity-list-selected-background: #3e7de7;
+$unity-background: #c2c2c2;
+
+//--------------------------------------------------------------------------------------------------
+// Custom colors
+//--------------------------------------------------------------------------------------------------
+
+$unity-background-light-contrast: #D5D5D5;
+$unity-background-dark-contrast: #6C6C6C;
+$unity-text-color-highlight: #f4f4f4;
+
+$unity-installed-color-highlight: rgba(1,0,0,0.3);
+$not-installed-package-background-color: #d1d1d1;
+
+$package-tag-color: #d25a00;
+$package-tag-recommended-color: #000;
+
+$caret-text-color: #646464;
+
+$link-text-color: #0808FC;
+
+//--------------------------------------------------------------------------------------------------
+// Custom backgrounds
+//--------------------------------------------------------------------------------------------------
+$installed-package-background: resource("Builtin Skins/LightSkin/Images/MenuItemOn.png");
+
+$background-left-button: resource("Builtin Skins/LightSkin/Images/btn left.png");
+$background-left-button-selected: resource("Builtin Skins/LightSkin/Images/btn left on.png");;
+$background-mid-button: resource("Builtin Skins/LightSkin/Images/btn mid.png");
+$background-mid-button-selected: resource("Builtin Skins/LightSkin/Images/btn mid on.png");
+$background-right-button: resource("Builtin Skins/LightSkin/Images/btn right.png");
+$background-right-button-selected: resource("Builtin Skins/LightSkin/Images/btn right on.png");
+
+$background-button-slice-right: 6;
+$background-button-slice-left: 6;
+$background-button-slice-middle: 1;
+
+$background-status-outdated: resource("Images/Light/download");
+$background-status-error: resource("Images/Dark/error");
+
+$background-spinner-normal: resource("Images/Light/loading");
+$background-spinner-large: resource("Images/Light/loading");
+
+$popup-background: resource("Builtin Skins/LightSkin/Images/mini popup.png");
+
+$toolbar-background: resource("Builtin Skins/LightSkin/Images/Toolbar.png");
+$toolbar-button-background: resource("Builtin Skins/LightSkin/Images/toolbar button.png");
+$toolbar-button-active-background: resource("Builtin Skins/LightSkin/Images/toolbar button act.png");
+$toolbar-button-pulldown-background: resource("Builtin Skins/LightSkin/Images/toolbar pulldown.png");
+$toolbar-button-popup-background: resource("Builtin Skins/LightSkin/Images/toolbar popup.png");
+$toolbar-search-textfield-background: resource("Builtin Skins/LightSkin/Images/toolbarsearch.png");
+$toolbar-search-textfield-focus-background: resource("Builtin Skins/LightSkin/Images/toolbarsearch focused.png");
+$toolbar-search-cancel-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButton.png");
+$toolbar-search-cancel-active-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonActive.png");
+$toolbar-search-cancel-off-background: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonOff.png");
+
+//--------------------------------------------------------------------------------------------------
+// Common stylesheet
+//--------------------------------------------------------------------------------------------------
+@import "common";
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..066475b7624ca5f3677c9063d5ddba9405ae91ae
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.scss.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f1687bb24464840ae9e1d253685ae0f6
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss
new file mode 100644
index 0000000000000000000000000000000000000000..5f2ec80fab46b395edd7780872739a9c8d00dac3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss
@@ -0,0 +1,1038 @@
+/***************************************************************************************************
+
+														*** Auto-Generated - Do not modify .uss File ***
+
+																		Only Modify Main.scss
+
+***************************************************************************************************/
+#container {
+  -unity-position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+}
+
+.display-none {
+  position: absolute;
+  overflow: hidden;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+
+.row, #detailListView .combo, #detailListView #detailView .detail #detailActions, #detailListView #detailView .detail .detailActions, #detailListView #detailView .detail .versionContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+}
+
+.column, #detailListView .emptyArea, #detailListView #packageListGroup #listContainerOuter, #detailListView #packageListGroup #packageList, #detailListView #packageListGroup #listContainer, #detailListView #packageListGroup #listGroups, #detailListView #packageListGroup #scrollView {
+  flex: 1 0 0;
+  flex-direction: column;
+}
+
+.tag {
+  border-top-width: 1;
+  border-left-width: 1;
+  border-bottom-width: 1;
+  border-right-width: 1;
+  padding-top: 1;
+  padding-left: 3;
+  padding-bottom: 1;
+  padding-right: 3;
+  font-size: 9;
+  border-radius: 5;
+  -unity-text-align: middle-center;
+  border-color: #000000;
+  color: #000000;
+}
+
+#toolbarContainer {
+  flex: 0 0 auto;
+  flex-direction: row;
+  align-items: flex-start;
+  height: 18;
+}
+#toolbarContainer #toolbarView {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: flex-start;
+  background-image: resource("Builtin Skins/LightSkin/Images/Toolbar.png");
+  margin-top: -1;
+  -unity-slice-top: 1;
+  -unity-slice-left: 1;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 1;
+}
+#toolbarContainer #toolbarView .toolbarButton {
+  flex: 1 0 0;
+  font-size: 9;
+  -unity-text-align: middle-center;
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbar button.png");
+  flex: 0 0 auto;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: -1;
+  padding-top: 0;
+  padding-left: 5;
+  padding-bottom: 0;
+  padding-right: 5;
+  height: 19;
+}
+#toolbarContainer #toolbarView .toolbarButton.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#toolbarContainer #toolbarView .toolbarButton:hover {
+  color: #000000;
+}
+#toolbarContainer #toolbarView .toolbarButton.space {
+  margin-left: 7;
+}
+#toolbarContainer #toolbarView .toolbarButton.active {
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbar button act.png");
+}
+#toolbarContainer #toolbarView .toolbarButton.pulldown:active {
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbar button.png");
+}
+#toolbarContainer #toolbarView #toolbarLeft {
+  flex: 0 0 auto;
+  flex-direction: row;
+  align-items: flex-start;
+}
+#toolbarContainer #toolbarView #toolbarRight {
+  flex: 1 0 0;
+  flex-direction: row;
+  justify-content: flex-end;
+}
+#toolbarContainer #toolbarView #toolbarRight #toolbarSearch {
+  flex: 1 0 0;
+  height: 18;
+  max-width: 500;
+  flex-direction: row;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 5;
+}
+
+#searchContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  justify-content: flex-start;
+  height: 14;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#searchContainer #searchTextField {
+  flex: 1 0 0;
+  font-size: 9;
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbarsearch.png");
+  margin-top: 2;
+  margin-left: 5;
+  margin-bottom: 1;
+  margin-right: 5;
+  padding-top: 2;
+  padding-left: 17;
+  padding-bottom: 1;
+  padding-right: 17;
+  -unity-slice-top: 1;
+  -unity-slice-left: 14;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 0;
+  height: 14;
+}
+#searchContainer #searchTextField:focus {
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbarsearch focused.png");
+}
+#searchContainer #searchTextField.placeholder {
+  color: #6C6C6C;
+}
+#searchContainer #searchCancelButton {
+  width: 14;
+  height: 15;
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonOff.png");
+  flex: 0 0 auto;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  -unity-slice-top: 1;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 1;
+  -unity-slice-right: 14;
+  margin-top: 3;
+  margin-left: -10;
+  margin-bottom: 2;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#searchContainer #searchCancelButton.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#searchContainer #searchCancelButton:hover {
+  color: #000000;
+}
+#searchContainer #searchCancelButton.on {
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButton.png");
+}
+#searchContainer #searchCancelButton:active {
+  background-image: resource("Builtin Skins/LightSkin/Images/toolbarsearchCancelButtonActive.png");
+}
+
+#detailListView {
+  flex: 1 0 0;
+  flex-direction: row;
+}
+#detailListView .link {
+  color: #0808FC;
+  background: rgba(0, 0, 0, 0);
+  background-image: none;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  cursor: link;
+}
+#detailListView .emptyArea {
+  flex: 1 0 0;
+}
+#detailListView .emptyArea .title {
+  -unity-text-align: middle-center;
+  font-size: 14;
+}
+#detailListView .emptyArea .loading {
+  -unity-position: relative;
+  top: 7;
+  left: 7;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  width: 14;
+  height: 14;
+  max-width: 14;
+  max-height: 14;
+}
+#detailListView #headerTitle {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-font-style: bold;
+  color: #000000;
+}
+#detailListView #headerCaret {
+  flex: 0 0 auto;
+  font-size: 12;
+  -unity-font-style: bold;
+  color: #000000;
+  min-width: 16;
+}
+#detailListView #spinnerContainer {
+  -unity-position: absolute;
+  top: 3;
+  left: 2;
+  right: 0;
+  width: 14;
+  flex: 0.1 0 0;
+  flex-direction: column;
+  align-items: center;
+}
+#detailListView .loading {
+  -unity-position: relative;
+  top: 7;
+  left: 7;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  width: 14;
+  height: 14;
+  max-width: 14;
+  max-height: 14;
+}
+#detailListView .combo {
+  margin-top: 3;
+  margin-left: 3;
+  margin-bottom: 3;
+  margin-right: 3;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 3;
+  padding-right: 3;
+}
+#detailListView .combo .popup {
+  padding-top: 0;
+  padding-left: 8;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-top-width-left-radius: 0;
+  border-bottom-width-left-radius: 0;
+}
+#detailListView .combo .button {
+  flex: 1 0 0;
+  font-size: 12;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 2;
+  padding-left: 6;
+  padding-bottom: 3;
+  padding-right: 6;
+  -unity-slice-top: 4;
+  -unity-slice-left: 1;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 1;
+  -unity-text-align: middle-center;
+  border-left-width: 0;
+  border-top-width: 0;
+  border-right-width: 0;
+  border-bottom-width: 0;
+  background-image: resource("Builtin Skins/LightSkin/Images/btn mid.png");
+  border-top-width-right-radius: 0;
+  border-bottom-width-right-radius: 0;
+  border-top-width-left-radius: 0;
+  border-bottom-width-left-radius: 0;
+}
+#detailListView .combo .button.selected {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn mid on.png");
+  color: #f4f4f4;
+}
+#detailListView .combo .button.first {
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  background-image: resource("Builtin Skins/LightSkin/Images/btn left.png");
+}
+#detailListView .combo .button.first.selected {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn left on.png");
+}
+#detailListView .combo .button.last {
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+  background-image: resource("Builtin Skins/LightSkin/Images/btn right.png");
+}
+#detailListView .combo .button.last.selected {
+  background-image: resource("Builtin Skins/LightSkin/Images/btn right on.png");
+}
+#detailListView .combo .button.small {
+  flex: 0.5 0 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #packageListGroup {
+  width: 270;
+}
+#detailListView #packageListGroup #groupContainerOuter #headerContainer {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  border-color: rgba(0, 0, 0, 0.5);
+}
+#detailListView #packageListGroup #groupContainerOuter #headerContainer #headerTitle {
+  height: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #packageListGroup #groupContainerOuter #groupContainer {
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #packageListGroup #scrollView #VerticalScroller {
+  bottom: 0;
+}
+#detailListView #packageListGroup #scrollView #HorizontalScroller {
+  height: 0;
+}
+#detailListView #packageListGroup #scrollView #ContentViewport {
+  bottom: 0;
+}
+#detailListView #packageListGroup #scrollView #ContentViewport #ContentView {
+  right: 0;
+  left: 0;
+}
+#detailListView #packageListGroup #noResult #noResultText {
+  -unity-word-wrap: true;
+}
+#detailListView .package {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: center;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-bottom-width: 1;
+}
+#detailListView .package.selected {
+  background-color: #3e7de7;
+  color: #f4f4f4;
+}
+#detailListView .package.selected #packageName, #detailListView .package.selected #packageVersion {
+  color: #f4f4f4;
+}
+#detailListView .package .status {
+  flex: 0 0 14;
+  width: 14;
+  height: 14;
+  margin-left: 2;
+  margin-right: 0;
+}
+#detailListView .package .status.installed {
+  background-image: resource("Builtin Skins/LightSkin/Images/MenuItemOn.png");
+}
+#detailListView .package .status.installed.no-icon {
+  background-image: none;
+}
+#detailListView .package .status.outdated {
+  background-image: resource("Images/Light/download");
+}
+#detailListView .package .status.outdated.no-icon {
+  background-image: none;
+}
+#detailListView .package .status.inprogress {
+  background-image: none;
+}
+#detailListView .package .status.error {
+  background-image: resource("Images/Dark/error");
+}
+#detailListView .package .name {
+  flex: 1 0 0;
+  font-size: 12;
+  margin-left: 0;
+  margin-right: 5;
+  overflow: hidden;
+}
+#detailListView .package .version {
+  flex: 0 0 auto;
+  margin-left: 0;
+  margin-right: 5;
+  font-size: 9;
+}
+#detailListView #detailsGroup {
+  flex: 1 0 0;
+  border-left-width: 1px;
+  border-color: rgba(0, 0, 0, 0.5);
+}
+#detailListView #detailsGroup #detailsContainer {
+  flex: 1 0 0;
+  flex-direction: column;
+  -unity-position: relative;
+}
+#detailListView #detailView {
+  flex: 1 0 0;
+}
+#detailListView #detailView #VerticalScroller {
+  bottom: 0;
+}
+#detailListView #detailView #ContentViewport #ContentView {
+  -unity-position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+}
+#detailListView #detailView .detail {
+  flex: 1 0 0;
+  flex-direction: column;
+  padding-top: 5;
+  padding-left: 5;
+  padding-bottom: 5;
+  padding-right: 5;
+}
+#detailListView #detailView .detail .header {
+  flex: 1 0 0;
+  flex-direction: row;
+  align-items: flex-start;
+  margin-bottom: 8;
+}
+#detailListView #detailView .detail .header #titleContainer {
+  flex: 0.9 0 0;
+}
+#detailListView #detailView .detail .header #titleContainer #detailTitle {
+  font-size: 18;
+  -unity-font-style: bold;
+  -unity-word-wrap: true;
+  margin-top: 0;
+  margin-left: 4;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #detailView .detail .header #detailsControls {
+  flex: 1 0 0;
+  height: 19;
+  flex-direction: row;
+  align-items: center;
+  flex-wrap: wrap;
+  margin-top: 3;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #detailView .detail .header #updateCombo {
+  flex: 1 0 0;
+  height: 19;
+  align-items: center;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #detailView .detail .header #updateCombo #update {
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer {
+  min-width: 65;
+  max-width: 150;
+  height: 19;
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup {
+  font-size: 12;
+  height: 19;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup:focus {
+  background-image: resource("Builtin Skins/LightSkin/Images/mini popup.png");
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup:hover .textElement {
+  color: #000000;
+}
+#detailListView #detailView .detail .header #updateCombo #updateDropdownContainer .popup .textElement {
+  margin-top: 2;
+}
+#detailListView #detailView .detail .header #updateCombo .action {
+  flex: 0 0 auto;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  font-size: 12;
+  padding-top: 2;
+  padding-left: 4;
+  padding-bottom: 3;
+  padding-right: 4;
+  right: -3;
+}
+#detailListView #detailView .detail .header #updateCombo .action:hover {
+  color: #000000;
+}
+#detailListView #detailView .detail .header #updateContainer {
+  height: 19;
+  flex: 1 0 0;
+  align-items: flex-end;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+}
+#detailListView #detailView .detail .header .button {
+  height: 19;
+  font-size: 12;
+  flex: 0 0 auto;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 4;
+  padding-right: 3;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+}
+#detailListView #detailView .detail .header .button.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+#detailListView #detailView .detail .header .button:hover {
+  color: #000000;
+}
+#detailListView #detailView .detail #detailVersion {
+  font-size: 16;
+  max-height: 30;
+}
+#detailListView #detailView .detail #detailName {
+  flex: 1 0 0;
+  max-height: 20;
+  -unity-font-style: italic;
+}
+#detailListView #detailView .detail #detailPackageStatus {
+  flex: 1 0 0;
+  -unity-font-style: bold;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailTag {
+  width: 60;
+  font-size: 12;
+  border-radius: 5;
+  border-color: #b4b4b4;
+  border-top-width: 2;
+  border-left-width: 2;
+  border-bottom-width: 2;
+  border-right-width: 2;
+  -unity-text-align: middle-center;
+}
+#detailListView #detailView .detail #detailDesc, #detailListView #detailView .detail #detailModuleReference {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailDesc.empty, #detailListView #detailView .detail #detailModuleReference.empty {
+  -unity-font-style: italic;
+}
+#detailListView #detailView .detail #detailAuthor {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailCategory {
+  flex: 1 0 0;
+  font-size: 12;
+  -unity-word-wrap: true;
+  margin-bottom: 5;
+}
+#detailListView #detailView .detail #changeLogContainer, #detailListView #detailView .detail #viewLicensesContainer {
+  flex: 0 0 auto;
+  flex-direction: row;
+}
+#detailListView #detailView .detail #detailActions, #detailListView #detailView .detail .detailActions {
+  flex: 0 0 auto;
+  flex-direction: row;
+  margin-left: 2;
+}
+#detailListView #detailView .detail #detailActions .detailAction, #detailListView #detailView .detail .detailActions .detailAction {
+  margin-left: 0;
+  margin-right: 0;
+  padding-left: 2;
+  padding-right: 2;
+  border-left-width: 2;
+  border-right-width: 2;
+}
+#detailListView #detailView .detail #detailActions .detailActionSeparator, #detailListView #detailView .detail .detailActions .detailActionSeparator {
+  margin-left: 0;
+  margin-right: 0;
+  padding-left: 0;
+  padding-right: 0;
+  border-left-width: 0;
+  border-right-width: 0;
+}
+#detailListView #detailView .detail #detailActions #thirdPartyNoticeLabel, #detailListView #detailView .detail .detailActions #thirdPartyNoticeLabel {
+  margin-top: 4;
+  margin-left: 0;
+  margin-bottom: 4;
+  margin-right: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  -unity-word-wrap: true;
+}
+#detailListView #detailView .detail #detailActions #viewThirdParty, #detailListView #detailView .detail .detailActions #viewThirdParty {
+  border-right-width: 0;
+}
+#detailListView #detailView .detail .versionContainer {
+  align-items: center;
+  justify-content: flex-start;
+}
+#detailListView #detailView .detail .versionContainer #detailVersion {
+  flex: 0 0 auto;
+}
+#detailListView #detailView .detail .tag {
+  border-color: #d25a00;
+  color: #d25a00;
+}
+#detailListView #detailView .detail .tag.verified {
+  border-color: #000;
+  color: #000;
+}
+#detailListView #detailView .detail .tagLine {
+  flex: 0 0 auto;
+  flex-direction: row;
+}
+#detailListView #detailError {
+  -unity-position: absolute;
+  top: 5;
+  left: 5;
+  right: 5;
+  min-height: 200;
+  -unity-word-wrap: true;
+}
+#detailListView #detailError.display-none {
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+}
+#detailListView #packageStatusBar {
+  -unity-position: relative;
+  flex: 0 0 auto;
+  margin-top: 2;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 1;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #statusBarContainer {
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+#detailListView #statusBarContainer #loadingContainer {
+  flex-direction: row;
+  align-items: center;
+  justify-content: flex-start;
+  margin-left: 2;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingIcon {
+  background-image: resource("Images/Dark/error");
+  width: 16;
+  height: 16;
+  margin-left: -12;
+  margin-right: 0;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingText {
+  padding-left: 2;
+  -unity-font-style: italic;
+}
+#detailListView #statusBarContainer #loadingContainer #loadingText.icon {
+  margin-left: 0;
+}
+#detailListView #statusBarContainer #moreAddOptionsButton {
+  font-size: 16;
+  background-image: none;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: -2;
+  margin-right: 0;
+  padding-top: 3;
+  padding-left: 6;
+  padding-bottom: 6;
+  padding-right: 6;
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 0;
+  border-left-width: 1;
+  border-bottom-width: 0;
+  border-right-width: 0;
+}
+#detailListView #packageAddFromUrlField {
+  -unity-position: absolute;
+  top: -35;
+  left: 0;
+  bottom: 0;
+  right: 0;
+}
+#detailListView #addFromUrlFieldContainer {
+  border-color: rgba(0, 0, 0, 0.5);
+  border-top-width: 1;
+  border-left-width: 0;
+  border-bottom-width: 1;
+  border-right-width: 0;
+  flex-direction: row;
+  justify-content: space-between;
+  align-items: center;
+  height: 35;
+  background-color: #c2c2c2;
+}
+#detailListView #addFromUrlFieldContainer #urlTextField {
+  flex: 1 0 0;
+  height: 20;
+  -unity-text-align: middle-left;
+}
+#detailListView #addFromUrlFieldContainer #addFromUrlButton {
+  flex: 0 0 auto;
+  height: 20;
+}
+
+.alert {
+  background-color: rgba(200, 0, 0, 0.8);
+  border-color: #FF0000;
+  flex-direction: row;
+  border-top-width: 1;
+  border-left-width: 1;
+  border-bottom-width: 1;
+  border-right-width: 1;
+  padding-top: 5;
+  padding-left: 10;
+  padding-bottom: 5;
+  padding-right: 10;
+}
+.alert #alertMessage {
+  flex: 1 0 0;
+  color: #f4f4f4;
+  -unity-word-wrap: true;
+  overflow: hidden;
+}
+.alert #close {
+  flex: 0 0 auto;
+  max-height: 30;
+  left: 5;
+  flex: 0 0 auto;
+  padding-top: 3;
+  padding-left: 3;
+  padding-bottom: 4;
+  padding-right: 3;
+  -unity-slice-top: 4;
+  -unity-slice-left: 6;
+  -unity-slice-bottom: 4;
+  -unity-slice-right: 6;
+}
+.alert #close.display-none {
+  position: absolute;
+  border-radius: 0;
+  width: 0;
+  height: 0;
+  min-height: 0;
+  max-height: 0;
+  min-width: 0;
+  max-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  min-width: 0;
+  border-top-width: 0;
+  border-left-width: 0;
+  border-bottom-width: 0;
+  border-right-width: 0;
+  padding-top: 0;
+  padding-left: 0;
+  padding-bottom: 0;
+  padding-right: 0;
+  margin-top: 0;
+  margin-left: 0;
+  margin-bottom: 0;
+  margin-right: 0;
+  -unity-slice-top: 0;
+  -unity-slice-left: 0;
+  -unity-slice-bottom: 0;
+  -unity-slice-right: 0;
+  visibility: hidden;
+}
+.alert #close:hover {
+  color: #000000;
+}
+
+.spinner {
+  flex: 0 0 auto;
+  top: -7;
+  left: -7;
+  min-width: 14;
+  min-height: 14;
+  max-width: 14;
+  max-height: 14;
+  background-image: resource("Images/Light/loading");
+}
+
+.largeSpinner {
+  flex: 0 0 auto;
+  top: -16;
+  left: -16;
+  min-width: 32;
+  min-height: 32;
+  max-width: 32;
+  max-height: 32;
+  background-image: resource("Images/Light/loading");
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cb382d66ea8ced7c3510252b107cb73c1028e193
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/Main_Light.uss.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: abdc053b8e3644f299aedc641d609a84
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: stylesheet
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a896ed29d69339f9b9e8b71f8e8647084fbf4826
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss
@@ -0,0 +1,960 @@
+// If you are using IntelliJ Rider, you can simply turn on the SCSS compiler, otherwise here is how to convert scss to uss
+//		# Install Sass
+//				gem install sass
+//
+//		# Convert
+//				sass --sourcemap=none --style=expanded --scss --no-cache Main_Dark.scss Main_Dark.uss
+//				sass --sourcemap=none --style=expanded --scss --no-cache Main_Light.scss Main_Light.uss
+//
+//		# Watch
+//				sass --watch --sourcemap=none --style=expanded --scss --no-cache Main_Light.scss:Main_Light.uss Main_Dark.scss:Main_Dark.uss
+//
+//	Sass to Uss Notes
+//		- Sass converts rgb(0,0,0) to css 'black'. Uss doesn't support named colors. The workaround is to set the color in sass as #000000
+//
+// Uss Notes
+//		Runtime\UIElements\Managed\StyleSheets\StyleSheetCache.cs:50 to see which properties are available (until there is a doc)
+
+//--------------------------------------------------------------------------------------------------
+// Helper Mixins
+//--------------------------------------------------------------------------------------------------
+
+@mixin border($top, $right, $bottom, $left) {
+	@if $top != 'auto' {border-top-width: $top;}
+	@if $left != 'auto' {border-left-width: $right;}
+	@if $bottom != 'auto' {border-bottom-width: $bottom;}
+	@if $right != 'auto' {border-right-width: $left;}
+}
+
+@mixin border-box($width: 1) {
+	@include border($width, $width, $width, $width);
+}
+
+@mixin padding($top, $right, $bottom, $left) {
+	@if $top != 'auto' {padding-top: $top;}
+	@if $left != 'auto' {padding-left: $left;}
+	@if $bottom != 'auto' {padding-bottom: $bottom;}
+	@if $right != 'auto' {padding-right: $right;}
+}
+
+@mixin padding-box($size) {
+	@include padding($size, $size, $size, $size);
+}
+
+@mixin margin($top, $right, $bottom, $left) {
+	@if $top != 'auto' {margin-top: $top;}
+	@if $left != 'auto' {margin-left: $left;}
+	@if $bottom != 'auto' {margin-bottom: $bottom;}
+	@if $right != 'auto' {margin-right: $right;}
+}
+
+@mixin margin-box($size) {
+	@include margin($size, $size, $size, $size);
+}
+
+@mixin slice($top, $right, $bottom, $left) {
+	@if $top != 'auto' {-unity-slice-top: $top;}
+	@if $left != 'auto' {-unity-slice-left: $left;}
+	@if $bottom != 'auto' {-unity-slice-bottom: $bottom;}
+	@if $right != 'auto' {-unity-slice-right: $right;}
+}
+
+@mixin slice-box($size) {
+	@include slice($size, $size, $size, $size);
+}
+
+@mixin position($top, $right, $bottom, $left) {
+	@if $top != 'auto' {top: $top;}
+	@if $left != 'auto' {left: $left;}
+	@if $bottom != 'auto' {bottom: $bottom;}
+	@if $right != 'auto' {right: $right;}
+}
+
+@mixin text-clip() {
+	overflow: hidden;
+}
+
+@mixin selected-element() {
+	background-color: $unity-list-selected-background;
+	color: $unity-text-color-highlight;
+}
+
+@mixin active-tab() {
+	background-color: $unity-background-dark-contrast;
+	color: $unity-text-color-highlight;
+}
+
+@mixin inactive-tab() {
+	background-color: $unity-background-light-contrast;
+	color: $unity-text-color;
+}
+
+@mixin button($top, $right, $bottom, $left) {
+	flex: 0 0 auto;
+
+	@include padding($top, $right, $bottom, $left);
+	@include slice(4, 6, 4, 6);
+
+	&.display-none {
+		position: absolute;
+		border-radius: 0;
+		width: 0;
+		height: 0;
+		min-height: 0;
+		max-height: 0;
+		min-width: 0;
+		max-width: 0;
+		border-top-width: 0;
+		border-left-width: 0;
+		border-bottom-width: 0;
+		border-right-width: 0;
+		min-width: 0;
+		@include border-box(0);
+		@include padding-box(0);
+		@include margin-box(0);
+		@include slice-box(0);
+		visibility: hidden;
+	}
+
+	&:hover {
+		color: $unity-text-color;
+	}
+}
+
+@mixin button-box($size) {
+	@include button($size, $size, $size, $size);
+}
+
+//--------------------------------------------------------------------------------------------------
+// Font
+//--------------------------------------------------------------------------------------------------
+
+@mixin font-small() {
+	font-size: 9;
+}
+
+@mixin font-normal() {
+	font-size: 12;
+}
+
+//--------------------------------------------------------------------------------------------------
+// Styles
+//--------------------------------------------------------------------------------------------------
+
+#container {
+	-unity-position: absolute;
+	@include position(0, 0, 0, 0);
+}
+
+.display-none {
+	position: absolute;
+	overflow: hidden;
+	border-radius: 0;
+	width: 0;
+	height: 0;
+	min-height: 0;
+	max-height: 0;
+	min-width: 0;
+	max-width: 0;
+	border-top-width: 0;
+	border-left-width: 0;
+	border-bottom-width: 0;
+	border-right-width: 0;
+	@include border-box(0);
+	@include padding-box(0);
+	@include margin-box(0);
+}
+
+.row {
+	flex: 1 0 0;
+	flex-direction: row;
+}
+
+.column {
+	flex: 1 0 0;
+	flex-direction: column;
+}
+
+.tag {
+	@include border-box(1);
+	@include padding(1, 3, 1, 3);
+	@include font-small();
+	border-radius: 5;
+	-unity-text-align: middle-center;
+
+	border-color: #000000;
+	color: #000000;
+}
+
+$spinner-large-size: 32;
+$spinner-large-half-size: 16;
+$spinner-normal-size: 14;
+$spinner-normal-half-size: 7;
+$toolbar-height: 18;
+
+#toolbarContainer {
+	flex: 0 0 auto;
+	flex-direction: row;
+	align-items: flex-start;
+	height: $toolbar-height;
+
+	#toolbarView {
+		flex: 1 0 0;
+		flex-direction: row;
+		align-items: flex-start;
+		background-image: $toolbar-background;
+		margin-top: -1;
+		@include slice(1, 1, 1, 1);
+
+		.toolbarButton {
+			flex: 1 0 0;
+			font-size: 9;
+			-unity-text-align: middle-center;
+			background-image: $toolbar-button-background;
+			@include button-box(0);
+			@include margin(0, -1, 0, 0);
+			@include padding(0, 5, 0, 5);
+			height: 19;
+
+			&.space {
+				margin-left: 7;
+			}
+
+			&.active {
+				background-image: $toolbar-button-active-background;
+			}
+
+			&.pulldown {
+
+				&:active {
+					background-image: $toolbar-button-background;
+				}
+			}
+		}
+
+		#toolbarLeft {
+			flex: 0 0 auto;
+			flex-direction: row;
+			align-items: flex-start;
+		}
+
+		#toolbarRight {
+			flex: 1 0 0;
+			flex-direction: row;
+			justify-content: flex-end;
+
+			#toolbarSearch {
+				flex: 1 0 0;
+				height: $toolbar-height;
+				max-width: 500;
+				flex-direction: row;
+				@include margin(0, 5, 0, 0);
+			}
+		}
+	}
+}
+
+#searchContainer {
+	flex: 1 0 0;
+	flex-direction: row;
+	align-items: center;
+	justify-content: flex-start;
+	height: 14;
+	@include margin(0, 0, 0, 0);
+
+	#searchTextField {
+		flex: 1 0 0;
+		font-size: 9;
+		background-image: $toolbar-search-textfield-background;
+		@include margin(2, 5, 1, 5);
+		@include padding(2, 17, 1, 17);
+		@include slice(1, 0, 1, 14);
+		height: 14;
+
+		&:focus {
+			background-image: $toolbar-search-textfield-focus-background;
+		}
+
+		&.placeholder {
+			color: $unity-background-dark-contrast;
+		}
+	}
+
+	#searchCancelButton {
+		width: 14;
+		height: 15;
+		background-image: $toolbar-search-cancel-off-background;
+		@include button-box(0);
+		@include slice(1, 14, 1, 0);
+		@include margin(3, 0, 2, -10);
+		@include padding-box(0);
+		@include border-box(0);
+
+		&.on {
+			background-image: $toolbar-search-cancel-background;
+		}
+
+		&:active {
+			background-image: $toolbar-search-cancel-active-background;
+		}
+	}
+}
+
+#detailListView {
+	flex: 1 0 0;
+	flex-direction: row;
+
+	.link {
+		color: $link-text-color;
+		background: rgba(0, 0, 0, 0);
+		background-image: none;
+		@include margin-box(0);
+		@include padding-box(0);
+		cursor: link;
+	}
+
+	.emptyArea {
+		flex: 1 0 0;
+		@extend .column;
+
+		.title {
+			-unity-text-align: middle-center;
+			font-size: 14;
+		}
+
+		.loading {
+			-unity-position: relative;
+			@include position($spinner-normal-half-size, auto, auto, $spinner-normal-half-size);
+
+			@include border-box(0);
+			@include padding-box(0);
+			@include margin-box(0);
+			@include slice-box(0);
+
+			width: $spinner-normal-size;
+			height: $spinner-normal-size;
+			max-width: $spinner-normal-size;
+			max-height: $spinner-normal-size;
+		}
+	}
+
+	#headerTitle {
+		flex: 1 0 0;
+		font-size: 12;
+		-unity-font-style: bold;
+		color: $unity-text-color;
+	}
+
+	#headerCaret {
+		flex: 0 0 auto;
+		font-size: 12;
+		-unity-font-style: bold;
+		color: $unity-text-color;
+		min-width: 16;
+	}
+
+	#spinnerContainer {
+		-unity-position: absolute;
+		@include position(3, 0, auto, 2);
+		width: 14;
+
+		flex: 0.1 0 0;
+		flex-direction: column;
+		align-items: center;
+	}
+
+	.loading {
+		-unity-position: relative;
+		@include position($spinner-normal-half-size, auto, auto, $spinner-normal-half-size);
+
+		@include border-box(0);
+		@include padding-box(0);
+		@include margin-box(0);
+		@include slice-box(0);
+
+		width: $spinner-normal-size;
+		height: $spinner-normal-size;
+		max-width: $spinner-normal-size;
+		max-height: $spinner-normal-size;
+	}
+
+	.combo {
+		@extend .row;
+		@include margin-box(3);
+		@include padding-box(3);
+
+		.popup {
+			@include padding(0, 0, 0, 8);
+			@include margin-box(0);
+			border-top-width-left-radius: 0;
+			border-bottom-width-left-radius: 0;
+		}
+
+		.button {
+			flex: 1 0 0; // Make buttons take all the parent's free space
+
+			@include font-normal();
+			@include border-box(0);
+			@include margin-box(0);
+			@include padding(2, 6, 3, 6);
+			@include slice(4, $background-button-slice-middle, 4, $background-button-slice-middle);
+
+			-unity-text-align: middle-center;
+			border-left-width: 0;
+			border-top-width: 0;
+			border-right-width: 0;
+			border-bottom-width: 0;
+			background-image: $background-mid-button;
+
+			border-top-width-right-radius: 0;
+			border-bottom-width-right-radius: 0;
+			border-top-width-left-radius: 0;
+			border-bottom-width-left-radius: 0;
+
+			&.selected {
+				background-image: $background-mid-button-selected;
+				color: $unity-text-color-highlight;
+			}
+
+			&.first {
+				@include slice(4, $background-button-slice-right, 4, 6);
+				background-image: $background-left-button;
+
+				&.selected {
+					background-image: $background-left-button-selected;
+				}
+			}
+
+			&.last {
+				@include slice(4, 6, 4, $background-button-slice-left);
+				background-image: $background-right-button;
+
+				&.selected {
+					background-image: $background-right-button-selected;
+				}
+			}
+
+
+			&.small {
+				flex: 0.5 0 0;
+				@include padding(0, 0, 0, 0);
+			}
+		}
+	}
+
+	//--------------------------------------------------------------------------------------------------
+	// Package List
+	//--------------------------------------------------------------------------------------------------
+	#packageListGroup {
+		width: 270;
+
+		#listContainerOuter {
+			@extend .column;
+		}
+
+		#groupContainerOuter {
+
+			#headerContainer {
+				flex: 1 0 0;
+				flex-direction: row;
+				align-items: center;
+				border-color: rgba(0,0,0, 0.5);
+
+				#headerTitle {
+					height: 0;
+					@include margin-box(0);
+					@include padding-box(0);
+					@include border-box(0);
+				}
+			}
+
+			#groupContainer {
+				@include margin(0, 0, 0, 0);
+			}
+		}
+
+		#packageList, #listContainer, #listGroups {
+			@extend .column;
+		}
+
+		#scrollView {
+			@extend .column;
+
+			#VerticalScroller {
+				bottom: 0;
+			}
+
+			#HorizontalScroller {
+				height: 0;
+			}
+
+			#ContentViewport {
+				bottom: 0;
+
+				#ContentView {
+					right: 0;
+					left: 0;
+				}
+			}
+		}
+
+		#noResult {
+			#noResultText {
+				-unity-word-wrap: true;
+			}
+		}
+	}
+
+	//--------------------------------------------------------------------------------------------------
+	// Package Item
+	//--------------------------------------------------------------------------------------------------
+	.package {
+		flex: 1 0 0;
+		flex-direction: row;
+		align-items: center;
+		@include margin(0, 0, 0, 0);
+		border-color: rgba(0,0,0, 0.5);
+		border-bottom-width: 1;
+
+		&.selected {
+			@include selected-element();
+
+			#packageName, #packageVersion {
+				color: $unity-text-color-highlight;
+			}
+		}
+
+		.status {
+			flex: 0 0 14;
+			width: 14;
+			height: 14;
+			@include margin(auto, 0, auto, 2);
+
+			&.installed {
+				background-image: $installed-package-background;
+				&.no-icon {
+	 				background-image: none;
+				}
+			}
+
+			&.outdated {
+ 				background-image: $background-status-outdated;
+				&.no-icon {
+	 				background-image: none;
+				}
+			}
+
+			&.inprogress {
+ 				background-image: none;
+			}
+
+			&.error {
+ 				background-image: $background-status-error;
+			}
+		}
+
+		.name {
+			flex: 1 0 0;
+			@include font-normal();
+			@include margin(auto, 5, auto, 0);
+			@include text-clip();
+		}
+
+		.version {
+			flex: 0 0 auto;
+			@include margin(auto, 5, auto, 0);
+			@include font-small;
+		}
+	}
+
+	//--------------------------------------------------------------------------------------------------
+	// Package Details
+	//--------------------------------------------------------------------------------------------------
+	#detailsGroup {
+		flex: 1 0 0;
+		border-left-width: 1px;
+		border-color: rgba(0,0,0, 0.5);
+
+		#detailsContainer {
+			flex: 1 0 0;
+			flex-direction: column;
+			-unity-position: relative;
+		}
+	}
+
+	#detailView {
+		flex: 1 0 0;
+
+		#VerticalScroller {
+			bottom: 0;
+		}
+
+		#ContentViewport {
+
+			#ContentView {
+				-unity-position: absolute;
+				@include position(0, 0, auto, 0);
+			}
+		}
+
+		.detail {
+			flex: 1 0 0;
+			flex-direction: column;
+			@include padding-box(5);
+
+			.header {
+				flex: 1 0 0;
+				flex-direction: row;
+				align-items: flex-start;
+
+				margin-bottom: 8;
+
+				#titleContainer {
+					flex: 0.9 0 0;
+
+					#detailTitle {
+						font-size: 18;
+						-unity-font-style: bold;
+						-unity-word-wrap: true;
+						@include margin(0, 0, 0, 4);
+					}
+				}
+
+				$controls-height: 19;
+				#detailsControls {
+					flex: 1 0 0;
+					height: $controls-height;
+					flex-direction: row;
+					align-items: center;
+					flex-wrap: wrap;
+					@include margin(3, 0, 0, 0);
+				}
+
+				#updateCombo {
+					flex: 1 0 0;
+					height: $controls-height;
+					align-items: center;
+					@include margin(0, 0, 0, 0);
+					@include padding(0, 0, 0, 0);
+
+					#update {
+						flex: 0 0 auto;
+					}
+
+					#updateDropdownContainer {
+						min-width: 65;
+						max-width: 150;
+						height: $controls-height;
+						flex: 0 0 auto;
+
+						.popup {
+							@include font-normal();
+							height: $controls-height;
+
+							&:focus {
+								background-image: $popup-background;
+							}
+
+							&:hover {
+								.textElement {
+									color: $unity-text-color;
+								}
+							}
+
+							.textElement {
+								margin-top: 2;
+							}
+						}
+					}
+
+					.action {
+						flex: 0 0 auto;
+						@include margin-box(0);
+						@include font-normal();
+						@include padding(2, 4, 3, 4);
+						right: -3;
+						&:hover {
+							color: $unity-text-color;
+						}
+					}
+				}
+
+				#updateContainer {
+					height: $controls-height;
+					flex: 1 0 0;
+					align-items: flex-end;
+
+					@include padding-box(0);
+				}
+
+
+
+				.button {
+					height: $controls-height;
+					@include font-normal();
+					@include button(3,3,4,3);
+				}
+			}
+
+			#detailVersion {
+				font-size: 16;
+				max-height: 30;
+			}
+
+			#detailName {
+				flex: 1 0 0;
+				max-height: 20;
+				-unity-font-style: italic;
+			}
+
+			#detailPackageStatus {
+				flex: 1 0 0;
+				-unity-font-style: bold;
+				-unity-word-wrap: true;
+			}
+
+			#detailTag {
+				width: 60;
+				@include font-normal();
+				border-radius: 5;
+				border-color: rgb(180, 180, 180);
+				@include border-box(2);
+				-unity-text-align: middle-center;
+			}
+
+			#detailDesc, #detailModuleReference {
+				flex: 1 0 0;
+				@include font-normal();
+				-unity-word-wrap: true;
+
+				&.empty {
+					-unity-font-style: italic;
+				}
+			}
+
+			#detailAuthor {
+				flex: 1 0 0;
+				@include font-normal();
+				-unity-word-wrap: true;
+			}
+
+			#detailCategory {
+				flex: 1 0 0;
+				@include font-normal();
+				-unity-word-wrap: true;
+
+				@include margin(auto, auto, 5, auto);
+			}
+
+			#changeLogContainer, #viewLicensesContainer {
+				flex: 0 0 auto;
+				flex-direction: row;
+			}
+
+			#detailActions, .detailActions {
+				flex: 0 0 auto;
+				flex-direction: row;
+				margin-left: 2;
+
+				@extend .row;
+
+				.detailAction {
+					@include margin(auto, 0, auto, 0);
+					@include padding(auto, 2, auto, 2);
+					border-left-width: 2;
+					border-right-width: 2;
+				}
+
+				.detailActionSeparator {
+					@include margin(auto, 0, auto, 0);
+					@include padding(auto, 0, auto, 0);
+					border-left-width: 0;
+					border-right-width: 0;
+				}
+
+				#thirdPartyNoticeLabel {
+					@include margin(4, 0, 4, 0);
+					@include padding-box(0);
+					-unity-word-wrap: true;
+				}
+
+				#viewThirdParty {
+					border-right-width: 0;
+				}
+			}
+
+			.versionContainer {
+				@extend .row;
+				align-items: center;
+				justify-content: flex-start;
+
+				#detailVersion {
+					flex: 0 0 auto;
+				}
+			}
+
+			.tag {
+				border-color: $package-tag-color;
+				color: $package-tag-color;
+
+				&.verified {
+					border-color: $package-tag-recommended-color;
+					color: $package-tag-recommended-color;
+				}
+			}
+
+			.tagLines {
+			}
+
+			.tagLine {
+				flex: 0 0 auto;
+				flex-direction: row;
+			}
+
+			.tagContainer {
+			}
+		}
+	}
+
+	#detailError {
+		-unity-position: absolute;
+		@include position(5, 5, auto, 5);
+		min-height: 200;
+		-unity-word-wrap: true;
+
+		&.display-none {
+			@include position(0, 0, 0, 0);
+			width: 0;
+			height: 0;
+			min-height: 0;
+			max-height: 0;
+			@include border-box(0);
+			@include padding-box(0);
+			@include margin-box(0);
+		}
+	}
+
+	#packageStatusBar {
+		-unity-position: relative;
+
+		flex: 0 0 auto;
+		@include margin(2, 0, 0, 0);
+
+		border-color: rgba(0, 0, 0, 0.5);
+		@include border(1, 0, 0, 0);
+	}
+
+	#statusBarContainer {
+		flex-direction: row;
+		align-items: center;
+		justify-content: space-between;
+
+		#loadingContainer{
+			
+			flex-direction: row;
+			align-items: center;
+			justify-content: flex-start;
+
+			margin-left: 2;
+
+			#loadingIcon {
+				background-image: $background-status-error;
+				width: 16;
+				height: 16;
+				margin-left: -12;
+				margin-right: 0;
+			}
+	
+			#loadingText {
+				padding-left: 2;
+				-unity-font-style: italic;
+	
+				&.icon {
+					margin-left: 0;
+				}
+			}
+		}
+
+		#moreAddOptionsButton {
+			font-size: 16;
+			background-image: none;
+			@include margin(0, 0, -2, 0);
+			@include padding(3, 6, 6, 6);
+			border-color: rgba(0, 0, 0, 0.5);
+			@include border(0, 1, 0, 0);
+		}
+	}
+
+	#packageAddFromUrlField {
+		-unity-position: absolute;
+		@include position(-35, 0, 0, 0);
+	}
+
+	#addFromUrlFieldContainer {
+		border-color: rgba(0, 0, 0, 0.5);
+		@include border(1, 0, 1, 0);
+
+		flex-direction: row;
+		justify-content: space-between;
+		align-items: center;
+
+		height: 35;
+		background-color: $unity-background;
+
+		#urlTextField {
+			flex: 1 0 0;
+			height: 20;
+			-unity-text-align: middle-left;
+		}
+
+		#addFromUrlButton {
+			flex: 0 0 auto;
+			height: 20;
+		}
+	}
+}
+
+.alert {
+	background-color: rgba(200,0,0,0.8);
+	border-color: #FF0000;
+	flex-direction: row;
+
+	@include border-box(1);
+	@include padding(5, 10, 5, 10);
+
+	#alertMessage {
+		flex: 1 0 0;
+		color: $unity-text-color-highlight;
+		-unity-word-wrap: true;
+		@include text-clip();
+	}
+
+	#close {
+		flex: 0 0 auto;
+		max-height: 30;
+		@include position(auto, auto, auto, 5);
+		@include button(3,3,4,3);
+	}
+}
+
+.spinner {
+	flex: 0 0 auto;
+	@include position(-$spinner-normal-half-size, auto, auto, -$spinner-normal-half-size);
+
+	min-width: $spinner-normal-size;
+	min-height: $spinner-normal-size;
+	max-width: $spinner-normal-size;
+	max-height: $spinner-normal-size;
+	background-image: $background-spinner-normal;
+}
+
+.largeSpinner {
+	flex: 0 0 auto;
+	@include position(-$spinner-large-half-size, auto, auto, -$spinner-large-half-size);
+
+	min-width: $spinner-large-size;
+	min-height: $spinner-large-size;
+	max-width: $spinner-large-size;
+	max-height: $spinner-large-size;
+	background-image: $background-spinner-large;
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8acfd266c5fdbd89eca861fd9254b1c3c5a6df60
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Styles/_common.scss.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e45f79867376940b7ba31502238d8efa
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates.meta
new file mode 100644
index 0000000000000000000000000000000000000000..79b2a2dc86fd1a125f59685f48453e717e449af3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 1cf679539c5e5499e8856aaacf1fc32f
+folderAsset: yes
+timeCreated: 1502292048
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..1eb924840c5ab1777ebbd4a05f3db31163566464
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
+    <engine:VisualElement name="alertContainer" class="alert">
+        <engine:Label name="alertMessage"/>
+        <engine:Button name="close" text="Close" class="button"/>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..291949aeb78aa4a1654165832346e12592b442ed
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/Alert.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4f768b64e6c37495699fffe3007e4379
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..84a52309830e5ebaedbbd66fe63b0c71ff750fff
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="addFromUrlFieldContainer" focus-index="0">
+        <engine:TextField name="urlTextField"/>
+        <engine:Button name="addFromUrlButton" text="Add"/>
+    </engine:VisualElement>
+</engine:UXML>
+
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f186736783d87a130559630244ef32af0d1ec376
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageAddFromUrlField.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 97dff1b5ae41ee84886ae7a80ae21499
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..709bddd328b16d7e471bd2f28594b4c5bdd098e0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="detailsContainer">
+        <engine:ScrollView name="detailView">
+            <engine:VisualElement name="detail" class="detail">
+                <engine:VisualElement class="header">
+                    <engine:VisualElement name="titleContainer">
+                        <engine:Label name="detailTitle"/>
+                    </engine:VisualElement>
+                    <engine:VisualElement name="detailsControls">
+                        <engine:VisualElement name="updateContainer">
+                            <engine:VisualElement name="updateCombo" class="combo">
+                                <engine:Button name="update" text="Update" class="action"/>
+                                <engine:VisualElement name="updateDropdownContainer" class="button last"/>
+                            </engine:VisualElement>
+                        </engine:VisualElement>
+                        <engine:Button name="updateBuiltIn" text="Enable" class="button"/>
+                        <engine:Button name="remove" text="Remove" class="button"/>
+                    </engine:VisualElement>
+                </engine:VisualElement>
+                <engine:VisualElement class="versionContainer">
+                    <engine:Label name="detailVersion"/>
+                    <engine:VisualElement name="tag-inDevelopment" class="tagLine display-none">
+                      <engine:Label name="tag" class="tag" text="in development"/>
+                    </engine:VisualElement>
+                    <engine:VisualElement name="tag-local" class="tagLine display-none">
+                        <engine:Label name="tag" class="tag" text="local"/>
+                    </engine:VisualElement>
+                    <engine:VisualElement name="tag-preview" class="tagLine display-none">
+                        <engine:Label name="tag" class="tag" text="preview"/>
+                    </engine:VisualElement>
+                    <engine:VisualElement name="tag-verified" class="tagLine display-none">
+                        <engine:Label name="tagVerify" class="tag verified" text="verified"/>
+                    </engine:VisualElement>
+                </engine:VisualElement>
+
+                <engine:VisualElement name="detailCustomContainer" class="display-none"/>
+
+                <engine:VisualElement name="documentationContainer" class="display-none">
+                    <engine:VisualElement name="detailActions">
+                        <engine:Button name="viewDocumentation" class="detailAction link" text="View documentation"/>
+                        <engine:VisualElement name="changeLogContainer">
+                            <engine:Label name="changelogSeparator" class="detailActionSeparator" text="-"/>
+                            <engine:Button name="viewChangelog" class="detailAction link" text="View changelog"/>
+                        </engine:VisualElement>
+                        <engine:VisualElement name="viewLicensesContainer">
+                            <engine:Label name="thirdPartySeparator" class="detailActionSeparator" text="-"/>
+                            <engine:Button name="viewLicenses" class="link" text="View licenses"/>
+                        </engine:VisualElement>
+                    </engine:VisualElement>
+                </engine:VisualElement>
+
+                <engine:Label name="detailName"/>
+                <engine:Label name="detailAuthor"/>
+                <engine:Label name="detailModuleReference"/>
+                <engine:Label name="detailDesc"/>
+
+            </engine:VisualElement>
+        </engine:ScrollView>
+        <upm:Alert name="detailError" class="display-none"/>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f9bfba14c5c0539484b791c737e01f495a54707c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageDetails.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 93c1370867fcb45079592da39e0994c5
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..15a9e7746b2ac70a0555707b2b9bd11790c191b7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
+    <engine:VisualElement name="groupContainerOuter">
+        <engine:VisualElement name="headerContainer">
+            <engine:Label name="headerTitle" text="Default" />
+        </engine:VisualElement>
+
+        <engine:VisualElement name="groupContainer" />
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..31eed0fba6121ef371da6a8104c81ce96d4f387d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageGroup.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 25ebe415cc14c4f4ea15c34a796b75bb
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..499aa31e349b7cb023a4adbe2a5d2e9f22a5dbb9
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+  <engine:VisualElement name="packageContainer" class="package">
+    <engine:VisualElement name="spinnerContainer">
+        <engine:VisualElement name="loadingSpinnerContainer" class="loading">
+            <upm:LoadingSpinner name="packageSpinner" class="spinner"/>
+        </engine:VisualElement>
+    </engine:VisualElement>
+    <engine:Label name="packageState" class="status" />
+    <engine:Label name="packageName" class="name" />
+    <engine:Label name="packageVersion" class="version"/>
+  </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1102a59f7caa9d17bc8f93df77fa0304ff09ff78
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageItem.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 10145f279f90346bbb61712ff585828b
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..05956ed6d2bff2e5a1e9c4b3e352447ffd56e4ad
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="listContainerOuter">
+        <engine:VisualElement name="listContainer">
+            <!-- Specifying the vertical page size a workaround for https://fogbugz.unity3d.com/f/cases/1029430/ -->
+            <engine:ScrollView name="scrollView" vertical-page-size="10"/>
+            <engine:VisualElement name="emptyArea" class="list emptyArea">
+                <engine:Label class="title" text="There are no packages."/>
+            </engine:VisualElement>
+            <engine:VisualElement name="noResult" class="list emptyArea">
+                <engine:Label name="noResultText" class="title"/>
+            </engine:VisualElement>
+        </engine:VisualElement>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3092d2119d8118847c9f5c83f66ebb6e08e99312
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageList.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 46c02d8d6499b4309ac1ec5d0b818585
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..0283a3383653a9d4cf6a5f53c60da8037d6e3e54
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML
+        xmlns:engine="UnityEngine.Experimental.UIElements"
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="toolbarView">
+        <engine:VisualElement name="toolbarLeft">
+            <engine:Label name="toolbarFilterButton" class="toolbarButton space pulldown" text="All Packages â–¾"/>
+            <engine:Label class="toolbarButton"/>
+        </engine:VisualElement>
+        <engine:VisualElement name="toolbarRight">
+            <engine:Label name="toolbarAdvancedButton" class="toolbarButton pulldown" text="Advanced â–¾"/>
+            <upm:PackageSearchToolbar name="toolbarSearch"/>
+        </engine:VisualElement>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..00894beb4009d6f97cdb7f356d50dfbe42859c0a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerToolbar.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3aba9fe1ad29b42ffb0eea781318a626
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..12d15040d1b17984f1f8c940298f78211492b98e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="container">
+        <upm:PackageManagerToolbar name="toolbarContainer"/>
+        <engine:VisualElement name="detailListView">
+            <engine:VisualElement name="packageListGroup">
+                <upm:PackageList name="packageList" />
+                <upm:PackageStatusBar name="packageStatusBar" />
+            </engine:VisualElement>
+            <upm:PackageDetails name="detailsGroup" />
+        </engine:VisualElement>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1dcb82aba45deb7f1e1b55df87fe6b29d01029b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageManagerWindow.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a8d9e44eff3f447db9448925617ccb44
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..322403898c71e489a12d82aeb5376489dabea1c5
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd">
+    <engine:VisualElement name="searchContainer">
+        <engine:TextField name="searchTextField"/>
+        <engine:Button name="searchCancelButton"/>
+    </engine:VisualElement>
+</engine:UXML>
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..272fe81f89f809a4618a90cb68ca62ad1d07454b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageSearchToolbar.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cd44c1bc0fa624a39aa784af44c62180
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml
new file mode 100644
index 0000000000000000000000000000000000000000..2a37506d7e7df7da8f5b707712738abd83a7ac93
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<engine:UXML 
+        xmlns:engine="UnityEngine.Experimental.UIElements" 
+        xmlns:upm="UnityEditor.PackageManager.UI"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="UnityEngine.Experimental.UIElements UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
+                            UnityEditor.PackageManager.UI UIElementsSchema/UnityEditor.PackageManager.UI.xsd">
+    <engine:VisualElement name="statusBarContainer">
+        <engine:VisualElement name="loadingContainer">
+            <engine:VisualElement name="loadingSpinnerContainer" class="loading">
+                <upm:LoadingSpinner name="packageSpinner" class="spinner"/>
+            </engine:VisualElement>
+            <engine:Label name="loadingIcon"/>
+            <engine:Label name="loadingText"/>
+        </engine:VisualElement>
+        <engine:Button name="moreAddOptionsButton" text="+"/>
+    </engine:VisualElement>
+    <upm:PackageAddFromUrlField name="packageAddFromUrlField"/>
+</engine:UXML>
+
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9a037be174871db7f1f664b5c4588e5c510ff4f5
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/PackageStatusBar.uxml.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bbec1324b05a54939ad2fea2d7e11063
+ScriptedImporter:
+  fileIDToRecycleName:
+    11400000: tree
+    11400002: inlineStyle
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+  script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema.meta
new file mode 100644
index 0000000000000000000000000000000000000000..89278cd326da1bb3e60ec8d6add432e9985d96d2
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3a2bf0128e2dd664f91dfba49e36a012
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..58841e7470b5c67979ea56cb2183caf981cb8766
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
+  <xs:import schemaLocation="UnityEditor.PackageManager.UI.xsd" namespace="UnityEditor.PackageManager.UI" />
+  <xs:import schemaLocation="UnityEditor.Experimental.UIElements.xsd" namespace="UnityEditor.Experimental.UIElements" />
+</xs:schema>
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7bd10ba317d4fda4d0d73a4b6e0e6962e6e50ee9
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UIElements.xsd.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7d22934bf84ccd14082fd2d5a9f5951e
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..4b11a3a58e096e139817f19dd7cfc0d6984b5b94
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEditor.Experimental.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
+  <xs:complexType name="DoubleFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
+        <xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
+        <xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="value" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="DoubleField" substitutionGroup="engine:VisualElement" type="editor:DoubleFieldType" />
+  <xs:complexType name="IntegerFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
+        <xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
+        <xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="value" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="IntegerField" substitutionGroup="engine:VisualElement" type="editor:IntegerFieldType" />
+  <xs:complexType name="CurveFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="CurveField" substitutionGroup="engine:VisualElement" type="editor:CurveFieldType" />
+  <xs:complexType name="ObjectFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="true" name="allowSceneObjects" type="xs:boolean" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ObjectField" substitutionGroup="engine:VisualElement" type="editor:ObjectFieldType" />
+  <xs:complexType name="ColorFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="RGBA(0.000, 0.000, 0.000, 1.000)" name="value" type="xs:string" use="optional" />
+        <xs:attribute default="true" name="showEyeDropper" type="xs:boolean" use="optional" />
+        <xs:attribute default="true" name="showAlpha" type="xs:boolean" use="optional" />
+        <xs:attribute default="false" name="hdr" type="xs:boolean" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ColorField" substitutionGroup="engine:VisualElement" type="editor:ColorFieldType" />
+  <xs:complexType name="EnumFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute name="type" type="xs:string" use="required" />
+        <xs:attribute default="" name="value" type="xs:string" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="EnumField" substitutionGroup="engine:VisualElement" type="editor:EnumFieldType" />
+  <xs:complexType name="GradientFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="GradientField" substitutionGroup="engine:VisualElement" type="editor:GradientFieldType" />
+  <xs:complexType name="RectFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="x" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="y" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="w" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="h" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="RectField" substitutionGroup="engine:VisualElement" type="editor:RectFieldType" />
+  <xs:complexType name="Vector2FieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="x" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="y" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Vector2Field" substitutionGroup="engine:VisualElement" type="editor:Vector2FieldType" />
+  <xs:complexType name="Vector3FieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="x" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="y" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="z" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Vector3Field" substitutionGroup="engine:VisualElement" type="editor:Vector3FieldType" />
+  <xs:complexType name="Vector4FieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="x" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="y" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="z" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="w" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Vector4Field" substitutionGroup="engine:VisualElement" type="editor:Vector4FieldType" />
+  <xs:complexType name="BoundsFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="cx" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="cy" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="cz" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="ex" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="ey" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="ez" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="BoundsField" substitutionGroup="engine:VisualElement" type="editor:BoundsFieldType" />
+</xs:schema>
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..315df546fb94bb4d146780fcae90fefbb13eebd3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.Experimental.UIElements.xsd.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 86d0242b70e6ab24aaf5a0e67edf2a61
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..c0200c5b6af115664ab26d780ccfd369d5927440
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEditor.PackageManager.UI" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="UnityEngine.Experimental.UIElements.xsd" namespace="UnityEngine.Experimental.UIElements" />
+  <xs:complexType name="AlertType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Alert" substitutionGroup="engine:VisualElement" type="upm:AlertType" />
+  <xs:complexType name="LoadingSpinnerType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="LoadingSpinner" substitutionGroup="engine:VisualElement" type="upm:LoadingSpinnerType" />
+  <xs:complexType name="PackageDetailsType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PackageDetails" substitutionGroup="engine:VisualElement" type="upm:PackageDetailsType" />
+  <xs:complexType name="PackageGroupType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PackageGroup" substitutionGroup="engine:VisualElement" type="upm:PackageGroupType" />
+  <xs:complexType name="PackageItemType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PackageItem" substitutionGroup="engine:VisualElement" type="upm:PackageItemType" />
+  <xs:complexType name="PackageListType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PackageList" substitutionGroup="engine:VisualElement" type="upm:PackageListType" />
+  <xs:complexType name="PackageSearchFilterTabsType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PackageSearchFilterTabs" substitutionGroup="engine:VisualElement" type="upm:PackageSearchFilterTabsType" />
+</xs:schema>
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..964349cb43c53ae199eb0884d7b62a4673b1f76f
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEditor.PackageManager.UI.xsd.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3abc8faab9f5cbe4db0336c99fef85ca
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..59b13379f56883fb33f2f428fd33fb9223803499
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:upm="UnityEditor.PackageManager.UI" xmlns:engine="UnityEngine.Experimental.UIElements" xmlns:editor="UnityEditor.Experimental.UIElements" elementFormDefault="qualified" targetNamespace="UnityEngine.Experimental.UIElements" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="UXMLType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="xs:anyType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="UXML" type="engine:UXMLType" />
+  <xs:simpleType name="VisualElement_pickingMode_Type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Position" />
+      <xs:enumeration value="Ignore" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="VisualElementType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="xs:anyType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="VisualElement" type="engine:VisualElementType" />
+  <xs:complexType name="IMGUIContainerType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="IMGUIContainer" substitutionGroup="engine:VisualElement" type="engine:IMGUIContainerType" />
+  <xs:complexType name="ImageType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Image" substitutionGroup="engine:VisualElement" type="engine:ImageType" />
+  <xs:complexType name="LabelType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Label" substitutionGroup="engine:VisualElement" type="engine:LabelType" />
+  <xs:complexType name="RepeatButtonType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="delay" type="xs:long" use="optional" />
+        <xs:attribute default="0" name="interval" type="xs:long" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="RepeatButton" substitutionGroup="engine:VisualElement" type="engine:RepeatButtonType" />
+  <xs:complexType name="ScrollerButtonType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="delay" type="xs:long" use="optional" />
+        <xs:attribute default="0" name="interval" type="xs:long" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ScrollerButton" substitutionGroup="engine:VisualElement" type="engine:ScrollerButtonType" />
+  <xs:complexType name="ScrollViewType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="false" name="showHorizontalScroller" type="xs:boolean" use="optional" />
+        <xs:attribute default="false" name="showVerticalScroller" type="xs:boolean" use="optional" />
+        <xs:attribute default="0" name="horizontalLowValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="horizontalHighValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="horizontalPageSize" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="horizontalValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="verticalLowValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="verticalHighValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="verticalPageSize" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="verticalValue" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ScrollView" substitutionGroup="engine:VisualElement" type="engine:ScrollViewType" />
+  <xs:simpleType name="Scroller_direction_Type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Horizontal" />
+      <xs:enumeration value="Vertical" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="ScrollerType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="lowValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="highValue" type="xs:float" use="optional" />
+        <xs:attribute default="Vertical" name="direction" type="engine:Scroller_direction_Type" use="optional" />
+        <xs:attribute default="0" name="value" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Scroller" substitutionGroup="engine:VisualElement" type="engine:ScrollerType" />
+  <xs:simpleType name="Slider_direction_Type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Horizontal" />
+      <xs:enumeration value="Vertical" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:complexType name="SliderType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="0" name="lowValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="highValue" type="xs:float" use="optional" />
+        <xs:attribute default="0" name="pageSize" type="xs:float" use="optional" />
+        <xs:attribute default="Vertical" name="direction" type="engine:Slider_direction_Type" use="optional" />
+        <xs:attribute default="0" name="value" type="xs:float" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Slider" substitutionGroup="engine:VisualElement" type="engine:SliderType" />
+  <xs:complexType name="TextFieldType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="0" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute default="0" name="maxLength" type="xs:int" use="optional" />
+        <xs:attribute default="false" name="password" type="xs:boolean" use="optional" />
+        <xs:attribute default="" name="maskCharacter" type="xs:string" use="optional" />
+        <xs:attribute default="false" name="multiline" type="xs:boolean" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="TextField" substitutionGroup="engine:VisualElement" type="engine:TextFieldType" />
+  <xs:complexType name="ToggleType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:attribute default="false" name="value" type="xs:boolean" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Toggle" substitutionGroup="engine:VisualElement" type="engine:ToggleType" />
+  <xs:complexType name="VisualContainerType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="VisualContainer" substitutionGroup="engine:VisualElement" type="engine:VisualContainerType" />
+  <xs:complexType name="TemplateContainerType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute name="template" type="xs:string" use="required" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="TemplateContainer" substitutionGroup="engine:VisualElement" type="engine:TemplateContainerType" />
+  <xs:complexType name="BoxType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Box" substitutionGroup="engine:VisualElement" type="engine:BoxType" />
+  <xs:complexType name="PopupWindowType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+          <xs:element ref="engine:VisualElement" />
+        </xs:sequence>
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="PopupWindow" substitutionGroup="engine:VisualElement" type="engine:PopupWindowType" />
+  <xs:complexType name="ListViewType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="30" name="itemHeight" type="xs:int" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ListView" substitutionGroup="engine:VisualElement" type="engine:ListViewType" />
+  <xs:complexType name="ButtonType">
+    <xs:complexContent mixed="false">
+      <xs:restriction base="engine:VisualElementType">
+        <xs:attribute default="" name="name" type="xs:string" use="optional" />
+        <xs:attribute default="Position" name="pickingMode" type="engine:VisualElement_pickingMode_Type" use="optional" />
+        <xs:attribute default="-1" name="focusIndex" type="xs:int" use="optional" />
+        <xs:attribute default="" name="text" type="xs:string" use="optional" />
+        <xs:anyAttribute processContents="lax" />
+      </xs:restriction>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="Button" substitutionGroup="engine:VisualElement" type="engine:ButtonType" />
+</xs:schema>
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1239813fe194db9878faeb7af1edaee79fba298d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Resources/Templates/UIElementsSchema/UnityEngine.Experimental.UIElements.xsd.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9da568db70dafa345a908282554b3672
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a5126eda1976db102ec960b994ddd2cad31f7f6a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3c61c79a991f84470843243e9710743e
+folderAsset: yes
+timeCreated: 1502224504
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4d6fb4820d66077a55b1663b25731413fc2e557e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 06b575597b644fe8ba88495149d01b66
+timeCreated: 1503684160
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d27d9e4134b961be98bcb3823b90a45e0673eb55
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs
@@ -0,0 +1,563 @@
+/*
+Copyright (c) 2013 Max Hauser 
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+From: https://github.com/maxhauser/semver
+*/
+
+using System;
+#if !NETSTANDARD
+using System.Globalization;
+using System.Runtime.Serialization;
+using System.Security.Permissions;
+#endif
+using System.Text.RegularExpressions;
+
+namespace Semver
+{
+    /// <summary>
+    /// A semantic version implementation.
+    /// Conforms to v2.0.0 of http://semver.org/
+    /// </summary>
+#if NETSTANDARD
+    public sealed class SemVersion : IComparable<SemVersion>, IComparable
+#else
+    [Serializable]
+    internal sealed class SemVersion : IComparable<SemVersion>, IComparable, ISerializable
+#endif
+    {
+        static Regex parseEx =
+            new Regex(@"^(?<major>\d+)" +
+                @"(\.(?<minor>\d+))?" +
+                @"(\.(?<patch>\d+))?" +
+                @"(\-(?<pre>[0-9A-Za-z\-\.]+))?" +
+                @"(\+(?<build>[0-9A-Za-z\-\.]+))?$",
+#if NETSTANDARD
+                RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture);
+#else
+                RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+#endif
+
+#if !NETSTANDARD
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SemVersion" /> class.
+        /// </summary>
+        /// <param name="info"></param>
+        /// <param name="context"></param>
+        /// <exception cref="ArgumentNullException"></exception>
+        private SemVersion(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            var semVersion = Parse(info.GetString("SemVersion"));
+            Major = semVersion.Major;
+            Minor = semVersion.Minor;
+            Patch = semVersion.Patch;
+            Prerelease = semVersion.Prerelease;
+            Build = semVersion.Build;
+        }
+#endif
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SemVersion" /> class.
+        /// </summary>
+        /// <param name="major">The major version.</param>
+        /// <param name="minor">The minor version.</param>
+        /// <param name="patch">The patch version.</param>
+        /// <param name="prerelease">The prerelease version (eg. "alpha").</param>
+        /// <param name="build">The build eg ("nightly.232").</param>
+        public SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "")
+        {
+            this.Major = major;
+            this.Minor = minor;
+            this.Patch = patch;
+
+            this.Prerelease = prerelease ?? "";
+            this.Build = build ?? "";
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="SemVersion"/> class.
+        /// </summary>
+        /// <param name="version">The <see cref="System.Version"/> that is used to initialize 
+        /// the Major, Minor, Patch and Build properties.</param>
+        public SemVersion(Version version)
+        {
+            if (version == null)
+                throw new ArgumentNullException("version");
+
+            this.Major = version.Major;
+            this.Minor = version.Minor;
+
+            if (version.Revision >= 0)
+            {
+                this.Patch = version.Revision;
+            }
+
+            this.Prerelease = String.Empty;
+
+            if (version.Build > 0)
+            {
+                this.Build = version.Build.ToString();
+            }
+            else
+            {
+                this.Build = String.Empty;
+            }
+        }
+
+        /// <summary>
+        /// Parses the specified string to a semantic version.
+        /// </summary>
+        /// <param name="version">The version string.</param>
+        /// <param name="strict">If set to <c>true</c> minor and patch version are required, else they default to 0.</param>
+        /// <returns>The SemVersion object.</returns>
+        /// <exception cref="System.InvalidOperationException">When a invalid version string is passed.</exception>
+        public static SemVersion Parse(string version, bool strict = false)
+        {
+            var match = parseEx.Match(version);
+            if (!match.Success)
+            {
+                return new SemVersion(0);
+            }
+
+#if NETSTANDARD
+            var major = int.Parse(match.Groups["major"].Value);
+#else
+            var major = int.Parse(match.Groups["major"].Value, CultureInfo.InvariantCulture);
+#endif
+
+            var minorMatch = match.Groups["minor"];
+            int minor = 0;
+            if (minorMatch.Success) 
+            {
+#if NETSTANDARD
+                minor = int.Parse(minorMatch.Value);
+#else
+                minor = int.Parse(minorMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict)
+            {
+                throw new InvalidOperationException("Invalid version (no minor version given in strict mode)");
+            }
+
+            var patchMatch = match.Groups["patch"];
+            int patch = 0;
+            if (patchMatch.Success)
+            {
+#if NETSTANDARD
+                patch = int.Parse(patchMatch.Value);
+#else
+                patch = int.Parse(patchMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict) 
+            {
+                throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
+            }
+
+            var prerelease = match.Groups["pre"].Value;
+            var build = match.Groups["build"].Value;
+
+            return new SemVersion(major, minor, patch, prerelease, build);
+        }
+
+        /// <summary>
+        /// Parses the specified string to a semantic version.
+        /// </summary>
+        /// <param name="version">The version string.</param>
+        /// <param name="semver">When the method returns, contains a SemVersion instance equivalent 
+        /// to the version string passed in, if the version string was valid, or <c>null</c> if the 
+        /// version string was not valid.</param>
+        /// <param name="strict">If set to <c>true</c> minor and patch version are required, else they default to 0.</param>
+        /// <returns><c>False</c> when a invalid version string is passed, otherwise <c>true</c>.</returns>
+        public static bool TryParse(string version, out SemVersion semver, bool strict = false)
+        {
+            try
+            {
+                semver = Parse(version, strict);
+                return true;
+            }
+            catch (Exception)
+            {
+                semver = null;
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// Tests the specified versions for equality.
+        /// </summary>
+        /// <param name="versionA">The first version.</param>
+        /// <param name="versionB">The second version.</param>
+        /// <returns>If versionA is equal to versionB <c>true</c>, else <c>false</c>.</returns>
+        public static bool Equals(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null);
+            return versionA.Equals(versionB);
+        }
+
+        /// <summary>
+        /// Compares the specified versions.
+        /// </summary>
+        /// <param name="versionA">The version to compare to.</param>
+        /// <param name="versionB">The version to compare against.</param>
+        /// <returns>If versionA &lt; versionB <c>&lt; 0</c>, if versionA &gt; versionB <c>&gt; 0</c>,
+        /// if versionA is equal to versionB <c>0</c>.</returns>
+        public static int Compare(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null) ? 0 : -1;
+            return versionA.CompareTo(versionB);
+        }
+
+        /// <summary>
+        /// Make a copy of the current instance with optional altered fields. 
+        /// </summary>
+        /// <param name="major">The major version.</param>
+        /// <param name="minor">The minor version.</param>
+        /// <param name="patch">The patch version.</param>
+        /// <param name="prerelease">The prerelease text.</param>
+        /// <param name="build">The build text.</param>
+        /// <returns>The new version object.</returns>
+        public SemVersion Change(int? major = null, int? minor = null, int? patch = null,
+            string prerelease = null, string build = null)
+        {
+            return new SemVersion(
+                major ?? this.Major,
+                minor ?? this.Minor,
+                patch ?? this.Patch,
+                prerelease ?? this.Prerelease,
+                build ?? this.Build);
+        }
+
+        /// <summary>
+        /// Gets the major version.
+        /// </summary>
+        /// <value>
+        /// The major version.
+        /// </value>
+        public int Major { get; private set; }
+
+        /// <summary>
+        /// Gets the minor version.
+        /// </summary>
+        /// <value>
+        /// The minor version.
+        /// </value>
+        public int Minor { get; private set; }
+
+        /// <summary>
+        /// Gets the patch version.
+        /// </summary>
+        /// <value>
+        /// The patch version.
+        /// </value>
+        public int Patch { get; private set; }
+
+        /// <summary>
+        /// Gets the pre-release version.
+        /// </summary>
+        /// <value>
+        /// The pre-release version.
+        /// </value>
+        public string Prerelease { get; private set; }
+
+        /// <summary>
+        /// Gets the build version.
+        /// </summary>
+        /// <value>
+        /// The build version.
+        /// </value>
+        public string Build { get; private set; }
+
+        /// <summary>
+        /// Returns a <see cref="System.String" /> that represents this instance.
+        /// </summary>
+        /// <returns>
+        /// A <see cref="System.String" /> that represents this instance.
+        /// </returns>
+        public override string ToString()
+        {
+            var version = "" + Major + "." + Minor + "." + Patch;
+            if (!String.IsNullOrEmpty(Prerelease))
+                version += "-" + Prerelease;
+            if (!String.IsNullOrEmpty(Build))
+                version += "+" + Build;
+            return version;
+        }
+
+        /// <summary>
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// </summary>
+        /// <param name="obj">An object to compare with this instance.</param>
+        /// <returns>
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes <paramref name="obj" /> in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as <paramref name="obj" />. i
+        ///  Greater than zero This instance follows <paramref name="obj" /> in the sort order.
+        /// </returns>
+        public int CompareTo(object obj)
+        {
+            return CompareTo((SemVersion)obj);
+        }
+
+        /// <summary>
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// </summary>
+        /// <param name="other">An object to compare with this instance.</param>
+        /// <returns>
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes <paramref name="other" /> in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as <paramref name="other" />. i
+        ///  Greater than zero This instance follows <paramref name="other" /> in the sort order.
+        /// </returns>
+        public int CompareTo(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.CompareByPrecedence(other);
+            if (r != 0)
+                return r;
+
+            r = CompareComponent(this.Build, other.Build);
+            return r;
+        }
+
+        /// <summary>
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// </summary>
+        /// <param name="other">The semantic version.</param>
+        /// <returns><c>true</c> if the version precedence matches.</returns>
+        public bool PrecedenceMatches(SemVersion other)
+        {
+            return CompareByPrecedence(other) == 0;
+        }
+
+        /// <summary>
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// </summary>
+        /// <param name="other">The semantic version.</param>
+        /// <returns>
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes <paramref name="other" /> in the version precedence.
+        ///  Zero This instance has the same precedence as <paramref name="other" />. i
+        ///  Greater than zero This instance has creater precedence as <paramref name="other" />.
+        /// </returns>
+        public int CompareByPrecedence(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.Major.CompareTo(other.Major);
+            if (r != 0) return r;
+
+            r = this.Minor.CompareTo(other.Minor);
+            if (r != 0) return r;
+
+            r = this.Patch.CompareTo(other.Patch);
+            if (r != 0) return r;
+
+            r = CompareComponent(this.Prerelease, other.Prerelease, true);
+            return r;
+        }
+
+        static int CompareComponent(string a, string b, bool lower = false)
+        {
+            var aEmpty = String.IsNullOrEmpty(a);
+            var bEmpty = String.IsNullOrEmpty(b);
+            if (aEmpty && bEmpty)
+                return 0;
+
+            if (aEmpty)
+                return lower ? 1 : -1;
+            if (bEmpty)
+                return lower ? -1 : 1;
+
+            var aComps = a.Split('.');
+            var bComps = b.Split('.');
+
+            var minLen = Math.Min(aComps.Length, bComps.Length);
+            for (int i = 0; i < minLen; i++)
+            {
+                var ac = aComps[i];
+                var bc = bComps[i];
+                int anum, bnum;
+                var isanum = Int32.TryParse(ac, out anum);
+                var isbnum = Int32.TryParse(bc, out bnum);
+                int r;
+                if (isanum && isbnum)
+                {
+                    r = anum.CompareTo(bnum);
+                    if (r != 0) return anum.CompareTo(bnum);
+                }
+                else
+                {
+                    if (isanum)
+                        return -1;
+                    if (isbnum)
+                        return 1;
+                    r = String.CompareOrdinal(ac, bc);
+                    if (r != 0)
+                        return r;
+                }
+            }
+
+            return aComps.Length.CompareTo(bComps.Length);
+        }
+
+        /// <summary>
+        /// Determines whether the specified <see cref="System.Object" /> is equal to this instance.
+        /// </summary>
+        /// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param>
+        /// <returns>
+        ///   <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>.
+        /// </returns>
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(obj, null))
+                return false;
+
+            if (ReferenceEquals(this, obj))
+                return true;
+
+            var other = (SemVersion)obj;
+
+            return this.Major == other.Major &&
+                this.Minor == other.Minor &&
+                this.Patch == other.Patch &&
+                string.Equals(this.Prerelease, other.Prerelease, StringComparison.Ordinal) &&
+                string.Equals(this.Build, other.Build, StringComparison.Ordinal);
+        }
+
+        /// <summary>
+        /// Returns a hash code for this instance.
+        /// </summary>
+        /// <returns>
+        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+        /// </returns>
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                int result = this.Major.GetHashCode();
+                result = result * 31 + this.Minor.GetHashCode();
+                result = result * 31 + this.Patch.GetHashCode();
+                result = result * 31 + this.Prerelease.GetHashCode();
+                result = result * 31 + this.Build.GetHashCode();
+                return result;
+            }
+        }
+
+#if !NETSTANDARD
+        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
+        public void GetObjectData(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            info.AddValue("SemVersion", ToString());
+        }
+#endif
+
+        /// <summary>
+        /// Implicit conversion from string to SemVersion.
+        /// </summary>
+        /// <param name="version">The semantic version.</param>
+        /// <returns>The SemVersion object.</returns>
+        public static implicit operator SemVersion(string version)
+        {
+            return SemVersion.Parse(version);
+        }
+
+        /// <summary>
+        /// The override of the equals operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is equal to right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator ==(SemVersion left, SemVersion right)
+        {
+            return SemVersion.Equals(left, right);
+        }
+
+        /// <summary>
+        /// The override of the un-equal operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is not equal to right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator !=(SemVersion left, SemVersion right)
+        {
+            return !SemVersion.Equals(left, right);
+        }
+
+        /// <summary>
+        /// The override of the greater operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is greater than right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator >(SemVersion left, SemVersion right)
+        {
+            return SemVersion.Compare(left, right) > 0;
+        }
+
+        /// <summary>
+        /// The override of the greater than or equal operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is greater than or equal to right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator >=(SemVersion left, SemVersion right)
+        {
+            return left == right || left > right;
+        }
+
+        /// <summary>
+        /// The override of the less operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is less than right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator <(SemVersion left, SemVersion right)
+        {
+            return SemVersion.Compare(left, right) < 0;
+        }
+
+        /// <summary>
+        /// The override of the less than or equal operator. 
+        /// </summary>
+        /// <param name="left">The left value.</param>
+        /// <param name="right">The right value.</param>
+        /// <returns>If left is less than or equal to right <c>true</c>, else <c>false</c>.</returns>
+        public static bool operator <=(SemVersion left, SemVersion right)
+        {
+            return left == right || left < right;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1734b505400b59eb1125723b03ae0c6e7ab4c30b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersion.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 5075cb5aa3254b099b11b2840d7cd46e
+timeCreated: 1503684176
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4dd8aef6ad880f3568cf51ae818f95942fc17d0d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs
@@ -0,0 +1,15 @@
+namespace Semver
+{
+    internal static class SemVersionExtension
+    {
+        public static string VersionOnly(this SemVersion version)
+        {
+            return "" + version.Major + "." + version.Minor + "." + version.Patch;
+        }
+        
+        public static string ShortVersion(this SemVersion version)
+        {
+            return version.Major + "." + version.Minor;
+        }                
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0022e01f4d1bd5a78db601a11c667d5646fb46e8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/External/SemVersionExtension.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9f17a0688211d476f8d8c9742bb9f992
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services.meta
new file mode 100644
index 0000000000000000000000000000000000000000..27cc5fd27ed3cfb29c2ae60f4983e464832787fd
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: afd7697844f4142f9aa91471c1fba506
+folderAsset: yes
+timeCreated: 1502224642
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d59dbe646d6b4169f377abc14e710059ae9eadc0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 1067213df0c64b319bc81e73be809b1a
+timeCreated: 1505249387
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs
new file mode 100644
index 0000000000000000000000000000000000000000..12691d3334c5bacc63ab1226ea774c127d130bc4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs
@@ -0,0 +1,17 @@
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.PackageManager.UI
+{
+    class ApplicationUtil
+    {
+        public static bool IsPreReleaseVersion
+        {
+            get
+            {
+                var lastToken = Application.unityVersion.Split('.').LastOrDefault();
+                return lastToken.Contains("a") || lastToken.Contains("b");
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0f1a76701a167c925cf50f29be98ccd3e5a1d483
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ApplicationUtil.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7ed48dcc992234c659018e00590315b7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs
new file mode 100644
index 0000000000000000000000000000000000000000..512c71862c5cf64d6fbfcdb44def9d8b1355088d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs
@@ -0,0 +1,30 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal class OperationSignal<T> where T: IBaseOperation
+    {
+        public event Action<T> OnOperation = delegate { };
+
+        public T Operation { get; set; }
+
+        public void SetOperation(T operation)
+        {
+            Operation = operation;
+            OnOperation(operation);
+        }
+
+        public void WhenOperation(Action<T> callback)
+        {
+            if (Operation != null)
+                callback(Operation);
+            OnOperation += callback;
+        }
+
+        internal void ResetEvents()
+        {
+            OnOperation = delegate { };
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a58af903b91d2c6852326d076a36af59c9d9622d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/OperationSignal.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7da0c11c52b4044de81c175887699282
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f9cf6e49e59ef6d764103cef112832e6d9fb1b1e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs
@@ -0,0 +1,19 @@
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class Resources
+    {
+        private static string TemplateRoot { get { return PackageManagerWindow.ResourcesPath + "Templates"; } }
+
+        private static string TemplatePath(string filename)
+        {
+            return string.Format("{0}/{1}", TemplateRoot, filename);
+        }
+
+        public static VisualElement GetTemplate(string templateFilename)
+        {
+            return AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(TemplatePath(templateFilename)).CloneTree(null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0f999a70d4a71bf880389fb79bd7d2797ca9a831
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/Resources.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d6a708dbb74414a6dbd60e07d9513c1c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs
new file mode 100644
index 0000000000000000000000000000000000000000..650375395dd2cd45d16eb128457debc689002e9d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs
@@ -0,0 +1,35 @@
+using System.Threading;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class ThreadedDelay
+    {
+        public int Length { get; set; }            // In milliseconds
+        public bool IsDone { get; private set; }
+
+        public ThreadedDelay(int length = 0)
+        {
+            Length = length;
+            IsDone = false;
+        }
+
+        public void Start()
+        {
+            if (Length <= 0)
+            {
+                IsDone = true;
+                return;
+            }
+
+            IsDone = false;
+            
+            Thread newThread = new Thread(() =>
+            {
+                Thread.Sleep(Length);
+                IsDone = true;
+            });
+            
+            newThread.Start();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..543d2281092e463a5ba5d56aff89d6a809a29cd6
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Common/ThreadedDelay.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 490fe93dbc954e3ba3651b7f55eaba70
+timeCreated: 1505249395
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces.meta
new file mode 100644
index 0000000000000000000000000000000000000000..96397a4c67b4547ca9578ac1dca0803425165ad5
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3385f7527e5be4c65b3a5294e8995ff8
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..40c39fdbe4c31f28082ccf0ad469711ee7a7eca4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal interface IAddOperation : IBaseOperation
+    {
+        event Action<PackageInfo> OnOperationSuccess;
+        
+        PackageInfo PackageInfo { get; }
+
+        void AddPackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction = null,  Action<Error> errorCallbackAction = null);
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d84d4b026a6cd4f229251efeedcbbf2889968a89
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IAddOperation.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 3dcbbc060dea46168ffc09a580836240
+timeCreated: 1504191596
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4c22b28e74ed3c8f08fe4e1f8937509af78dcb52
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal interface IBaseOperation
+    {
+        event Action<Error> OnOperationError;
+        event Action OnOperationFinalized;
+
+        bool IsCompleted { get; }
+                
+        void Cancel();
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4c59885eb16bafc78307938b5d06b3ab5acae5a0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IBaseOperation.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2f1849b9179b464381598f68663790d3
+timeCreated: 1507041169
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..00ba1fa19639482f70e39f7932f9295fdd9e409c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal interface IListOperation : IBaseOperation
+    {
+        bool OfflineMode { get; set; }
+        void GetPackageListAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction, Action<Error> errorCallbackAction = null);
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9bc2553bead6de163bd3c1aa13db4e0ad6fd5b7f
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IListOperation.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: b7e8a8fb69eacee439474914ea54bf9b
+timeCreated: 1502913188
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1d10304e9b41ca4ce2a3c176025b507dc359c498
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs
@@ -0,0 +1,14 @@
+namespace UnityEditor.PackageManager.UI
+{
+    /// <summary>
+    /// This is the Interface we will use to create the facade we need for testing.
+    /// In the case of the Fake factory, we can create fake operations with doctored data we use for our tests.
+    /// </summary>
+    internal interface IOperationFactory
+    {
+        IListOperation CreateListOperation(bool offlineMode = false);
+        ISearchOperation CreateSearchOperation();
+        IAddOperation CreateAddOperation();
+        IRemoveOperation CreateRemoveOperation();
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d718f50bdeedcde3ef6d03054064a07b87630345
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IOperationFactory.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 0a1161a2ab6569948a0aa7899197218c
+timeCreated: 1502915478
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..211c992f7cbc3d522e080c0508725e2c92f59ea2
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal interface IRemoveOperation : IBaseOperation
+    {
+        event Action<PackageInfo> OnOperationSuccess;
+
+        void RemovePackageAsync(PackageInfo package, Action<PackageInfo> doneCallbackAction = null,  Action<Error> errorCallbackAction = null);
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..05060134bff1e7efb670ff7916884970ba8d7216
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/IRemoveOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 54e5fc61925bc4ca3b2c1e82dfb35eb5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b3b6a90aeac204f72d412498ccc7896c99045104
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal interface ISearchOperation : IBaseOperation
+    {
+        void GetAllPackageAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction = null, Action<Error> errorCallbackAction = null);
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0b2741ae7769e2166b1ab6cc018cdeaec5cc3d27
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Interfaces/ISearchOperation.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 85dba6b2d7204a7f9a1f976eb0a6b4d2
+timeCreated: 1508160206
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9e07fc39beaa47498285b198f00999ee44c0138d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs
@@ -0,0 +1,24 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class OperationFactory
+    {
+        private static IOperationFactory _instance;
+
+        public static IOperationFactory Instance 
+        {
+            get {
+                if (_instance == null)
+                    _instance = new UpmOperationFactory ();
+                return _instance;
+            }
+            internal set {
+                _instance = value;
+            }
+        }
+
+        internal static void Reset()
+        {
+            _instance = null;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d7e9943aada7df8a532fbcd3b4d742bc261d823
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/OperationFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9ec5dc72125424af38a9bfaca532acc8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c0acdbcb6098ffc6a47a0465bb181f3035b2d9ed
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e53bc96d2d054b8cbc811f0d73e761eb
+timeCreated: 1504191702
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5c366dd42d0551a2cc05d6010a58e62cd674853a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs
@@ -0,0 +1,222 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.PackageManager.UI
+{    
+    // History of a single package
+    internal class Package : IEquatable<Package>
+    {
+        static public bool ShouldProposeLatestVersions
+        {
+            get
+            {
+                // Until we figure out a way to test this properly, alway show standard behavior
+                //    return InternalEditorUtility.IsUnityBeta() && !Unsupported.IsDeveloperMode();
+                return false;
+            }
+        }
+
+        // There can only be one package add/remove operation.
+        private static IBaseOperation addRemoveOperationInstance;
+
+        public static bool AddRemoveOperationInProgress
+        {
+            get { return addRemoveOperationInstance != null && !addRemoveOperationInstance.IsCompleted; }
+        }
+
+        internal const string packageManagerUIName = "com.unity.package-manager-ui";
+        private readonly string packageName;
+        private IEnumerable<PackageInfo> source;
+
+        internal Package(string packageName, IEnumerable<PackageInfo> infos)
+        {
+            if (string.IsNullOrEmpty(packageName))
+                throw new ArgumentException("Cannot be empty or null", "packageName");
+
+            if (!infos.Any())
+                throw new ArgumentException("Cannot be empty", "infos");
+            
+            this.packageName = packageName;
+            UpdateSource(infos);
+        }
+
+        internal void UpdateSource(IEnumerable<PackageInfo> source)
+        {
+            this.source = source;
+#if UNITY_2018_3_OR_NEWER
+            if (IsPackageManagerUI)
+                this.source = this.source.Where(p => p != null && p.Version.Major >= 2);
+#endif
+        }
+
+        public PackageInfo Current { get { return Versions.FirstOrDefault(package => package.IsCurrent); } }
+
+        // This is the latest verified or official release (eg: 1.3.2). Not necessarily the latest verified release (eg: 1.2.4) or that latest candidate (eg: 1.4.0-beta)
+        public PackageInfo LatestUpdate
+        {
+            get
+            {
+                // We want to show the absolute latest when in beta mode
+                if (ShouldProposeLatestVersions)
+                    return Latest;
+
+                // Override with current when it's version locked
+                var current = Current;
+                if (current != null && current.IsVersionLocked)
+                    return current;
+
+                // Get all the candidates versions (verified, release, preview) that are newer than current
+                var verified = Verified;
+                var latestRelease = LatestRelease;
+                var latestPreview = Versions.LastOrDefault(package => package.IsPreview);
+                var candidates = new List<PackageInfo>
+                {
+                    verified,
+                    latestRelease,
+                    latestPreview,
+                }.Where(package => package != null && (current == null || current == package || current.Version < package.Version)).ToList();
+
+                if (candidates.Contains(verified))
+                    return verified;
+                if ((current == null || !current.IsVerified ) && candidates.Contains(latestRelease))
+                    return latestRelease;
+                if ((current == null || current.IsPreview) && candidates.Contains(latestPreview))
+                    return latestPreview;
+
+                // Show current if it exists, otherwise latest user visible, and then otherwise show the absolute latest
+                return current ?? Latest;
+            }
+        }
+
+        public PackageInfo LatestPatch
+        {
+            get
+            {
+                if (Current == null)
+                    return null;
+                
+                // Get all version that have the same Major/Minor
+                var versions = Versions.Where(package => package.Version.Major == Current.Version.Major && package.Version.Minor == Current.Version.Minor);
+
+                return versions.LastOrDefault();
+            }
+        }
+
+        // This is the very latest version, including pre-releases (eg: 1.4.0-beta).
+        internal PackageInfo Latest { get { return Versions.FirstOrDefault(package => package.IsLatest) ?? Versions.LastOrDefault(); } }
+
+        // Returns the current version if it exist, otherwise returns the latest user visible version.
+        internal PackageInfo VersionToDisplay { get { return Current ?? LatestUpdate; } }
+
+        // Every version available for this package
+        internal IEnumerable<PackageInfo> Versions { get { return source.OrderBy(package => package.Version); } }
+
+        // Every version that's not a pre-release (eg: not beta/alpha/preview).
+        internal IEnumerable<PackageInfo> ReleaseVersions
+        {
+            get { return Versions.Where(package => !package.IsPreRelease); }
+        }
+        
+        internal PackageInfo LatestRelease { get {return ReleaseVersions.LastOrDefault();}}
+        internal PackageInfo Verified { get {return Versions.FirstOrDefault(package => package.IsVerified);}}
+
+        internal bool IsAfterCurrentVersion(PackageInfo packageInfo) { return Current == null || (packageInfo != null  && packageInfo.Version > Current.Version); }
+
+        internal bool IsBuiltIn {get { return Versions.Any() && Versions.First().IsBuiltIn; }}
+
+        public string Name { get { return packageName; } }
+
+        public bool IsPackageManagerUI
+        {
+            get { return Name == packageManagerUIName; }
+        }
+        
+        public bool Equals(Package other)
+        {
+            if (other == null) 
+                return false;
+            
+            return packageName == other.packageName;
+        }
+
+        public override int GetHashCode()
+        {
+            return packageName.GetHashCode();
+        }
+        
+        [SerializeField]
+        internal readonly OperationSignal<IAddOperation> AddSignal = new OperationSignal<IAddOperation>();
+
+        private Action OnAddOperationFinalizedEvent;
+        
+        internal void Add(PackageInfo packageInfo)
+        {
+            if (packageInfo == Current || AddRemoveOperationInProgress)
+                return;
+
+            var operation = OperationFactory.Instance.CreateAddOperation();
+            addRemoveOperationInstance = operation;
+            OnAddOperationFinalizedEvent = () =>
+            {
+                AddSignal.Operation = null;
+                operation.OnOperationFinalized -= OnAddOperationFinalizedEvent;
+                PackageCollection.Instance.FetchListOfflineCache(true);
+            };
+
+            operation.OnOperationFinalized += OnAddOperationFinalizedEvent;
+
+            AddSignal.SetOperation(operation);
+            operation.AddPackageAsync(packageInfo);
+        }
+
+        internal void Update()
+        {
+            Add(Latest);
+        }
+
+        internal static void AddFromLocalDisk(string path)
+        {
+            if (AddRemoveOperationInProgress)
+                return;
+
+            var packageJson = PackageJsonHelper.Load(path);
+            if (null == packageJson)
+            {
+                Debug.LogError(string.Format("Invalid package path: cannot find \"{0}\".", path));
+                return;
+            }
+
+            var operation = OperationFactory.Instance.CreateAddOperation();
+            addRemoveOperationInstance = operation;
+            operation.AddPackageAsync(packageJson.PackageInfo);
+        }
+
+        [SerializeField]
+        internal readonly OperationSignal<IRemoveOperation> RemoveSignal = new OperationSignal<IRemoveOperation>();
+
+        private Action OnRemoveOperationFinalizedEvent;
+
+        public void Remove()
+        {
+            if (Current == null || AddRemoveOperationInProgress)
+                return;
+
+            var operation = OperationFactory.Instance.CreateRemoveOperation();
+            addRemoveOperationInstance = operation;
+            OnRemoveOperationFinalizedEvent = () =>
+            {
+                RemoveSignal.Operation = null;
+                operation.OnOperationFinalized -= OnRemoveOperationFinalizedEvent;
+                PackageCollection.Instance.FetchListOfflineCache(true);
+            };
+
+            operation.OnOperationFinalized += OnRemoveOperationFinalizedEvent;
+            RemoveSignal.SetOperation(operation);
+
+            operation.RemovePackageAsync(Current);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e777649ecd3aa0b4b78f61b47a98f992835f24c1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/Package.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f499e12eaeb145bf9022f581c0b7fa5b
+timeCreated: 1505740170
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6820ec6e097a7c5cd36f1951b80d2e9fdf5f4aa4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs
@@ -0,0 +1,21 @@
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class PackageAssetPostprocessor : AssetPostprocessor
+    {
+        static bool IsPackageJsonAsset(string path)
+        {
+            var pathComponents = (path ?? "").Split('/');
+            return pathComponents.Length == 3 && pathComponents[0] == "Packages" && pathComponents[2] == "package.json";
+        }
+
+        static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
+        {
+            if (PackageCollection.Instance != null && (importedAssets.Any(IsPackageJsonAsset) || deletedAssets.Any(IsPackageJsonAsset) || movedAssets.Any(IsPackageJsonAsset)))
+            {
+                PackageCollection.Instance.FetchListOfflineCache(true);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9f0fe82e9ca12a506510d059ca06308ce5ac57f5
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageAssetPostprocessor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 63e8a6023745e4347bb661e87a9be1d9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6401088442ae28f019bb15a9de655b18819a5e31
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs
@@ -0,0 +1,284 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal class PackageCollection
+    {
+        private static PackageCollection instance = new PackageCollection();
+        public static PackageCollection Instance { get { return instance; } }
+
+        public event Action<IEnumerable<Package>> OnPackagesChanged = delegate { };
+        public event Action<PackageFilter> OnFilterChanged = delegate { };
+
+        private readonly Dictionary<string, Package> packages;
+
+        private PackageFilter filter;
+
+        private string selectedListPackage;
+        private string selectedSearchPackage;
+
+        internal string lastUpdateTime;
+        private List<PackageInfo> listPackagesOffline;
+        private List<PackageInfo> listPackages;
+        private List<PackageInfo> searchPackages;
+
+        private List<PackageError> packageErrors;
+
+        private int listPackagesVersion;
+        private int listPackagesOfflineVersion;
+
+        private bool searchOperationOngoing;
+        private bool listOperationOngoing;
+        private bool listOperationOfflineOngoing;
+
+        private IListOperation listOperationOffline;
+        private IListOperation listOperation;
+        private ISearchOperation searchOperation;
+
+        public readonly OperationSignal<ISearchOperation> SearchSignal = new OperationSignal<ISearchOperation>();
+        public readonly OperationSignal<IListOperation> ListSignal = new OperationSignal<IListOperation>();
+
+        public static void InitInstance(ref PackageCollection value)
+        {
+            if (value == null)  // UI window opened
+            {
+                value = instance;
+
+                Instance.OnPackagesChanged = delegate { };
+                Instance.OnFilterChanged = delegate { };
+                Instance.SearchSignal.ResetEvents();
+                Instance.ListSignal.ResetEvents();
+
+                Instance.FetchListOfflineCache(true);
+                Instance.FetchListCache(true);
+                Instance.FetchSearchCache(true);
+            }
+            else // Domain reload
+            {
+                instance = value;
+
+                Instance.RebuildPackageDictionary();
+
+                // Resume operations interrupted by domain reload
+                Instance.FetchListOfflineCache(Instance.listOperationOfflineOngoing);
+                Instance.FetchListCache(Instance.listOperationOngoing);
+                Instance.FetchSearchCache(Instance.searchOperationOngoing);
+            }
+        }
+
+        public PackageFilter Filter
+        {
+            get { return filter; }
+            
+            // For public usage, use SetFilter() instead
+            private set
+            {
+                var changed = value != filter;
+                filter = value;
+                
+                if (changed)
+                    OnFilterChanged(filter);
+            }
+        }
+
+        public List<PackageInfo> LatestListPackages
+        {
+            get { return listPackagesVersion > listPackagesOfflineVersion? listPackages : listPackagesOffline; }
+        }
+
+        public List<PackageInfo> LatestSearchPackages { get { return searchPackages; } }
+
+        public string SelectedPackage
+        {
+            get { return PackageFilter.All == Filter ? selectedSearchPackage : selectedListPackage; }
+            set
+            {
+                if (PackageFilter.All == Filter)
+                    selectedSearchPackage = value;
+                else
+                    selectedListPackage = value;
+            }
+        }
+        
+        private PackageCollection()
+        {
+            packages = new Dictionary<string, Package>();
+
+            listPackagesOffline = new List<PackageInfo>();
+            listPackages = new List<PackageInfo>();
+            searchPackages = new List<PackageInfo>();
+
+            packageErrors = new List<PackageError>();
+
+            listPackagesVersion = 0;
+            listPackagesOfflineVersion = 0;
+
+            searchOperationOngoing = false;
+            listOperationOngoing = false;
+            listOperationOfflineOngoing = false;
+
+            Filter = PackageFilter.All;
+        }
+
+        public bool SetFilter(PackageFilter value, bool refresh = true)
+        {
+            if (value == Filter) 
+                return false;
+            
+            Filter = value;
+            if (refresh)
+            {
+                UpdatePackageCollection();
+            }
+            return true;
+        }
+
+        public void UpdatePackageCollection(bool rebuildDictionary = false)
+        {
+            if (rebuildDictionary)
+            {
+                lastUpdateTime = DateTime.Now.ToString("HH:mm");
+                RebuildPackageDictionary();
+            }
+            if (packages.Any())
+                OnPackagesChanged(OrderedPackages());
+        }
+
+        internal void FetchListOfflineCache(bool forceRefetch = false)
+        {
+            if (!forceRefetch && (listOperationOfflineOngoing || listPackagesOffline.Any())) return;
+            if (listOperationOffline != null)
+                listOperationOffline.Cancel();
+            listOperationOfflineOngoing = true;
+            listOperationOffline = OperationFactory.Instance.CreateListOperation(true);
+            listOperationOffline.OnOperationFinalized += () =>
+            {
+                listOperationOfflineOngoing = false;
+                UpdatePackageCollection(true);
+            };
+            listOperationOffline.GetPackageListAsync(
+                infos =>
+                {
+                    var version = listPackagesVersion;
+                    UpdateListPackageInfosOffline(infos, version);
+                },
+                error => { Debug.LogError("Error fetching package list (offline mode)."); });
+        }
+
+        internal void FetchListCache(bool forceRefetch = false)
+        {
+            if (!forceRefetch && (listOperationOngoing || listPackages.Any())) return;
+            if (listOperation != null)
+                listOperation.Cancel();
+            listOperationOngoing = true;
+            listOperation = OperationFactory.Instance.CreateListOperation();
+            listOperation.OnOperationFinalized += () =>
+            {
+                listOperationOngoing = false;
+                UpdatePackageCollection(true);
+            };
+            listOperation.GetPackageListAsync(UpdateListPackageInfos,
+                error => { Debug.LogError("Error fetching package list."); });
+            ListSignal.SetOperation(listOperation);
+        }
+
+        internal void FetchSearchCache(bool forceRefetch = false)
+        {
+            if (!forceRefetch && (searchOperationOngoing || searchPackages.Any())) return;
+            if (searchOperation != null)
+                searchOperation.Cancel();
+            searchOperationOngoing = true;
+            searchOperation = OperationFactory.Instance.CreateSearchOperation();
+            searchOperation.OnOperationFinalized += () =>
+            {
+                searchOperationOngoing = false;
+                UpdatePackageCollection(true);
+            };
+            searchOperation.GetAllPackageAsync(UpdateSearchPackageInfos,
+                error => { Debug.LogError("Error searching packages online."); });
+            SearchSignal.SetOperation(searchOperation);
+        }
+
+        private void UpdateListPackageInfosOffline(IEnumerable<PackageInfo> newInfos, int version)
+        {
+            listPackagesOfflineVersion = version;
+            listPackagesOffline = newInfos.Where(p => p.IsUserVisible).ToList();
+        }
+
+        private void UpdateListPackageInfos(IEnumerable<PackageInfo> newInfos)
+        {
+            // Each time we fetch list packages, the cache for offline mode will be updated
+            // We keep track of the list packages version so that we know which version of cache
+            // we are getting with the offline fetch operation.
+            listPackagesVersion++;
+            listPackages = newInfos.Where(p => p.IsUserVisible).ToList();
+            listPackagesOffline = listPackages;
+        }
+
+        private void UpdateSearchPackageInfos(IEnumerable<PackageInfo> newInfos)
+        {
+            searchPackages = newInfos.Where(p => p.IsUserVisible).ToList();
+        }
+
+        private IEnumerable<Package> OrderedPackages()
+        {
+            return packages.Values.OrderBy(pkg => pkg.Versions.LastOrDefault() == null ? pkg.Name : pkg.Versions.Last().DisplayName).AsEnumerable();
+        }
+
+        public Package GetPackageByName(string name)
+        {
+            Package package;
+            packages.TryGetValue(name, out package);
+            return package;
+        }
+
+        public Error GetPackageError(Package package)
+        {
+            if (null == package) return null;
+            var firstMatchingError = packageErrors.FirstOrDefault(p => p.PackageName == package.Name);
+            return firstMatchingError != null ? firstMatchingError.Error : null;
+        }
+
+        public void AddPackageError(Package package, Error error)
+        {
+            if (null == package || null == error) return;
+            packageErrors.Add(new PackageError(package.Name, error));
+        }
+
+        public void RemovePackageErrors(Package package)
+        {
+            if (null == package) return;
+            packageErrors.RemoveAll(p => p.PackageName == package.Name);
+        }
+
+        private void RebuildPackageDictionary()
+        {
+            // Merge list & search packages
+            var allPackageInfos = new List<PackageInfo>(LatestListPackages);
+            var installedPackageIds = new HashSet<string>(allPackageInfos.Select(p => p.PackageId));
+            allPackageInfos.AddRange(searchPackages.Where(p => !installedPackageIds.Contains(p.PackageId)));
+
+            if (!PackageManagerPrefs.ShowPreviewPackages)
+            {
+                allPackageInfos = allPackageInfos.Where(p => !p.IsPreRelease || installedPackageIds.Contains(p.PackageId)).ToList();
+            }
+
+            // Rebuild packages dictionary
+            packages.Clear();
+            foreach (var p in allPackageInfos)
+            {
+                var packageName = p.Name;
+                if (packages.ContainsKey(packageName))
+                    continue;
+
+                var packageQuery = from pkg in allPackageInfos where pkg.Name == packageName select pkg;
+                var package = new Package(packageName, packageQuery);
+                packages[packageName] = package;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..642cef2478d60c4ecf8a1260483238ef58ef7d7c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageCollection.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61d72cb49da3040d5ade3edfd6eccfc1
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dff3c13acfa440bece3f4a543178d9172152ab2f
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal class PackageError
+    {
+        public string PackageName;
+        public Error Error;
+
+        public PackageError(string packageName, Error error)
+        {
+            PackageName = packageName;
+            Error = error;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..18d4165e8b0b7d990c543b8db3485571f11e8343
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageError.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b7c10e584b708734ba6141e7d4797931
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2c0e524e9a07a18c48032c0626f64f71541c9d58
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal enum PackageFilter
+    {
+        None,
+        All,
+        Local,
+        Modules
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..26ce6a0bcb1af5f8f94ae326ea75d0bf28543b11
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageFilter.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 03ffb9844f8d40e8a2f59dd2aff561eb
+timeCreated: 1508251051
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs
new file mode 100644
index 0000000000000000000000000000000000000000..66703320a30a21291d8b1a4088f02a74603545c2
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs
@@ -0,0 +1,8 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal enum PackageGroupOrigins
+    {
+        Packages,
+        BuiltInPackages
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dbdf42593fa7f610ebf5c153b9c74ac20f2e1be0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageGroupOrigins.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0e372f1bbea04aa9bd68055d4105bd84
+timeCreated: 1508855779
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6db9fc29f14152dc260c650adf2dfdd8eac5fa69
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs
@@ -0,0 +1,227 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Semver;
+using System.IO;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal class PackageInfo : IEquatable<PackageInfo>
+    {
+        // Module package.json files contain a documentation url embedded in the description.
+        // We parse that to have the "View Documentation" button direct to it, instead of showing
+        // the link in the description text.
+        private const string builtinPackageDocsUrlKey = "Scripting API: ";
+
+        public string Name;
+        public string DisplayName;
+        private string _PackageId;
+        public SemVersion Version;
+        public string Description;
+        public string Category;
+        public PackageState State;
+        public bool IsCurrent;
+        public bool IsLatest;
+        public string Group;
+        public PackageSource Origin;
+        public List<Error> Errors;
+        public bool IsVerified;
+        public string Author;
+
+        public PackageManager.PackageInfo Info { get; set; }
+        
+        public string PackageId {
+            get
+            {
+                if (!string.IsNullOrEmpty(_PackageId )) 
+                    return _PackageId;
+                return string.Format("{0}@{1}", Name.ToLower(), Version);
+            }
+            set
+            {
+                _PackageId = value;
+            }
+        }
+
+        // This will always be <name>@<version>, even for an embedded package.
+        public string VersionId { get { return string.Format("{0}@{1}", Name.ToLower(), Version); } }
+        public string ShortVersionId { get { return string.Format("{0}@{1}", Name.ToLower(), Version.ShortVersion()); } }
+
+        public string BuiltInDescription { get {
+            if (IsBuiltIn)
+                return string.Format("This built in package controls the presence of the {0} module.", DisplayName);
+            else
+                return Description.Split(new[] {builtinPackageDocsUrlKey}, StringSplitOptions.None)[0];
+        } }
+
+        private static Version ParseShortVersion(string shortVersionId)
+        {
+            try
+            {
+                var versionToken = shortVersionId.Split('@')[1];
+                return new Version(versionToken);
+            }
+            catch (Exception)
+            {
+                // Keep default version 0.0 on exception
+                return new Version();
+            }
+        }
+
+        // Method content must be matched in package manager UI
+        public static string GetPackageUrlRedirect(string packageName, string shortVersionId)
+        {
+            var redirectUrl = "";
+            if (packageName == "com.unity.ads")
+                redirectUrl = "https://docs.unity3d.com/Manual/UnityAds.html";
+            else if (packageName == "com.unity.analytics")
+            {
+                if (ParseShortVersion(shortVersionId) < new Version(3, 2))
+                    redirectUrl = "https://docs.unity3d.com/Manual/UnityAnalytics.html";
+            }
+            else if (packageName == "com.unity.purchasing")
+                redirectUrl = "https://docs.unity3d.com/Manual/UnityIAP.html";
+            else if (packageName == "com.unity.standardevents")
+                redirectUrl = "https://docs.unity3d.com/Manual/UnityAnalyticsStandardEvents.html";
+            else if (packageName == "com.unity.xiaomi")
+                redirectUrl = "https://unity3d.com/cn/partners/xiaomi/guide";
+            else if (packageName == "com.unity.shadergraph")
+            {
+                if (ParseShortVersion(shortVersionId) < new Version(4, 1))
+                    redirectUrl = "https://github.com/Unity-Technologies/ShaderGraph/wiki";
+            }
+
+            return redirectUrl;
+        }
+
+        public bool RedirectsToManual(PackageInfo packageInfo)
+        {
+            return !string.IsNullOrEmpty(GetPackageUrlRedirect(packageInfo.Name, packageInfo.ShortVersionId));
+        }
+
+        public bool HasChangelog(PackageInfo packageInfo)
+        {
+            // Packages with no docs have no third party notice
+            return !RedirectsToManual(packageInfo);
+        }
+
+        public string GetDocumentationUrl()
+        {
+            if (IsBuiltIn)
+            {
+                if (!string.IsNullOrEmpty(Description))
+                {
+                    var split = Description.Split(new[] {builtinPackageDocsUrlKey}, StringSplitOptions.None);
+                    if (split.Length > 1)
+                        return split[1];
+                }
+            }
+            return string.Format("http://docs.unity3d.com/Packages/{0}/index.html", ShortVersionId);
+        }
+
+        public string GetOfflineDocumentationUrl()
+        {
+            var docsFolder = Path.Combine(Info.resolvedPath, "Documentation~");
+            if (!Directory.Exists(docsFolder))
+                docsFolder = Path.Combine(Info.resolvedPath, "Documentation");
+            if (Directory.Exists(docsFolder))
+            {
+                var mdFiles = Directory.GetFiles(docsFolder, "*.md", SearchOption.TopDirectoryOnly);
+                var docsMd = mdFiles.FirstOrDefault(d => Path.GetFileName(d).ToLower() == "index.md")
+                    ?? mdFiles.FirstOrDefault(d => Path.GetFileName(d).ToLower() == "tableofcontents.md") ?? mdFiles.FirstOrDefault();
+                if (!string.IsNullOrEmpty(docsMd))
+                    return new Uri(docsMd).AbsoluteUri;
+            }
+            return string.Empty;
+        }
+
+        public string GetChangelogUrl()
+        {
+            return string.Format("http://docs.unity3d.com/Packages/{0}/changelog/CHANGELOG.html", ShortVersionId);
+        }
+
+        public string GetOfflineChangelogUrl()
+        {
+            var changelogFile = Path.Combine(Info.resolvedPath, "CHANGELOG.md");
+            return File.Exists(changelogFile) ? new Uri(changelogFile).AbsoluteUri : string.Empty;
+        }
+
+        public string GetLicensesUrl()
+        {
+            var url = string.Format("http://docs.unity3d.com/Packages/{0}/license/index.html", ShortVersionId);
+            if (RedirectsToManual(this))
+                url = "https://unity3d.com/legal/licenses/Unity_Companion_License";
+
+            return url;
+        }
+
+        public string GetOfflineLicensesUrl()
+        {
+            var licenseFile = Path.Combine(Info.resolvedPath, "LICENSE.md");
+            return File.Exists(licenseFile) ? new Uri(licenseFile).AbsoluteUri : string.Empty;
+        }
+
+        public bool Equals(PackageInfo other)
+        {
+            if (other == null) 
+                return false;
+            if (other == this)
+                return true;
+            
+            return Name == other.Name && Version == other.Version;
+        }
+
+        public override int GetHashCode()
+        {
+            return PackageId.GetHashCode();
+        }
+
+        public bool HasVersionTag(string tag)
+        {
+            if (string.IsNullOrEmpty(Version.Prerelease))
+                return false;
+
+            return String.Equals(Version.Prerelease.Split('.').First(), tag, StringComparison.CurrentCultureIgnoreCase);
+        }
+
+        public bool HasVersionTag(PackageTag tag)
+        {
+            return HasVersionTag(tag.ToString());
+        }
+
+        // Is it a pre-release (alpha/beta/experimental/preview)?
+        //        Current logic is any tag is considered pre-release, except recommended
+        public bool IsPreRelease
+        {
+            get { return !string.IsNullOrEmpty(Version.Prerelease) || Version.Major == 0; }
+        }
+
+        public bool IsPreview
+        {
+            get { return HasVersionTag(PackageTag.preview) || Version.Major == 0; }
+        }
+
+        // A version is user visible if it has a supported tag (or no tag at all)
+        public bool IsUserVisible
+        {
+            get { return IsCurrent || string.IsNullOrEmpty(Version.Prerelease) || HasVersionTag(PackageTag.preview) || IsVerified; }
+        }
+
+        public bool IsInDevelopment { get { return Origin == PackageSource.Embedded; } }
+        public bool IsLocal { get { return Origin == PackageSource.Local; } }
+        public bool IsBuiltIn { get { return Origin == PackageSource.BuiltIn; } }
+        
+        public string VersionWithoutTag { get { return Version.VersionOnly(); } }
+        
+        public bool IsVersionLocked
+        {
+            get { return Origin == PackageSource.Embedded || Origin == PackageSource.Git || Origin == PackageSource.BuiltIn; }
+        }
+
+        public bool CanBeRemoved
+        {
+            get { return Origin == PackageSource.Registry || Origin == PackageSource.BuiltIn || Origin == PackageSource.Local; }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e416489e0e277efbbcf8e08acbfc926a10f8650e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfo.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: b9f324f08cd904ec986357c98dd9eaa6
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f7b798c1f425f6b946c0a82b36f78abbafadcf4b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs
@@ -0,0 +1,37 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class PackageInfoListExtensions
+    {
+        public static IEnumerable<PackageInfo> ByName(this IEnumerable<PackageInfo> list, string name)
+        {
+            return from package in list where package.Name == name select package;
+        }
+
+        public static void SetCurrent(this IEnumerable<PackageInfo> list, bool current = true)
+        {
+            foreach (var package in list)
+            {
+                package.IsCurrent = current;
+            }
+        }
+
+        public static void SetLatest(this IEnumerable<PackageInfo> list, bool latest = true)
+        {
+            foreach (var package in list)
+            {
+                package.IsLatest = latest;
+            }
+        }
+
+        public static void SetGroup(this IEnumerable<PackageInfo> list, string group)
+        {
+            foreach (var package in list)
+            {
+                package.Group = group;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3ccc63f9ee0448a0232b40c162aba210d3cb264e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageInfoListExtensions.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a7b89acd74e047778b42209a7a733d39
+timeCreated: 1505740214
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ec062ccc5f3cd98d575106616760a46ffbeda36a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs
@@ -0,0 +1,34 @@
+using System.IO;
+using UnityEngine;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class PackageJsonHelper
+    {
+        [SerializeField]
+        private string name = string.Empty;
+
+        private string path = string.Empty;
+
+        public static string GetPackagePath(string jsonPath)
+        {
+            return Path.GetDirectoryName(jsonPath).Replace("\\", "/");
+        }
+
+        public static PackageJsonHelper Load(string path)
+        {
+            // If the path is a directory, find the `package.json` file path
+            var jsonPath = Directory.Exists(path) ? Path.Combine(path, "package.json") : path;
+            if (!File.Exists(jsonPath))
+                return null;
+            var packageJson = JsonUtility.FromJson<PackageJsonHelper>(File.ReadAllText(jsonPath));
+            packageJson.path = GetPackagePath(jsonPath);
+            return string.IsNullOrEmpty(packageJson.name) ? null : packageJson;
+        }
+
+        public PackageInfo PackageInfo
+        {
+            get { return new PackageInfo {PackageId = string.Format("{0}@file:{1}", name, path)}; }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..42da9eb131513d5d77567262f5f1632ab668bb54
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageJsonHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9374526debed24449d75f8cc6d0103f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..caa200431dec4b02a0c054e704520b5fb9d15c93
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs
@@ -0,0 +1,13 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class PackageListExtensions
+    {
+        public static IEnumerable<Package> Current(this IEnumerable<Package> list)
+        {
+            return (from package in list where package.Current != null select package);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ae09c6ba8c91d42b9d39b02e1c3291772a513108
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageListExtensions.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7a74094b34f74992a5121c0586ccf6ea
+timeCreated: 1506458921
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs
new file mode 100644
index 0000000000000000000000000000000000000000..14d9ac04df848f08e47c7df5d01d259c55496033
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs
@@ -0,0 +1,9 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal enum PackageOrigin
+    {
+        Unknown,
+        Builtin,
+        Registry
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..36ef852c664a800d4439a69378ba89067e177c7c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageOrigin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a98bc92072da64d49a393088e55ce2a0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c3b5a139ee623ffbdf57647cf322f1e0e2ef16b3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs
@@ -0,0 +1,26 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+    [Serializable]
+    internal class PackageSearchFilter
+    {
+        private static PackageSearchFilter instance = new PackageSearchFilter();
+        public static PackageSearchFilter Instance { get { return instance; } }
+
+        public string SearchText { get; set; }
+        
+        public static void InitInstance(ref PackageSearchFilter value)
+        {
+            if (value == null)  // UI window opened
+                value = instance;
+            else // Domain reload
+                instance = value;
+        }
+
+        public void ResetSearch()
+        {
+            SearchText = string.Empty;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b20fdf2b74f711f3d9ea72200dd3e6e1906d8e98
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageSearchFilter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8d65a43500ec84d9186cb6d9ab681277
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f295773bbb2081fea5cfc4aebd28ecdf7092972b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs
@@ -0,0 +1,9 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal enum PackageState {
+        UpToDate,
+        Outdated,
+        InProgress,
+        Error
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c9e87ffd7cf7388ceb8bb8fffa393e158e1e40df
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageState.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0a822dba3d5c4c85b150866e5442a5ec
+timeCreated: 1505740158
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6b282f684c30b5cb11f01a0adad277004190d305
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs
@@ -0,0 +1,10 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal enum PackageTag
+    {
+        preview,
+        verified,
+        inDevelopment,
+        local
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5a52800428baee493b241946045c43bda39788b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Packages/PackageTag.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2a3f4f8c4e2df41108f55825c24ff694
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a579b8fb78ebbd9372e84132555630c6ff7199cc
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 669717f3193a457b9bad9665ebcae836
+timeCreated: 1504191654
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d40046fcdbee774ff0a1005490aca96c9a63e5e4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs
@@ -0,0 +1,34 @@
+using System;
+using UnityEditor.PackageManager.Requests;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class UpmAddOperation : UpmBaseOperation, IAddOperation
+    {
+        public PackageInfo PackageInfo { get; protected set; }
+
+        public event Action<PackageInfo> OnOperationSuccess = delegate { };
+
+        public void AddPackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction = null, Action<Error> errorCallbackAction = null)
+        {
+            PackageInfo = packageInfo;
+            OnOperationError += errorCallbackAction;
+            OnOperationSuccess += doneCallbackAction;
+
+            Start();
+        }
+
+        protected override Request CreateRequest()
+        {
+            return Client.Add(PackageInfo.PackageId);
+        }
+
+        protected override void ProcessData()
+        {
+            var request = CurrentRequest as AddRequest;
+            var package = FromUpmPackageInfo(request.Result).First();
+            OnOperationSuccess(package);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..115ed81f8732330ce898f14c531c73de135cda46
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmAddOperation.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 9f091dea68a1452cb6c04a6dfa73d5f5
+timeCreated: 1504190581
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ea441cd467f6729fd6478452fc2cb1f21bb3eaa6
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Globalization;
+using System.Collections.Generic;
+using System.Linq;
+using Semver;
+using UnityEngine;
+using UnityEditor.PackageManager.Requests;
+
+namespace UnityEditor.PackageManager.UI
+{    
+    internal abstract class UpmBaseOperation : IBaseOperation
+    {
+        public static string GroupName(PackageSource origin)
+        {
+            var group = PackageGroupOrigins.Packages.ToString();
+            if (origin == PackageSource.BuiltIn)
+                group = PackageGroupOrigins.BuiltInPackages.ToString();
+
+            return group;
+        }
+
+        protected static IEnumerable<PackageInfo> FromUpmPackageInfo(PackageManager.PackageInfo info, bool isCurrent=true)
+        {
+            var packages = new List<PackageInfo>();
+            var displayName = info.displayName;
+            if (string.IsNullOrEmpty(displayName))
+            {
+                displayName = info.name.Replace("com.unity.modules.", "");
+                displayName = displayName.Replace("com.unity.", "");
+                displayName = new CultureInfo("en-US").TextInfo.ToTitleCase(displayName);
+            }
+
+            string author = info.author.name;
+            if (string.IsNullOrEmpty(info.author.name) && info.name.StartsWith("com.unity."))
+                author = "Unity Technologies Inc.";
+
+            var lastCompatible = info.versions.latestCompatible;
+            var versions = new List<string>();
+            versions.AddRange(info.versions.compatible);
+            if (versions.FindIndex(version => version == info.version) == -1)
+            {
+                versions.Add(info.version);
+
+                versions.Sort((left, right) =>
+                {
+                    if (left == null || right == null) return 0;
+                    
+                    SemVersion leftVersion = left;
+                    SemVersion righVersion = right;
+                    return leftVersion.CompareByPrecedence(righVersion);
+                });
+
+                SemVersion packageVersion = info.version;
+                if (!string.IsNullOrEmpty(lastCompatible))
+                {
+                    SemVersion lastCompatibleVersion =
+                        string.IsNullOrEmpty(lastCompatible) ? (SemVersion) null : lastCompatible;
+                    if (packageVersion != null && string.IsNullOrEmpty(packageVersion.Prerelease) &&
+                        packageVersion.CompareByPrecedence(lastCompatibleVersion) > 0)
+                        lastCompatible = info.version;
+                }
+                else
+                {
+                    if (packageVersion != null && string.IsNullOrEmpty(packageVersion.Prerelease))
+                        lastCompatible = info.version;
+                }
+            }
+
+            foreach(var version in versions)
+            {
+                var isVersionCurrent = version == info.version && isCurrent;
+                var isBuiltIn = info.source == PackageSource.BuiltIn;
+                var isVerified = string.IsNullOrEmpty(SemVersion.Parse(version).Prerelease) && version == info.versions.recommended;
+                var state = (isBuiltIn || info.version == lastCompatible || !isCurrent ) ? PackageState.UpToDate : PackageState.Outdated;
+                
+                // Happens mostly when using a package that hasn't been in production yet.
+                if (info.versions.all.Length <= 0)
+                    state = PackageState.UpToDate;
+                
+                if (info.errors.Length > 0)
+                    state = PackageState.Error;
+
+                var packageInfo = new PackageInfo
+                {
+                    Name = info.name,
+                    DisplayName = displayName,
+                    PackageId = version == info.version ? info.packageId : null,
+                    Version = version,
+                    Description = info.description,
+                    Category = info.category,
+                    IsCurrent = isVersionCurrent,
+                    IsLatest = version == lastCompatible,
+                    IsVerified = isVerified,
+                    Errors = info.errors.ToList(),
+                    Group = GroupName(info.source),
+                    State = state,
+                    Origin = isBuiltIn || isVersionCurrent ? info.source : PackageSource.Registry,
+                    Author = author,
+                    Info = info
+                };
+                
+                packages.Add(packageInfo);
+            }
+
+            return packages;
+        }
+        
+        public static event Action<UpmBaseOperation> OnOperationStart = delegate { };
+
+        public event Action<Error> OnOperationError = delegate { };
+        public event Action OnOperationFinalized = delegate { };
+        
+        public Error ForceError { get; set; }                // Allow external component to force an error on the requests (eg: testing)
+        public Error Error { get; protected set; }        // Keep last error
+        
+        public bool IsCompleted { get; private set; }
+
+        protected abstract Request CreateRequest();
+        
+        [SerializeField]
+        protected Request CurrentRequest;
+        public readonly ThreadedDelay Delay = new ThreadedDelay();
+
+        protected abstract void ProcessData();
+
+        protected void Start()
+        {
+            Error = null;
+            OnOperationStart(this);
+
+            Delay.Start();
+
+            if (TryForcedError())
+                return;
+
+            EditorApplication.update += Progress;
+        }
+
+        // Common progress code for all classes
+        private void Progress()
+        {
+            if (!Delay.IsDone)
+                return;
+
+            // Create the request after the delay
+            if (CurrentRequest == null)
+            {
+                CurrentRequest = CreateRequest();
+            }
+            
+            // Since CurrentRequest's error property is private, we need to simulate
+            // an error instead of just setting it.
+            if (TryForcedError())
+                return;
+            
+            if (CurrentRequest.IsCompleted)
+            {
+                if (CurrentRequest.Status == StatusCode.Success)
+                    OnDone();
+                else if (CurrentRequest.Status >= StatusCode.Failure)
+                    OnError(CurrentRequest.Error);
+                else
+                    Debug.LogError("Unsupported progress state " + CurrentRequest.Status);
+            }
+        }
+
+        private void OnError(Error error)
+        {
+            try
+            {
+                Error = error;
+
+                var message = "Cannot perform upm operation.";
+                if (error != null)
+                    message = "Cannot perform upm operation: " + Error.message + " [" + Error.errorCode + "]";
+                
+                Debug.LogError(message);
+
+                OnOperationError(Error);
+            }
+            catch (Exception exception)
+            {
+                Debug.LogError("Package Manager Window had an error while reporting an error in an operation: " + exception);                
+            }
+
+            FinalizeOperation();
+        }
+
+        private void OnDone()
+        {
+            try
+            {
+                ProcessData();
+            }
+            catch (Exception error)
+            {
+                Debug.LogError("Package Manager Window had an error while completing an operation: " + error);
+            }
+
+            FinalizeOperation();
+        }
+
+        private void FinalizeOperation()
+        {
+            EditorApplication.update -= Progress;
+            OnOperationFinalized();
+            IsCompleted = true;
+        }
+
+        public void Cancel()
+        {
+            EditorApplication.update -= Progress;
+            OnOperationError = delegate { };
+            OnOperationFinalized = delegate { };
+            IsCompleted = true;
+        }
+
+        private bool TryForcedError()
+        {
+            if (ForceError != null)
+            {
+                OnError(ForceError);
+                return true;
+            }
+
+            return false;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..785c839a62d6921d73971dafec367bc3b8e91bd8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmBaseOperation.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 4e830e2dbc3315b4b97cd5311a54e4fe
+timeCreated: 1502918867
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cebc294e0cab1773484adddb2941cb6c07d0d36a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor.PackageManager.Requests;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class UpmListOperation : UpmBaseOperation, IListOperation
+    {
+        [SerializeField]
+        private Action<IEnumerable<PackageInfo>> _doneCallbackAction;
+
+        public UpmListOperation(bool offlineMode) : base() 
+        {
+            OfflineMode = offlineMode;
+        }
+
+        public bool OfflineMode { get; set; }
+
+        public void GetPackageListAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction, Action<Error> errorCallbackAction = null)
+        {
+            this._doneCallbackAction = doneCallbackAction;
+            OnOperationError += errorCallbackAction;
+            
+            Start();
+        }
+
+        protected override Request CreateRequest()
+        {
+            return Client.List(OfflineMode);            
+        }
+
+        protected override void ProcessData()
+        {
+            var request = CurrentRequest as ListRequest;
+            var packages = new List<PackageInfo>();
+            foreach (var upmPackage in request.Result)
+            {
+                var packageInfos = FromUpmPackageInfo(upmPackage);
+                packages.AddRange(packageInfos);
+            }
+
+            _doneCallbackAction(packages);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3c49034d9c3479623d2e09141ced30f9ed28c898
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmListOperation.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 9a2c874c382e2419184b302497279dd9
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9397e5909add4785993efed9e48d252d93393430
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs
@@ -0,0 +1,25 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal class UpmOperationFactory : IOperationFactory
+    {
+        public IListOperation CreateListOperation(bool offlineMode = false)
+        {
+            return new UpmListOperation(offlineMode);
+        }
+
+        public ISearchOperation CreateSearchOperation()
+        {
+            return new UpmSearchOperation();
+        }
+
+        public IAddOperation CreateAddOperation()
+        {
+            return new UpmAddOperation();
+        }
+
+        public IRemoveOperation CreateRemoveOperation()
+        {
+            return new UpmRemoveOperation();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7911c3bb443b05813a98ceb4c38de9a872355ac9
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmOperationFactory.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: e6925bb38494e6a43ba0921e65e424fe
+timeCreated: 1502915478
+licenseType: Free
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..254c51bbb8e509acdd5157fd032a867c94fbc154
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs
@@ -0,0 +1,33 @@
+using System;
+using UnityEngine;
+using UnityEditor.PackageManager.Requests;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class UpmRemoveOperation : UpmBaseOperation, IRemoveOperation
+    {
+        [SerializeField]
+        private PackageInfo _package;
+
+        public event Action<PackageInfo> OnOperationSuccess = delegate { };
+
+        public void RemovePackageAsync(PackageInfo package, Action<PackageInfo> doneCallbackAction = null,  Action<Error> errorCallbackAction = null)
+        {
+            _package = package;
+            OnOperationError += errorCallbackAction;
+            OnOperationSuccess += doneCallbackAction;
+
+            Start();
+        }
+
+        protected override Request CreateRequest()
+        {
+            return Client.Remove(_package.Name);
+        }
+
+        protected override void ProcessData()
+        {
+            OnOperationSuccess(_package);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..58430b057db466c0f4cef12fc3a48c36e9c0c22f
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmRemoveOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d5a61f8cc87394b28aec6b88b4083217
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7e6615f715b6a935ee9eced4da66fc9637e50176
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor.PackageManager.Requests;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class UpmSearchOperation : UpmBaseOperation, ISearchOperation
+    {
+        [SerializeField]
+        private Action<IEnumerable<PackageInfo>> _doneCallbackAction;
+
+        public void GetAllPackageAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction = null, Action<Error> errorCallbackAction = null)
+        {
+            _doneCallbackAction = doneCallbackAction;
+            OnOperationError += errorCallbackAction;
+            
+            Start();
+        }
+
+        protected override Request CreateRequest()
+        {
+            return Client.SearchAll();            
+        }
+
+        protected override void ProcessData()
+        {
+            var request = CurrentRequest as SearchRequest;
+            var packages = new List<PackageInfo>();
+            foreach (var upmPackage in request.Result)
+            {
+                var packageInfos = FromUpmPackageInfo(upmPackage, false);
+                packages.AddRange(packageInfos);
+            }
+            _doneCallbackAction(packages);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4fcf5176ffb147a46c19b9b12a3f1a05dec3c19c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/Services/Upm/UpmSearchOperation.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ef5a2781610c4f12a79939f717f789cf
+timeCreated: 1508160183
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI.meta
new file mode 100644
index 0000000000000000000000000000000000000000..81a8a07529708efeb0de1f13bfe0ce8ca96dc11d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 301fbaa0e62e44fd2a7383bd338a2898
+folderAsset: yes
+timeCreated: 1502224642
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common.meta
new file mode 100644
index 0000000000000000000000000000000000000000..43dc78270277072bea21982b03cd9139fffd5521
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 42064bc130be4c44b288d249a44b356f
+timeCreated: 1504191962
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs
new file mode 100644
index 0000000000000000000000000000000000000000..12604728b2be3709b6935d57270a6b0e1b2bfaec
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs
@@ -0,0 +1,74 @@
+using System;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class AlertFactory : UxmlFactory<Alert>
+    {
+        protected override Alert DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new Alert();
+        }
+    }
+#endif
+
+    internal class Alert : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<Alert> { }
+#endif
+
+        private const string TemplatePath = PackageManagerWindow.ResourcesPath + "Templates/Alert.uxml";
+        private readonly VisualElement root;
+        private const float originalPositionRight = 5.0f;
+        private const float positionRightWithScroll = 12.0f;
+
+        public Action OnCloseError;
+
+        public Alert()
+        {
+            UIUtils.SetElementDisplay(this, false);
+
+            root = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(TemplatePath).CloneTree(null);
+            Add(root);
+            root.StretchToParentSize();
+
+            CloseButton.clickable.clicked += () =>
+            {
+                if (null != OnCloseError)
+                    OnCloseError();
+                ClearError();
+            };
+        }
+
+        public void SetError(Error error)
+        {
+            var message = "An error occured.";
+            if (error != null)
+                message = error.message ?? string.Format("An error occurred ({0})", error.errorCode.ToString());
+
+            AlertMessage.text = message;
+            UIUtils.SetElementDisplay(this, true);
+        }
+
+        public void ClearError()
+        {
+            UIUtils.SetElementDisplay(this, false);
+            AdjustSize(false);
+            AlertMessage.text = "";
+            OnCloseError = null;
+        }
+
+        public void AdjustSize(bool verticalScrollerVisible)
+        {
+            if (verticalScrollerVisible)
+                style.positionRight = originalPositionRight + positionRightWithScroll;
+            else
+                style.positionRight = originalPositionRight;
+        }
+
+        private Label AlertMessage { get { return root.Q<Label>("alertMessage"); } }
+        private Button CloseButton { get { return root.Q<Button>("close"); } }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d53730695c5d73a4c34b6cc477fd1fb779cb1edd
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/Alert.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b274f3d1ea05d4bd8a13f4556f7797d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f0f2168a347d445e1e8e1fd44dd5c06a6e9597a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs
@@ -0,0 +1,87 @@
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class LoadingSpinnerFactory : UxmlFactory<LoadingSpinner>
+    {
+        protected override LoadingSpinner DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new LoadingSpinner();
+        }
+    }
+#endif
+
+    internal class LoadingSpinner : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<LoadingSpinner, UxmlTraits>
+        {
+        }
+        
+        // This works around an issue with UXML instantiation
+        // See https://fogbugz.unity3d.com/f/cases/1046459/
+        internal new class UxmlTraits : VisualElement.UxmlTraits
+        {
+            public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
+            {
+                base.Init(ve, bag, cc);
+                UIUtils.SetElementDisplay(ve, false);
+            }
+        }
+#endif
+
+        public bool InvertColor { get; set; }
+        public bool Started { get; private set; }
+
+        private int rotation;
+
+        public LoadingSpinner()
+        {
+            InvertColor = false;
+            Started = false;
+            UIUtils.SetElementDisplay(this, false);
+        }
+
+        private void UpdateProgress()
+        {
+            if (parent == null)
+                return;
+
+            parent.transform.rotation = Quaternion.Euler(0, 0, rotation);
+            rotation += 3;
+            if (rotation > 360)
+                rotation -= 360;
+        }
+
+        public void Start()
+        {
+            if (Started)
+                return;
+
+            // Weird hack to make sure loading spinner doesn't generate an error every frame.
+            // Cannot put in constructor as it give really strange result.
+            if (parent != null && parent.parent != null)
+                parent.parent.clippingOptions = ClippingOptions.ClipAndCacheContents;
+
+            rotation = 0;
+
+            EditorApplication.update += UpdateProgress;
+
+            Started = true;
+            UIUtils.SetElementDisplay(this, true);
+        }
+
+        public void Stop()
+        {
+            if (!Started)
+                return;
+
+            EditorApplication.update -= UpdateProgress;
+
+            Started = false;
+            UIUtils.SetElementDisplay(this, false);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d369d6bd642fe71c6cb5890034da91fb4c81f2c7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/LoadingSpinner.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 06f8e3404d534cab82fe852ff33dad77
+timeCreated: 1504191988
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bcb09627affaab220e1aed9b375b7c88b3ea0517
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs
@@ -0,0 +1,186 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if UNITY_2018_3_OR_NEWER
+    internal class PopupField<T> : Experimental.UIElements.PopupField<T>
+    {
+        private Func<T, string> m_Callback;
+
+        public override T value
+        {
+            get { return base.value; }
+            set
+            {
+                base.value = value;
+                if (m_Callback != null)
+                    m_TextElement.text = m_Callback(m_Value);
+                else
+                    m_TextElement.text = m_Value.ToString();
+            }
+        }
+
+        /// <summary>
+        /// Callback that will return the string to be set in the field's label.
+        /// </summary>
+        /// <param name="callback"></param>
+        public void SetLabelCallback(Func<T, string> callback)
+        {
+            m_Callback = callback;
+        }
+
+        public PopupField(List<T> choices, T defaultValue) :
+            base(choices, defaultValue)
+        {
+        }
+
+        public PopupField(List<T> choices, int defaultIndex) :
+            base(choices, defaultIndex)
+        {
+        }
+    }
+#else
+    internal class PopupField<T> : BaseTextElement, INotifyValueChanged<T>
+    {
+        private readonly List<T> m_PossibleValues;
+        private Func<T, string> m_Callback;
+        private EventCallback<ChangeEvent<T>> m_valueCallback;
+        private T m_Value;
+        public T value
+        {
+            get { return m_Value; }
+            set
+            {
+                if (EqualityComparer<T>.Default.Equals(m_Value, value))
+                    return;
+
+                if (!m_PossibleValues.Contains(value))
+                    throw new ArgumentException(string.Format("Value {0} is not present in the list of possible values", value));
+
+                m_Value = value;
+                m_Index = m_PossibleValues.IndexOf(m_Value);
+                if (m_Callback != null)
+                    text = m_Callback(m_Value);
+                else
+                    text = m_Value.ToString();
+ 
+#if UNITY_2018_3_OR_NEWER
+                MarkDirtyRepaint();
+#else
+                Dirty(ChangeType.Repaint);
+#endif
+            }
+        }
+
+        private int m_Index = -1;
+        public int index
+        {
+            get { return m_Index; }
+            set
+            {
+                if (value != m_Index)
+                {
+                    if (value >= m_PossibleValues.Count || value < 0)
+                        throw new ArgumentException(string.Format("Index {0} is beyond the scope of possible value", value));
+                    m_Index = value;
+                    this.value = m_PossibleValues[m_Index];
+                }
+            }
+        }
+
+        /// <summary>
+        /// Callback that will return the string to be set in the field's label.
+        /// </summary>
+        /// <param name="callback"></param>
+        public void SetLabelCallback(Func<T, string> callback)
+        {
+            m_Callback = callback;
+        }
+        
+        private PopupField(List<T> possibleValues)
+        {
+            if (possibleValues == null)
+                throw new ArgumentNullException("possibleValues can't be null");
+
+            m_PossibleValues = possibleValues;
+
+            AddToClassList("popupField");
+        }
+
+        public PopupField(List<T> possibleValues, T defaultValue) :
+            this(possibleValues)
+        {
+            if (defaultValue == null)
+                throw new ArgumentNullException("defaultValue can't be null");
+
+            if (!m_PossibleValues.Contains(defaultValue))
+                throw new ArgumentException(string.Format("Default value {0} is not present in the list of possible values", defaultValue));
+
+            // note: idx will be set when setting value
+            value = defaultValue;
+        }
+
+        public PopupField(List<T> possibleValues, int defaultIndex) :
+            this(possibleValues)
+        {
+            if (defaultIndex >= m_PossibleValues.Count || defaultIndex < 0)
+                throw new ArgumentException(string.Format("Default Index {0} is beyond the scope of possible value", value));
+
+            // note: value will be set when setting idx
+            index = defaultIndex;
+        }
+
+        public void SetValueAndNotify(T newValue)
+        {
+            if (!EqualityComparer<T>.Default.Equals(newValue, value))
+            {
+                using (ChangeEvent<T> evt = ChangeEvent<T>.GetPooled(value, newValue))
+                {
+                    value = newValue;
+                    if (m_valueCallback != null)
+                        m_valueCallback(evt);
+                }
+            }
+        }
+
+        public void OnValueChanged(EventCallback<ChangeEvent<T>> callback)
+        {
+            m_valueCallback = callback;
+            RegisterCallback(callback);
+        }
+
+        protected override void ExecuteDefaultAction(EventBase evt)
+        {
+            base.ExecuteDefaultAction(evt);
+
+            if (evt.GetEventTypeId() == MouseDownEvent.TypeId())
+                OnMouseDown();
+        }
+
+        private void OnMouseDown()
+        {
+            var menu = new GenericMenu();
+
+            foreach (T item in m_PossibleValues)
+            {
+                bool isSelected = EqualityComparer<T>.Default.Equals(item, value);
+                menu.AddItem(new GUIContent(item.ToString()), isSelected,
+                    () => ChangeValueFromMenu(item));
+            }
+
+            var menuPosition = new Vector2(0.0f, layout.height);
+            menuPosition = this.LocalToWorld(menuPosition);
+            var menuRect = new Rect(menuPosition, Vector2.zero);
+            menu.DropDown(menuRect);
+        }
+
+        private void ChangeValueFromMenu(T menuItem)
+        {
+            SetValueAndNotify(menuItem);
+        }
+    }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bdc3df8662f8a6b0c34dfe58b0616dc73e4356d0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/PopupField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9e69df8ff024a4dc1a9e5c22725e4863
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88b95d851623da137f135a252db23f44dbdcac82
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs
@@ -0,0 +1,55 @@
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class UIUtils
+    {
+        private const string DisplayNone = "display-none";
+
+        public static void SetElementDisplay(VisualElement element, bool value)
+        {
+            if (element == null)
+                return;
+            
+            if (value)
+                element.RemoveFromClassList(DisplayNone);
+            else
+                element.AddToClassList(DisplayNone);
+
+            element.visible = value;
+        }
+        
+        public static void SetElementDisplayNonEmpty(Label element)
+        {
+            if (element == null)
+                return;
+
+            var empty = string.IsNullOrEmpty(element.text);
+            if (empty)
+                element.AddToClassList(DisplayNone);
+            else
+                element.RemoveFromClassList(DisplayNone);
+
+            element.visible = !empty;
+        }
+
+        public static void SetElementDisplayNonEmpty(Button element)
+        {
+            if (element == null)
+                return;
+
+            var empty = string.IsNullOrEmpty(element.text);
+            if (empty)
+                element.AddToClassList(DisplayNone);
+            else
+                element.RemoveFromClassList(DisplayNone);
+
+            element.visible = !empty;
+        }
+
+        public static bool IsElementVisible(VisualElement element)
+        {
+            return element.visible && !element.ClassListContains(DisplayNone);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5e106c182aa3098de49e2c2a89434104d807ca27
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/UIUtils.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0edd86f97b0648f685604a5582cff608
+timeCreated: 1508956933
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eea04a2c392593408e85dc606e0b6afa8fb7ee2d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs
@@ -0,0 +1,66 @@
+namespace UnityEditor.PackageManager.UI
+{
+    internal class VersionItem
+    {
+        internal PackageInfo Version;
+
+        public string MenuName { get; set; }
+        
+        // Base label
+        public string Label
+        {
+            get
+            {
+                if (Version == null)
+                    return MenuName;
+                
+                var label = Version.VersionWithoutTag;
+
+                return label;
+            }
+        }
+        
+        public string DropdownLabel
+        {
+            get
+            {
+                if (Version == null)
+                    return MenuName;
+
+                var label = MenuName + Label;
+                
+                if (Version.IsLocal)
+                    label += " - local";
+                if (Version.IsCurrent)
+                    label += " - current";
+                if (Version.IsVerified)
+                    label += " - verified";
+                else if (!string.IsNullOrEmpty(Version.Version.Prerelease))
+                    label += string.Format(" - {0}", Version.Version.Prerelease);
+                else if (Version.IsPreview)
+                    label += " - preview";
+
+                return label;
+            }
+        }
+
+        public override string ToString()
+        {
+            return DropdownLabel;
+        }
+        
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(obj, null)) return false;
+            if (ReferenceEquals(this, obj)) return true;
+
+            var other = (VersionItem)obj;
+            return Version == other.Version;
+        }
+
+        public override int GetHashCode()
+        {
+            return Version.GetHashCode();
+        }        
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b0b1f2492a2e720bb1114fa7d6088220250ec070
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Common/VersionItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3877b2be7ee07495d8918dc8937e6de2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces.meta
new file mode 100644
index 0000000000000000000000000000000000000000..97228337c735a592f43dc38fe33e9c4bc9ff5698
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bfd715cd54ab84c22b128149c12b516c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e785700e2617cb49cba2825be55d90b65347dc1e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs
@@ -0,0 +1,34 @@
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+    /// <summary>
+    /// Interface for Package Manager UI Extension
+    /// </summary>
+    public interface IPackageManagerExtension
+    {
+        /// <summary>
+        /// Creates the extension UI visual element.
+        /// </summary>
+        /// <returns>A visual element that represents the UI or null if none</returns>
+        VisualElement CreateExtensionUI();
+        
+        /// <summary>
+        /// Called by the Package Manager UI when the package selection changed.
+        /// </summary>
+        /// <param name="packageInfo">The newly selected package information (can be null)</param>
+        void OnPackageSelectionChange(PackageManager.PackageInfo packageInfo);
+        
+        /// <summary>
+        /// Called by the Package Manager UI when a package is added or updated.
+        /// </summary>
+        /// <param name="packageInfo">The package information</param>
+        void OnPackageAddedOrUpdated(PackageManager.PackageInfo packageInfo);
+        
+        /// <summary>
+        /// Called by the Package Manager UI when a package is removed.
+        /// </summary>
+        /// <param name="packageInfo">The package information</param>
+        void OnPackageRemoved(PackageManager.PackageInfo packageInfo);
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ca2abe91cb28794ba49b68cbb606d514d0768f51
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/Interfaces/IPackageManagerExtension.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 66083b7f6dc2e433eae33f3244b2ce88
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5e8048c93afe26857e0c103815faf365955a677a
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs
@@ -0,0 +1,134 @@
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageAddFromUrlFieldFactory : UxmlFactory<PackageAddFromUrlField>
+    {
+        protected override PackageAddFromUrlField DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageAddFromUrlField();
+        }
+    }
+#endif
+    
+    internal class PackageAddFromUrlField : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageAddFromUrlField> { }
+#endif
+        private string urlText;
+
+        private readonly VisualElement root;
+
+        public PackageAddFromUrlField()
+        {
+            root = Resources.GetTemplate("PackageAddFromUrlField.uxml");
+            Add(root);
+
+            UrlTextField.value = urlText;
+
+            AddButton.SetEnabled(!string.IsNullOrEmpty(urlText));
+            AddButton.clickable.clicked += OnAddButtonClick;
+
+            RegisterCallback<AttachToPanelEvent>(OnEnterPanel);
+            RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
+        }
+
+        private void OnUrlTextFieldChange(ChangeEvent<string> evt)
+        {
+            urlText = evt.newValue;
+            AddButton.SetEnabled(!string.IsNullOrEmpty(urlText));
+        }
+
+        private void OnUrlTextFieldFocus(FocusEvent evt)
+        {
+            Show();
+        }
+
+        private void OnUrlTextFieldFocusOut(FocusOutEvent evt)
+        {
+            Hide();
+        }
+
+        private void OnContainerFocus(FocusEvent evt)
+        {
+            UrlTextField.Focus();
+        }
+
+        private void OnContainerFocusOut(FocusOutEvent evt)
+        {
+            Hide();
+        }
+
+        private void OnEnterPanel(AttachToPanelEvent evt)
+        {
+            AddFromUrlFieldContainer.RegisterCallback<FocusEvent>(OnContainerFocus);
+            AddFromUrlFieldContainer.RegisterCallback<FocusOutEvent>(OnContainerFocusOut);
+            UrlTextField.RegisterCallback<FocusEvent>(OnUrlTextFieldFocus);
+            UrlTextField.RegisterCallback<FocusOutEvent>(OnUrlTextFieldFocusOut);
+            UrlTextField.RegisterCallback<ChangeEvent<string>>(OnUrlTextFieldChange);
+            UrlTextField.RegisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+            Hide();
+        }
+
+        private void OnLeavePanel(DetachFromPanelEvent evt)
+        {
+            AddFromUrlFieldContainer.UnregisterCallback<FocusEvent>(OnContainerFocus);
+            AddFromUrlFieldContainer.UnregisterCallback<FocusOutEvent>(OnContainerFocusOut);
+            UrlTextField.UnregisterCallback<FocusEvent>(OnUrlTextFieldFocus);
+            UrlTextField.UnregisterCallback<FocusOutEvent>(OnUrlTextFieldFocusOut);
+            UrlTextField.UnregisterCallback<ChangeEvent<string>>(OnUrlTextFieldChange);
+            UrlTextField.UnregisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+        }
+
+        private void OnKeyDownShortcut(KeyDownEvent evt)
+        {
+            switch (evt.keyCode)
+            {
+                case KeyCode.Escape:
+                    Hide();
+                    break;
+                case KeyCode.Return:
+                case KeyCode.KeypadEnter:
+                    OnAddButtonClick();
+                    break;
+            }
+        }
+
+        private void OnAddButtonClick()
+        {
+            var path = urlText;
+            if (!string.IsNullOrEmpty(path) && !Package.AddRemoveOperationInProgress)
+            {
+                Package.AddFromLocalDisk(path);
+                Hide();
+            }
+        }
+
+        internal void Hide()
+        {
+            UIUtils.SetElementDisplay(this, false);
+        }
+
+        internal void Show(bool reset = false)
+        {
+            if (reset)
+                Reset();
+            UIUtils.SetElementDisplay(this, true);
+        }
+
+        private void Reset()
+        {
+            UrlTextField.value = string.Empty;
+            urlText = string.Empty;
+            AddButton.SetEnabled(false);
+            UrlTextField.Focus();
+        }
+
+        private VisualElement AddFromUrlFieldContainer { get { return root.Q<VisualElement>("addFromUrlFieldContainer");  }}
+        private TextField UrlTextField { get { return root.Q<TextField>("urlTextField"); } }
+        private Button AddButton{ get { return root.Q<Button>("addFromUrlButton");  }}
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c1b03b5d7e8946e242b27993debc7af5cc689967
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageAddFromUrlField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 40f980217d9196e4baa9ebd2ac1328af
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs
new file mode 100644
index 0000000000000000000000000000000000000000..21f481bee95eb8ae029e5d4731f9e9c3a9db6c79
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs
@@ -0,0 +1,662 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Semver;
+using UnityEngine;
+using UnityEngine.Networking;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageDetailsFactory : UxmlFactory<PackageDetails>
+    {
+        protected override PackageDetails DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageDetails();
+        }
+    }
+#endif
+
+    internal class PackageDetails : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageDetails> { }
+#endif
+
+        private readonly VisualElement root;
+        private Package package;
+        private const string emptyDescriptionClass = "empty";
+        private List<VersionItem> VersionItems;
+        internal PopupField<VersionItem> VersionPopup;
+        private PackageInfo DisplayPackage;
+
+        private PackageInfo SelectedPackage
+        {
+            get { return VersionPopup.value.Version != null ? VersionPopup.value.Version : null; }
+        }
+
+        internal enum PackageAction
+        {
+            Add,
+            Remove,
+            Update,
+            Downgrade,
+            Enable,
+            Disable,
+            UpToDate,
+            Current,
+            Local,
+            Git,
+            Embedded
+        }
+
+        private static readonly VersionItem EmptyVersion = new VersionItem {Version = null};
+        internal static readonly string[] PackageActionVerbs = { "Install", "Remove", "Update to", "Update to",  "Enable", "Disable", "Up to date", "Current", "Local", "Git", "Embedded" };
+        internal static readonly string[] PackageActionInProgressVerbs = { "Installing", "Removing", "Updating to", "Updating to", "Enabling", "Disabling", "Up to date", "Current", "Local", "Git", "Embedded" };
+
+        public PackageDetails()
+        {
+            UIUtils.SetElementDisplay(this, false);
+
+            root = Resources.GetTemplate("PackageDetails.uxml");
+            Add(root);
+
+            foreach (var extension in PackageManagerExtensions.Extensions)
+                CustomContainer.Add(extension.CreateExtensionUI());
+
+            root.StretchToParentSize();
+
+            SetUpdateVisibility(false);
+            RemoveButton.visible = false;
+            UpdateBuiltIn.visible = false;
+
+            UpdateButton.clickable.clicked += UpdateClick;
+            UpdateBuiltIn.clickable.clicked += UpdateClick;
+            RemoveButton.clickable.clicked += RemoveClick;
+            ViewDocButton.clickable.clicked += ViewDocClick;
+            ViewChangelogButton.clickable.clicked += ViewChangelogClick;
+            ViewLicenses.clickable.clicked += ViewLicensesClick;
+
+            VersionItems = new List<VersionItem> {EmptyVersion};
+            VersionPopup = new PopupField<VersionItem>(VersionItems, 0);
+            VersionPopup.SetLabelCallback(VersionSelectionSetLabel);
+            VersionPopup.AddToClassList("popup");
+            VersionPopup.OnValueChanged(VersionSelectionChanged);
+            
+            if (VersionItems.Count == 1)
+                VersionPopup.SetEnabled(false);
+                        
+            UpdateDropdownContainer.Add(VersionPopup);
+            VersionPopup.StretchToParentSize();
+            
+
+            // Fix button on dark skin but overlapping edge pixel perfectly
+            if (EditorGUIUtility.isProSkin)
+            {
+                VersionPopup.style.positionLeft = -1;
+                UpdateDropdownContainer.style.sliceLeft = 4;
+            }
+        }
+
+        private string VersionSelectionSetLabel(VersionItem item)
+        {
+            return item.Label;
+        }
+
+        private void VersionSelectionChanged(ChangeEvent<VersionItem> e)
+        {
+            RefreshAddButton();
+        }
+
+        private void SetUpdateVisibility(bool value)
+        {
+            if (UpdateContainer != null)
+                UIUtils.SetElementDisplay(UpdateContainer, value);
+        }
+
+        internal void SetDisplayPackage(PackageInfo packageInfo)
+        {
+            DisplayPackage = packageInfo;
+            
+            var detailVisible = true;
+            Error error = null;
+
+            if (package == null || DisplayPackage == null)
+            {
+                detailVisible = false;
+                UIUtils.SetElementDisplay(DocumentationContainer, false);
+                UIUtils.SetElementDisplay(CustomContainer, false);
+                UIUtils.SetElementDisplay(UpdateBuiltIn, false);
+
+                foreach (var extension in PackageManagerExtensions.Extensions)
+                    extension.OnPackageSelectionChange(null);
+            }
+            else
+            {
+                SetUpdateVisibility(true);
+                UIUtils.SetElementDisplay(ViewDocButton, true);
+                RemoveButton.visible = true;
+
+                if (string.IsNullOrEmpty(DisplayPackage.Description))
+                {
+                    DetailDesc.text = "There is no description for this package.";
+                    DetailDesc.AddToClassList(emptyDescriptionClass);
+                }
+                else
+                {
+                    DetailDesc.text = DisplayPackage.Description;
+                    DetailDesc.RemoveFromClassList(emptyDescriptionClass);
+                }
+
+                root.Q<Label>("detailTitle").text = DisplayPackage.DisplayName;
+                DetailVersion.text = "Version " + DisplayPackage.VersionWithoutTag;
+
+                if (DisplayPackage.IsInDevelopment || DisplayPackage.HasVersionTag(PackageTag.preview))
+                    UIUtils.SetElementDisplay(GetTag(PackageTag.verified), false);
+                else
+                {
+                    var unityVersionParts = Application.unityVersion.Split('.');
+                    var unityVersion = string.Format("{0}.{1}", unityVersionParts[0], unityVersionParts[1]);
+                    VerifyLabel.text = unityVersion + " verified";
+                    UIUtils.SetElementDisplay(GetTag(PackageTag.verified), DisplayPackage.IsVerified);
+                }
+
+                UIUtils.SetElementDisplay(GetTag(PackageTag.inDevelopment), DisplayPackage.IsInDevelopment);
+                UIUtils.SetElementDisplay(GetTag(PackageTag.local), DisplayPackage.IsLocal);
+                UIUtils.SetElementDisplay(GetTag(PackageTag.preview), DisplayPackage.IsPreview);
+
+                UIUtils.SetElementDisplay(DocumentationContainer, DisplayPackage.Origin != PackageSource.BuiltIn);
+                UIUtils.SetElementDisplay(ChangelogContainer, DisplayPackage.HasChangelog(DisplayPackage));
+
+                root.Q<Label>("detailName").text = DisplayPackage.Name;
+                root.Q<ScrollView>("detailView").scrollOffset = new Vector2(0, 0);
+
+                DetailModuleReference.text = "";
+                var isBuiltIn = DisplayPackage.IsBuiltIn;
+                if (isBuiltIn)
+                    DetailModuleReference.text = DisplayPackage.BuiltInDescription;
+
+                DetailAuthor.text = "";
+                if (!string.IsNullOrEmpty(DisplayPackage.Author))
+                    DetailAuthor.text = string.Format("Author: {0}", DisplayPackage.Author);
+
+                UIUtils.SetElementDisplay(DetailDesc, !isBuiltIn);
+                UIUtils.SetElementDisplay(DetailVersion, !isBuiltIn);
+                UIUtils.SetElementDisplayNonEmpty(DetailModuleReference);
+                UIUtils.SetElementDisplayNonEmpty(DetailAuthor);
+
+                if (DisplayPackage.Errors.Count > 0)
+                    error = DisplayPackage.Errors.First();
+
+                RefreshAddButton();
+                RefreshRemoveButton();
+                UIUtils.SetElementDisplay(CustomContainer, true);
+
+                package.AddSignal.OnOperation += OnAddOperation;
+                package.RemoveSignal.OnOperation += OnRemoveOperation;
+                foreach (var extension in PackageManagerExtensions.Extensions)
+                    extension.OnPackageSelectionChange(DisplayPackage.Info);
+            }
+
+            // Set visibility
+            root.Q<VisualElement>("detail").visible = detailVisible;
+
+            if (null == error)
+                error = PackageCollection.Instance.GetPackageError(package);
+
+            if (error != null)
+                SetError(error);
+            else
+                DetailError.ClearError();            
+        }
+
+        private void ResetVersionItems(PackageInfo displayPackage)
+        {
+            VersionItems.Clear();            
+            VersionPopup.SetEnabled(true);
+
+            if (displayPackage == null)
+                return;
+            
+            //
+            // Get key versions -- Latest, Verified, LatestPatch, Current.
+            var keyVersions = new List<PackageInfo>();
+            if (package.LatestRelease != null) keyVersions.Add(package.LatestRelease);
+            if (package.Current != null) keyVersions.Add(package.Current);
+            if (package.Verified != null && package.Verified != package.Current) keyVersions.Add(package.Verified);
+            if (package.LatestPatch != null && package.IsAfterCurrentVersion(package.LatestPatch)) keyVersions.Add(package.LatestPatch);
+            if (package.Current == null && package.LatestRelease == null && package.Latest != null) keyVersions.Add(package.Latest);
+            if (Package.ShouldProposeLatestVersions && package.Latest != package.LatestRelease && package.Latest != null) keyVersions.Add(package.Latest);
+            keyVersions.Add(package.LatestUpdate);        // Make sure LatestUpdate is always in the list.
+
+            foreach (var version in keyVersions.OrderBy(package => package.Version).Reverse())
+            {
+                var item = new VersionItem {Version = version};
+                VersionItems.Add(item);
+                
+                if (version == package.LatestUpdate)
+                    VersionPopup.value = item;
+            }
+
+            //
+            // Add all versions
+            foreach (var version in package.Versions.Reverse())
+            {
+                var item = new VersionItem {Version = version};
+                item.MenuName = "All Versions/";
+                VersionItems.Add(item);
+            }
+            
+            if (VersionItems.Count == 0)
+            {
+                VersionItems.Add(EmptyVersion);
+                VersionPopup.value = EmptyVersion;
+                VersionPopup.SetEnabled(false);
+            }
+        }
+        
+        public void SetPackage(Package package)
+        {
+            if (this.package != null)
+            {
+                if (this.package.AddSignal.Operation != null)
+                {
+                    this.package.AddSignal.Operation.OnOperationError -= OnAddOperationError;
+                    this.package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess;
+                }
+                this.package.AddSignal.ResetEvents();
+
+                if (this.package.RemoveSignal.Operation != null)
+                {
+                    this.package.RemoveSignal.Operation.OnOperationSuccess -= OnRemoveOperationSuccess;
+                    this.package.RemoveSignal.Operation.OnOperationError -= OnRemoveOperationError;
+                }
+                this.package.RemoveSignal.ResetEvents();
+            }
+
+            UIUtils.SetElementDisplay(this, true);
+
+            this.package = package;
+            var displayPackage = package != null ? package.VersionToDisplay : null;
+            ResetVersionItems(displayPackage);
+            SetDisplayPackage(displayPackage);
+        }
+
+        private void SetError(Error error)
+        {
+            DetailError.AdjustSize(DetailView.verticalScroller.visible);
+            DetailError.SetError(error);
+            DetailError.OnCloseError = () =>
+            {
+                PackageCollection.Instance.RemovePackageErrors(package);
+                PackageCollection.Instance.UpdatePackageCollection();
+            };
+        }
+
+        private void OnAddOperation(IAddOperation operation)
+        {
+            operation.OnOperationError += OnAddOperationError;
+            operation.OnOperationSuccess += OnAddOperationSuccess;
+        }
+
+        private void OnAddOperationError(Error error)
+        {
+            if (package != null && package.AddSignal.Operation != null)
+            {
+                package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess;
+                package.AddSignal.Operation.OnOperationError -= OnAddOperationError;
+                package.AddSignal.Operation = null;
+            }
+
+            PackageCollection.Instance.AddPackageError(package, error);
+
+            SetError(error);
+            if (package != null)
+                ResetVersionItems(package.VersionToDisplay);
+            PackageCollection.Instance.UpdatePackageCollection();
+        }
+
+        private void OnAddOperationSuccess(PackageInfo packageInfo)
+        {
+            if (package != null && package.AddSignal.Operation != null)
+            {
+                package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess;
+                package.AddSignal.Operation.OnOperationError -= OnAddOperationError;
+                package.AddSignal.Operation = null;
+            }
+
+            foreach (var extension in PackageManagerExtensions.Extensions)
+                extension.OnPackageAddedOrUpdated(packageInfo.Info);
+        }
+
+        private void OnRemoveOperation(IRemoveOperation operation)
+        {
+            // Make sure we are not already registered
+            operation.OnOperationError -= OnRemoveOperationError;
+            operation.OnOperationSuccess -= OnRemoveOperationSuccess;
+            
+            operation.OnOperationError += OnRemoveOperationError;
+            operation.OnOperationSuccess += OnRemoveOperationSuccess;
+        }
+
+        private void OnRemoveOperationError(Error error)
+        {
+            if (package != null && package.RemoveSignal.Operation != null)
+            {
+                package.RemoveSignal.Operation.OnOperationSuccess -= OnRemoveOperationSuccess;
+                package.RemoveSignal.Operation.OnOperationError -= OnRemoveOperationError;
+                package.RemoveSignal.Operation = null;
+            }
+
+            PackageCollection.Instance.AddPackageError(package, error);
+
+            SetError(error);
+            PackageCollection.Instance.UpdatePackageCollection();
+        }
+
+        private void OnRemoveOperationSuccess(PackageInfo packageInfo)
+        {
+            if (package != null && package.RemoveSignal.Operation != null)
+            {
+                package.RemoveSignal.Operation.OnOperationSuccess -= OnRemoveOperationSuccess;
+                package.RemoveSignal.Operation.OnOperationError -= OnRemoveOperationError;
+                package.RemoveSignal.Operation = null;
+            }
+
+            foreach (var extension in PackageManagerExtensions.Extensions)
+                extension.OnPackageRemoved(packageInfo.Info);
+        }
+
+        private void RefreshAddButton()
+        {
+            if (package.Current != null && package.Current.IsInDevelopment)
+            {
+                UIUtils.SetElementDisplay(UpdateBuiltIn, false);
+                UIUtils.SetElementDisplay(UpdateCombo, false);
+                UIUtils.SetElementDisplay(UpdateButton, false);
+                return;
+            }
+
+            var targetVersion = SelectedPackage;
+            if (targetVersion == null)
+                return;
+            
+            var enableButton = !Package.AddRemoveOperationInProgress;
+            var enableVersionButton = true;
+            
+            var action = PackageAction.Update;
+            var inprogress = false;
+            var isBuiltIn = package.IsBuiltIn;
+            SemVersion version = null;
+            
+            if (package.AddSignal.Operation != null)
+            {
+                if (isBuiltIn)
+                {
+                    action = PackageAction.Enable;
+                    inprogress = true;
+                    enableButton = false;                    
+                }
+                else
+                {
+                    var addOperationVersion = package.AddSignal.Operation.PackageInfo.Version;
+                    if (package.Current == null)
+                    {
+                        action = PackageAction.Add;
+                        inprogress = true;
+                    }
+                    else
+                    {
+                        action = addOperationVersion.CompareByPrecedence(package.Current.Version) >= 0
+                            ? PackageAction.Update : PackageAction.Downgrade;
+                        inprogress = true;
+                    }
+                
+                    enableButton = false;
+                    enableVersionButton = false;
+                }
+            } 
+            else 
+            {
+                if (package.Current != null)
+                {
+                    // Installed
+                    if (package.Current.IsVersionLocked)
+                    {
+                        if (package.Current.Origin == PackageSource.Embedded)
+                            action = PackageAction.Embedded;
+                        else if (package.Current.Origin == PackageSource.Git)
+                            action = PackageAction.Git;
+                        
+                        enableButton = false;
+                        enableVersionButton = false;
+                    }
+                    else
+                    {
+                        if (targetVersion.IsCurrent)
+                        {
+                            if (targetVersion == package.LatestUpdate)
+                                action = PackageAction.UpToDate;
+                            else
+                                action = PackageAction.Current;
+                            
+                            enableButton = false;
+                        }
+                        else
+                        {
+                            action = targetVersion.Version.CompareByPrecedence(package.Current.Version) >= 0
+                                ? PackageAction.Update : PackageAction.Downgrade;
+                        }
+                    }
+                }
+                else
+                {
+                    // Not Installed
+                    if (package.Versions.Any())
+                    {
+                        if (isBuiltIn)
+                            action = PackageAction.Enable;
+                        else
+                            action = PackageAction.Add;
+                    }
+                }
+            }
+
+            if (package.RemoveSignal.Operation != null)
+                enableButton = false;
+
+            if (EditorApplication.isCompiling)
+            {
+                enableButton = false;
+                enableVersionButton = false;
+
+                EditorApplication.update -= CheckCompilationStatus;
+                EditorApplication.update += CheckCompilationStatus;
+            }
+            
+            var button = isBuiltIn ? UpdateBuiltIn : UpdateButton;
+            button.SetEnabled(enableButton);
+            VersionPopup.SetEnabled(enableVersionButton);
+            button.text = GetButtonText(action, inprogress, version);
+
+            var visibleFlag = !(package.Current != null && package.Current.IsVersionLocked);
+            UIUtils.SetElementDisplay(UpdateBuiltIn, isBuiltIn && visibleFlag);
+            UIUtils.SetElementDisplay(UpdateCombo, !isBuiltIn && visibleFlag);
+            UIUtils.SetElementDisplay(UpdateButton, !isBuiltIn && visibleFlag);
+        }
+
+        private void RefreshRemoveButton()
+        {
+            var visibleFlag = false;
+
+            var current = package.Current;
+            
+            // Show only if there is a current package installed
+            if (current != null)
+            {
+                visibleFlag = current.CanBeRemoved && !package.IsPackageManagerUI;
+
+                var action = current.IsBuiltIn ? PackageAction.Disable : PackageAction.Remove;
+                var inprogress = package.RemoveSignal.Operation != null;
+
+                var enableButton = visibleFlag && !EditorApplication.isCompiling && !inprogress && !Package.AddRemoveOperationInProgress;
+
+                if (EditorApplication.isCompiling)
+                {
+                    EditorApplication.update -= CheckCompilationStatus;
+                    EditorApplication.update += CheckCompilationStatus;
+                }
+
+                RemoveButton.SetEnabled(enableButton);
+                RemoveButton.text = GetButtonText(action, inprogress);                   
+            }
+
+            UIUtils.SetElementDisplay(RemoveButton, visibleFlag);
+        }
+
+        private void CheckCompilationStatus()
+        {
+            if (EditorApplication.isCompiling)
+                return;
+
+            RefreshAddButton();
+            RefreshRemoveButton();
+            EditorApplication.update -= CheckCompilationStatus;
+        }
+
+        private static string GetButtonText(PackageAction action, bool inProgress = false, SemVersion version = null)
+        {
+            return version == null ?
+                string.Format("{0}", inProgress ? PackageActionInProgressVerbs[(int) action] : PackageActionVerbs[(int) action]) :
+                string.Format("{0} {1}", inProgress ? PackageActionInProgressVerbs[(int) action] : PackageActionVerbs[(int) action], version);
+        }
+
+        private void UpdateClick()
+        {
+            if (package.IsPackageManagerUI)
+            {
+                // Let's not allow updating of the UI if there are build errrors, as for now, that will prevent the UI from reloading properly.
+                if (EditorUtility.scriptCompilationFailed)
+                {
+                    EditorUtility.DisplayDialog("Unity Package Manager", "The Package Manager UI cannot be updated while there are script compilation errors in your project.  Please fix the errors and try again.", "Ok");
+                    return;
+                }
+
+                if (!EditorUtility.DisplayDialog("Unity Package Manager", "Updating this package will close the Package Manager window. You will have to re-open it after the update is done. Do you want to continue?", "Yes", "No"))
+                    return;
+
+                if (package.AddSignal.Operation != null)
+                {
+                    package.AddSignal.Operation.OnOperationSuccess -= OnAddOperationSuccess;
+                    package.AddSignal.Operation.OnOperationError -= OnAddOperationError;
+                    package.AddSignal.ResetEvents();
+                    package.AddSignal.Operation = null;
+                }
+
+                DetailError.ClearError();
+                EditorApplication.update += CloseAndUpdate;
+
+                return;
+            }
+
+            DetailError.ClearError();
+            package.Add(SelectedPackage);
+            RefreshAddButton();
+            RefreshRemoveButton();
+        }
+
+        private void CloseAndUpdate()
+        {
+            EditorApplication.update -= CloseAndUpdate;
+            package.Add(SelectedPackage);
+
+            var windows = UnityEngine.Resources.FindObjectsOfTypeAll<PackageManagerWindow>();
+            if (windows.Length > 0)
+            {
+                windows[0].Close();
+            }
+        }
+
+
+        private void RemoveClick()
+        {
+            DetailError.ClearError();
+            package.Remove();
+            RefreshRemoveButton();
+            RefreshAddButton();
+        }
+
+        private static void ViewOfflineUrl(Func<string> getOfflineUrl, string messageOnNotFound)
+        {
+            var offlineUrl = getOfflineUrl();
+            if (!string.IsNullOrEmpty(offlineUrl))
+                Application.OpenURL(offlineUrl);
+            else
+                EditorUtility.DisplayDialog("Unity Package Manager", messageOnNotFound, "Ok");
+        }
+
+        private static void ViewUrl(Func<string> getUrl, Func<string> getOfflineUrl, string messageOnNotFound)
+        {
+            if (Application.internetReachability != NetworkReachability.NotReachable)
+            {
+                var onlineUrl = getUrl();
+                var request = UnityWebRequest.Head(onlineUrl);
+                var operation = request.SendWebRequest();
+                operation.completed += (op) =>
+                {
+                    if (request.responseCode != 404)
+                    {
+                        Application.OpenURL(onlineUrl);
+                    }
+                    else
+                    {
+                        ViewOfflineUrl(getOfflineUrl, messageOnNotFound);
+                    }
+                };
+            }
+            else
+
+            {
+                ViewOfflineUrl(getOfflineUrl, messageOnNotFound);
+            }
+        }
+
+        private void ViewDocClick()
+        {
+            ViewUrl(DisplayPackage.GetDocumentationUrl, DisplayPackage.GetOfflineDocumentationUrl, "Unable to find documentation.");
+        } 
+
+        private void ViewChangelogClick()
+        {
+            ViewUrl(DisplayPackage.GetChangelogUrl, DisplayPackage.GetOfflineChangelogUrl, "Unable to find changelog.");
+        }
+
+        private void ViewLicensesClick()
+        {    
+            ViewUrl(DisplayPackage.GetLicensesUrl, DisplayPackage.GetOfflineLicensesUrl, "Unable to find licenses.");
+        }
+        
+        private Label DetailDesc { get { return root.Q<Label>("detailDesc"); } }
+        internal Button UpdateButton { get { return root.Q<Button>("update"); } }
+        private Button RemoveButton { get { return root.Q<Button>("remove"); } }
+        private Button ViewDocButton { get { return root.Q<Button>("viewDocumentation"); } }
+        private VisualElement DocumentationContainer { get { return root.Q<VisualElement>("documentationContainer"); } }
+        private Button ViewChangelogButton { get { return root.Q<Button>("viewChangelog"); } }
+        private VisualElement ChangelogContainer { get { return root.Q<VisualElement>("changeLogContainer"); } }
+        private VisualElement ViewLicensesContainer { get { return root.Q<VisualElement>("viewLicensesContainer"); } }
+        private Button ViewLicenses { get { return root.Q<Button>("viewLicenses"); } }        
+        private VisualElement UpdateContainer { get { return root.Q<VisualElement>("updateContainer"); } }
+        private Alert DetailError { get { return root.Q<Alert>("detailError"); } }
+        private ScrollView DetailView { get { return root.Q<ScrollView>("detailView"); } }
+        private Label DetailModuleReference { get { return root.Q<Label>("detailModuleReference"); } }
+        private Label DetailVersion { get { return root.Q<Label>("detailVersion");  }}
+        private Label DetailAuthor { get { return root.Q<Label>("detailAuthor");  }}
+        private Label VerifyLabel { get { return root.Q<Label>("tagVerify"); } }
+        private VisualElement CustomContainer { get { return root.Q<VisualElement>("detailCustomContainer"); } }
+        internal VisualElement GetTag(PackageTag tag) {return root.Q<VisualElement>("tag-" + tag); }
+        private VisualElement UpdateDropdownContainer { get { return root.Q<VisualElement>("updateDropdownContainer"); } }
+        internal VisualElement UpdateCombo { get { return root.Q<VisualElement>("updateCombo"); } }
+        internal Button UpdateBuiltIn { get { return root.Q<Button>("updateBuiltIn"); } }        
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dd97dbf751450aaf630cdbdcb415ccf6bde50106
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageDetails.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 3f3e22b18940a4e828a5170574a3617e
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs
new file mode 100644
index 0000000000000000000000000000000000000000..17fa1a9ca139de9c28a1f00af26b50a4e2d40016
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Text.RegularExpressions;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class PackageFiltering
+    {
+        private static bool FilterByText(PackageInfo info, string text)
+        {
+            if (info == null)
+                return false;
+            
+            if (info.Name.IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0)
+                return true;
+
+            if (!string.IsNullOrEmpty(info.DisplayName) && info.DisplayName.IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0)
+                return true;
+
+            if (!info.IsBuiltIn)
+            {
+                var prerelease = text.StartsWith("-") ? text.Substring(1) : text;
+                if (info.Version != null && info.Version.Prerelease.IndexOf(prerelease, StringComparison.CurrentCultureIgnoreCase) >= 0)
+                    return true;
+    
+                if (info.VersionWithoutTag.StartsWith(text, StringComparison.CurrentCultureIgnoreCase))
+                    return true;
+
+                if (info.IsPreview)
+                {
+                    if (PackageTag.preview.ToString().IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0)
+                        return true;
+                }
+
+                if (info.IsVerified)
+                {
+                    if (PackageTag.verified.ToString().IndexOf(text, StringComparison.CurrentCultureIgnoreCase) >= 0)
+                        return true;
+                }
+            }
+
+            return false;
+        }
+
+        internal static bool FilterByText(Package package, string text)
+        {
+            if (string.IsNullOrEmpty(text))
+                return true;
+            
+            var trimText = text.Trim(' ', '\t');
+            trimText = Regex.Replace(trimText, @"[ ]{2,}", " ");
+            return string.IsNullOrEmpty(trimText) || FilterByText(package.Current ?? package.Latest, trimText);
+        }
+
+        private static bool FilterByText(PackageItem item, string text)
+        {
+            return item.package != null && FilterByText(item.package, text);
+        }
+
+        public static void FilterPackageList(PackageList packageList)
+        {
+            PackageItem firstItem = null;
+            PackageItem lastItem = null;
+            var selectedItemInFilter = false;
+            var selectedItem = packageList.selectedItem;
+            var packageItems = packageList.Query<PackageItem>().ToList();
+            foreach (var item in packageItems)
+            {
+                if (FilterByText(item, PackageSearchFilter.Instance.SearchText))
+                {
+                    if (firstItem == null)
+                        firstItem = item;
+                    if (item == selectedItem)
+                        selectedItemInFilter = true;
+                    
+                    UIUtils.SetElementDisplay(item, true);
+                    
+                    if (lastItem != null)
+                        lastItem.nextItem = item;
+                
+                    item.previousItem = lastItem;
+                    item.nextItem = null;
+                    
+                    lastItem = item;
+                }
+                else
+                    UIUtils.SetElementDisplay(item, false);
+            }
+
+            if (firstItem == null)
+                packageList.ShowNoResults();
+            else
+                packageList.ShowResults(selectedItemInFilter ? selectedItem : firstItem);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c7183a9e723cac0a8aeeeb333909e3774ad1e779
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageFiltering.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ffd2adf615994485991e37bacbf735c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1749ce670445f0ae4281bfa258351d88b978b9df
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs
@@ -0,0 +1,75 @@
+using System.Linq;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageGroupFactory : UxmlFactory<PackageGroup>
+    {
+        protected override PackageGroup DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageGroup(bag.GetPropertyString("name"));
+        }
+    }
+#endif
+
+    internal class PackageGroup : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageGroup> { }
+#endif
+
+        private readonly VisualElement root;
+        internal readonly PackageGroupOrigins Origin;
+
+        public PackageGroup previousGroup;
+        public PackageGroup nextGroup;
+
+        public PackageItem firstPackage;
+        public PackageItem lastPackage;
+
+        public PackageGroup() : this(string.Empty)
+        {
+        }
+
+        public PackageGroup(string groupName)
+        {
+            name = groupName;
+            root = Resources.GetTemplate("PackageGroup.uxml");
+            Add(root);
+
+            if (string.IsNullOrEmpty(groupName) || groupName != PackageGroupOrigins.BuiltInPackages.ToString())
+            {
+                HeaderTitle.text = "Packages";
+                Origin = PackageGroupOrigins.Packages;
+            }
+            else
+            {
+                HeaderTitle.text = "Built In Packages";
+                Origin = PackageGroupOrigins.BuiltInPackages;
+            }
+        }
+
+        internal PackageItem AddPackage(Package package)
+        {
+            var packageItem = new PackageItem(package) {packageGroup = this};
+            var lastItem = List.Children().LastOrDefault() as PackageItem;
+            if (lastItem != null)
+            {
+                lastItem.nextItem = packageItem;
+                packageItem.previousItem = lastItem;
+                packageItem.nextItem = null;
+            }
+
+            List.Add(packageItem);
+
+            if (firstPackage == null) firstPackage = packageItem;
+            lastPackage = packageItem;
+
+            return packageItem;
+        }
+
+        private VisualElement List { get { return root.Q<VisualElement>("groupContainer"); } }
+        private Label HeaderTitle { get { return root.Q<Label>("headerTitle"); } }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c81e217d40b36c3a5380bd0ec8fa853a3bfb18ff
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageGroup.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 760934a36e5f490db3c9fcaf497625a4
+timeCreated: 1508509771
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1ec9dbf298906fcb11cb1d7a644635f7d1ab45ec
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs
@@ -0,0 +1,150 @@
+using UnityEngine.Experimental.UIElements;
+using System;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageItemFactory : UxmlFactory<PackageItem>
+    {
+        protected override PackageItem DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageItem();
+        }
+    }
+#endif
+
+    internal class PackageItem : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageItem> { }
+#endif
+
+        public static string SelectedClassName = "selected";
+
+        public event Action<PackageItem> OnSelected = delegate { };
+
+        private readonly VisualElement root;
+        private string currentStateClass;
+        public Package package { get; private set; }
+
+        public PackageItem previousItem;
+        public PackageItem nextItem;
+
+        public PackageGroup packageGroup;
+
+        public PackageItem() : this(null)
+        {
+        }
+
+        public PackageItem(Package package)
+        {
+            root = Resources.GetTemplate("PackageItem.uxml");
+            Add(root);
+
+            root.AddManipulator(new Clickable(Select));
+            SetItem(package);
+        }
+
+        private void Select()
+        {
+            OnSelected(this);
+        }
+
+        public void SetSelected(bool value)
+        {
+            if (value)
+                PackageContainer.AddToClassList(SelectedClassName);
+            else
+                PackageContainer.RemoveFromClassList(SelectedClassName);
+
+            Spinner.InvertColor = value;
+        }
+
+        private void SetItem(Package package)
+        {
+            var displayPackage = package != null ? package.VersionToDisplay : null;
+            if (displayPackage == null)
+                return;
+            
+            this.package = package;
+            OnPackageChanged();
+            this.package.AddSignal.WhenOperation(OnPackageAdd);
+            this.package.RemoveSignal.WhenOperation(OnPackageRemove);
+        }
+
+        private void OnPackageRemove(IRemoveOperation operation)
+        {
+            operation.OnOperationError += error => StopSpinner();
+            OnPackageUpdate();
+        }
+
+        private void OnPackageAdd(IAddOperation operation)
+        {
+            operation.OnOperationError += error => StopSpinner();
+            OnPackageUpdate();
+        }
+
+        private void OnPackageChanged()
+        {
+            var displayPackage = package != null ? package.VersionToDisplay : null;
+            if (displayPackage == null)
+                return;
+
+            NameLabel.text = displayPackage.DisplayName;
+            VersionLabel.text = displayPackage.Version.ToString();
+
+            var stateClass = GetIconStateId(displayPackage);
+            if (displayPackage.State == PackageState.Outdated && package.LatestUpdate == package.Current)
+                stateClass = GetIconStateId(PackageState.UpToDate);
+            if (PackageCollection.Instance.GetPackageError(package) != null)
+                stateClass = GetIconStateId(PackageState.Error);
+            if (stateClass ==  GetIconStateId(PackageState.UpToDate) && package.Current != null)
+                stateClass = "installed";
+
+            StateLabel.RemoveFromClassList(currentStateClass);
+            StateLabel.AddToClassList(stateClass);
+
+            UIUtils.SetElementDisplay(VersionLabel, !displayPackage.IsBuiltIn);
+
+            currentStateClass = stateClass;
+            if (displayPackage.State != PackageState.InProgress && Spinner.Started)
+                StopSpinner();
+        }
+
+        private void OnPackageUpdate()
+        {
+            StartSpinner();
+        }
+
+        private void StartSpinner()
+        {
+            Spinner.Start();
+            StateLabel.AddToClassList("no-icon");
+        }
+        
+        private void StopSpinner()
+        {
+            Spinner.Stop();
+            StateLabel.RemoveFromClassList("no-icon");
+        }
+
+        private Label NameLabel { get { return root.Q<Label>("packageName"); } }
+        private Label StateLabel { get { return root.Q<Label>("packageState"); } }
+        private Label VersionLabel { get { return root.Q<Label>("packageVersion"); } }
+        private VisualElement PackageContainer { get { return root.Q<VisualElement>("packageContainer"); } }
+        private LoadingSpinner Spinner { get { return root.Q<LoadingSpinner>("packageSpinner"); } }
+
+        public static string GetIconStateId(PackageInfo packageInfo)
+        {
+            if (packageInfo == null)
+                return "";
+
+            return GetIconStateId(packageInfo.State);
+        }
+
+        public static string GetIconStateId(PackageState state)
+        {
+            return state.ToString().ToLower();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5a40e58405f6b48184936301e02d016926b7119c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageItem.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: c68ba5b432ef64e67ae0bf74960908a8
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs
new file mode 100644
index 0000000000000000000000000000000000000000..096f42be23e55354b8d8456184db99b6445b158d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs
@@ -0,0 +1,408 @@
+using UnityEngine.Experimental.UIElements;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageListFactory : UxmlFactory<PackageList>
+    {
+        protected override PackageList DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageList();
+        }
+    }
+#endif
+
+    internal class PackageList : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageList> { }
+#endif
+
+        public event Action<Package> OnSelected = delegate { };
+        public event Action OnLoaded = delegate { };
+        public event Action OnFocusChange = delegate { };
+
+        private readonly VisualElement root;
+        internal PackageItem selectedItem;
+        private List<PackageGroup> Groups;
+
+        public PackageList()
+        {
+            Groups = new List<PackageGroup>();
+
+            root = Resources.GetTemplate("PackageList.uxml");
+            Add(root);
+            root.StretchToParentSize();
+
+            UIUtils.SetElementDisplay(Empty, false);
+            UIUtils.SetElementDisplay(NoResult, false);
+
+            PackageCollection.Instance.OnPackagesChanged += SetPackages;
+
+            RegisterCallback<AttachToPanelEvent>(OnEnterPanel);
+            RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
+
+            Reload();
+        }
+
+        public void GrabFocus()
+        {
+            if (selectedItem == null)
+                return;
+            
+            selectedItem.Focus();
+        }
+
+        public void ShowResults(PackageItem item)
+        {
+            NoResultText.text = string.Empty;
+            UIUtils.SetElementDisplay(NoResult, false);
+
+            Select(item);
+
+            EditorApplication.delayCall += ScrollIfNeeded;
+
+            UpdateGroups();
+        }
+
+        public void ShowNoResults()
+        {
+            NoResultText.text = string.Format("No results for \"{0}\"", PackageSearchFilter.Instance.SearchText);
+            UIUtils.SetElementDisplay(NoResult, true);
+            foreach (var group in Groups)
+            {
+                UIUtils.SetElementDisplay(group, false);
+            }
+            Select(null);
+            OnSelected(null);
+        }
+
+        private void UpdateGroups()
+        {
+            foreach (var group in Groups)
+            {
+                PackageItem firstPackage = null;
+                PackageItem lastPackage = null;
+
+                var listGroup = group.Query<PackageItem>().ToList();
+                foreach (var item in listGroup)
+                {
+                    if (!item.visible)
+                        continue;
+
+                    if (firstPackage == null) firstPackage = item;
+                    lastPackage = item;
+                }
+
+                if (firstPackage == null && lastPackage == null)
+                {
+                    UIUtils.SetElementDisplay(group, false);
+                }
+                else 
+                {
+                    UIUtils.SetElementDisplay(group, true);
+                    group.firstPackage = firstPackage;
+                    group.lastPackage = lastPackage;
+                }
+            }
+        }
+
+        private void OnEnterPanel(AttachToPanelEvent e)
+        {
+            panel.visualTree.RegisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+        }
+
+        private void OnLeavePanel(DetachFromPanelEvent e)
+        {
+            panel.visualTree.UnregisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+        }
+
+        private void ScrollIfNeeded()
+        {
+            EditorApplication.delayCall -= ScrollIfNeeded;
+            
+            if (selectedItem == null)
+                return;
+
+            var minY = List.worldBound.yMin;
+            var maxY = List.worldBound.yMax;
+            var itemMinY = selectedItem.worldBound.yMin;
+            var itemMaxY = selectedItem.worldBound.yMax;
+            var scroll = List.scrollOffset;
+
+            if (itemMinY < minY)
+            {
+                scroll.y -= minY - itemMinY;
+                if (scroll.y <= minY)
+                    scroll.y = 0;
+                List.scrollOffset = scroll;
+            }
+            else if (itemMaxY > maxY)
+            {
+                scroll.y += itemMaxY - maxY;
+                List.scrollOffset = scroll;
+            }
+        }
+
+        private void OnKeyDownShortcut(KeyDownEvent evt)
+        {
+            if (selectedItem == null)
+                return;
+
+            if (evt.keyCode == KeyCode.Tab)
+            {
+                OnFocusChange();
+                evt.StopPropagation();
+                return;
+            }
+            
+            if (evt.keyCode == KeyCode.UpArrow)
+            {
+                if (selectedItem.previousItem != null)
+                {
+                    Select(selectedItem.previousItem);
+                    ScrollIfNeeded();
+                }
+                else if (selectedItem.packageGroup.previousGroup != null && selectedItem.packageGroup.previousGroup.visible)
+                {
+                    Select(selectedItem.packageGroup.previousGroup.lastPackage);
+                    ScrollIfNeeded();
+                }
+                evt.StopPropagation();
+                return;
+            }
+
+            if (evt.keyCode == KeyCode.DownArrow)
+            {
+                if (selectedItem.nextItem != null)
+                {
+                    Select(selectedItem.nextItem);
+                    ScrollIfNeeded();
+                }
+                else if (selectedItem.packageGroup.nextGroup != null && selectedItem.packageGroup.nextGroup.visible)
+                {
+                    Select(selectedItem.packageGroup.nextGroup.firstPackage);
+                    ScrollIfNeeded();
+                }
+                evt.StopPropagation();
+                return;
+            }
+
+            if (evt.keyCode == KeyCode.PageUp)
+            {
+                if (selectedItem.packageGroup != null)
+                {
+                    if (selectedItem == selectedItem.packageGroup.lastPackage && selectedItem != selectedItem.packageGroup.firstPackage)
+                    {
+                        Select(selectedItem.packageGroup.firstPackage);
+                        ScrollIfNeeded();
+                    }
+                    else if (selectedItem == selectedItem.packageGroup.firstPackage && selectedItem.packageGroup.previousGroup != null && selectedItem.packageGroup.previousGroup.visible)
+                    {
+                        Select(selectedItem.packageGroup.previousGroup.lastPackage);
+                        ScrollIfNeeded();
+                    }
+                    else if (selectedItem != selectedItem.packageGroup.lastPackage && selectedItem != selectedItem.packageGroup.firstPackage)
+                    {
+                        Select(selectedItem.packageGroup.firstPackage);
+                        ScrollIfNeeded();
+                    }
+                }
+                evt.StopPropagation();
+                return;
+            }
+
+            if (evt.keyCode == KeyCode.PageDown)
+            {
+                if (selectedItem.packageGroup != null)
+                {
+                    if (selectedItem == selectedItem.packageGroup.firstPackage && selectedItem != selectedItem.packageGroup.lastPackage)
+                    {
+                        Select(selectedItem.packageGroup.lastPackage);
+                        ScrollIfNeeded();
+                    }
+                    else if (selectedItem == selectedItem.packageGroup.lastPackage && selectedItem.packageGroup.nextGroup != null && selectedItem.packageGroup.nextGroup.visible)
+                    {
+                        Select(selectedItem.packageGroup.nextGroup.firstPackage);
+                        ScrollIfNeeded();
+                    }
+                    else if (selectedItem != selectedItem.packageGroup.firstPackage && selectedItem != selectedItem.packageGroup.lastPackage)
+                    {
+                        Select(selectedItem.packageGroup.lastPackage);
+                        ScrollIfNeeded();
+                    }
+                }
+                evt.StopPropagation();
+            }
+        }
+
+        private void Reload()
+        {
+            // Force a re-init to initial condition
+            PackageCollection.Instance.UpdatePackageCollection();
+            SelectLastSelection();
+        }
+
+        private void ClearAll()
+        {
+            List.Clear();
+            Groups.Clear();
+
+            UIUtils.SetElementDisplay(Empty, false);
+            UIUtils.SetElementDisplay(NoResult, false);
+        }
+
+        private void SetPackages(IEnumerable<Package> packages)
+        {
+            if (PackageCollection.Instance.Filter == PackageFilter.Modules)
+            {
+                packages = packages.Where(pkg => pkg.IsBuiltIn);
+            }
+            else if (PackageCollection.Instance.Filter== PackageFilter.All)
+            {
+                packages = packages.Where(pkg => !pkg.IsBuiltIn);
+            }
+            else
+            {
+                packages = packages.Where(pkg => !pkg.IsBuiltIn);
+                packages = packages.Where(pkg => pkg.Current != null);
+            }
+
+            OnLoaded();
+            ClearAll();
+
+            var packagesGroup = new PackageGroup(PackageGroupOrigins.Packages.ToString());
+            Groups.Add(packagesGroup);
+            List.Add(packagesGroup);
+            packagesGroup.previousGroup = null;
+
+            var builtInGroup = new PackageGroup(PackageGroupOrigins.BuiltInPackages.ToString());
+            Groups.Add(builtInGroup);
+            List.Add(builtInGroup);
+
+            if ((PackageCollection.Instance.Filter & PackageFilter.Modules) == PackageFilter.Modules)
+            {
+                packagesGroup.nextGroup = builtInGroup;
+                builtInGroup.previousGroup = packagesGroup;
+                builtInGroup.nextGroup = null;
+            }
+            else
+            {
+                packagesGroup.nextGroup = null;
+                UIUtils.SetElementDisplay(builtInGroup, false);
+            }
+
+            var lastSelection = PackageCollection.Instance.SelectedPackage;
+            Select(null);
+
+            PackageItem defaultSelection = null;
+
+            foreach (var package in packages.OrderBy(pkg => pkg.Versions.FirstOrDefault() == null ? pkg.Name : pkg.Versions.FirstOrDefault().DisplayName))
+            {
+                var item = AddPackage(package);
+
+                if (null == selectedItem && defaultSelection == null)
+                    defaultSelection = item;
+
+                if (null == selectedItem && !string.IsNullOrEmpty(lastSelection) && package.Name.Equals(lastSelection))
+                    Select(item);
+            }
+
+            if (selectedItem == null)
+                Select(defaultSelection);
+
+            PackageFiltering.FilterPackageList(this);
+        }
+
+        public void SelectLastSelection()
+        {
+            var lastSelection = PackageCollection.Instance.SelectedPackage;
+            if (lastSelection == null)
+                return;
+            
+            var list = List.Query<PackageItem>().ToList();
+            PackageItem defaultSelection = null;
+
+            foreach (var item in list)
+            {
+                if (defaultSelection == null)
+                    defaultSelection = item;
+
+                if (!string.IsNullOrEmpty(lastSelection) && item.package.Name.Equals(lastSelection))
+                {
+                    defaultSelection = item;
+                    break;
+                }
+            }
+
+            selectedItem = null;
+            Select(defaultSelection);
+        }
+
+        private PackageItem AddPackage(Package package)
+        {
+            var groupName = package.Latest != null ? package.Latest.Group : package.Current.Group;
+            var group = GetOrCreateGroup(groupName);
+            var packageItem = group.AddPackage(package);
+
+            packageItem.OnSelected += Select;
+
+            return packageItem;
+        }
+
+        private PackageGroup GetOrCreateGroup(string groupName)
+        {
+            foreach (var g in Groups)
+            {
+                if (g.name == groupName)
+                    return g;
+            }
+
+            var group = new PackageGroup(groupName);
+            var latestGroup = Groups.LastOrDefault();
+            Groups.Add(group);
+            List.Add(group);
+
+            group.previousGroup = null;
+            if (latestGroup != null)
+            {
+                latestGroup.nextGroup = group;
+                group.previousGroup = latestGroup;
+                group.nextGroup = null;
+            }
+            return group;
+        }
+
+        private void Select(PackageItem packageItem)
+        {
+            if (packageItem == selectedItem)
+                return;
+
+            var selectedPackageName = packageItem != null ? packageItem.package.Name : null;
+            PackageCollection.Instance.SelectedPackage = selectedPackageName;
+
+            if (selectedItem != null)
+                selectedItem.SetSelected(false); // Clear Previous selection
+
+            selectedItem = packageItem;
+            if (selectedItem == null)
+            {
+                OnSelected(null);
+                return;
+            }
+
+            selectedItem.SetSelected(true);
+            ScrollIfNeeded();
+            OnSelected(selectedItem.package);
+        }
+
+        private ScrollView List { get { return root.Q<ScrollView>("scrollView"); } }
+        private VisualElement Empty { get { return root.Q<VisualElement>("emptyArea"); } }
+        private VisualElement NoResult { get { return root.Q<VisualElement>("noResult"); } }
+        private Label NoResultText { get { return root.Q<Label>("noResultText"); } }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..49c064ab56ce42a790afca56a148202be727c404
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageList.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 2d77b2d58287d46a6a61f12c861bfc2f
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs
new file mode 100644
index 0000000000000000000000000000000000000000..44bcfcfd27701f151fbd703e9dc72c0fe6b401fc
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs
@@ -0,0 +1,25 @@
+using System.Collections.Generic;
+
+namespace UnityEditor.PackageManager.UI
+{
+    /// <summary>
+    /// Package Manager UI Extensions
+    /// </summary>
+    public static class PackageManagerExtensions
+    {
+        internal static List<IPackageManagerExtension> Extensions { get { return extensions ?? (extensions = new List<IPackageManagerExtension>()); } }
+        private static List<IPackageManagerExtension> extensions;
+
+        /// <summary>
+        /// Registers a new Package Manager UI extension
+        /// </summary>
+        /// <param name="extension">A Package Manager UI extension</param>
+        public static void RegisterExtension(IPackageManagerExtension extension)
+        {
+            if (extension == null)
+                return;
+            
+            Extensions.Add(extension);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5fbcfc095ba87ed979622508be7328a1bee6d31d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerExtensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 20a8ca0a6d82545f6bfd6f2d898d61f7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ccd67c0bc997cec70530be5bd0c4a13609dd6a25
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs
@@ -0,0 +1,41 @@
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal static class PackageManagerPrefs
+    {
+        private const string kShowPreviewPackagesPrefKeyPrefix = "PackageManager.ShowPreviewPackages_";
+        private const string kShowPreviewPackagesWarningPrefKey = "PackageManager.ShowPreviewPackagesWarning";
+
+        private static string GetProjectIdentifier()
+        {
+            // PlayerSettings.productGUID is already used as LocalProjectID by Analytics, so we use it too
+            return PlayerSettings.productGUID.ToString();
+        }
+
+        public static bool ShowPreviewPackages
+        {
+            get
+            {
+                var key = kShowPreviewPackagesPrefKeyPrefix + GetProjectIdentifier();
+
+                // If user manually choose to show or not preview packages, use this value
+                if (EditorPrefs.HasKey(key))
+                    return EditorPrefs.GetBool(key);
+
+                // Returns true if at least one preview package is installed, false otherwise
+                return PackageCollection.Instance.LatestListPackages.Any(p => p.IsPreview && p.IsCurrent);
+            }
+            set
+            {
+                EditorPrefs.SetBool(kShowPreviewPackagesPrefKeyPrefix + GetProjectIdentifier(), value);
+            }
+        }
+
+        public static bool ShowPreviewPackagesWarning
+        {
+            get { return EditorPrefs.GetBool(kShowPreviewPackagesWarningPrefKey, true); }
+            set { EditorPrefs.SetBool(kShowPreviewPackagesWarningPrefKey, value); }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b474da90ed53854f2627f6e4b84571fd1abaaee
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerPrefs.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 566f8bae715954c65a2a7a4b5818fc7a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs
new file mode 100644
index 0000000000000000000000000000000000000000..715427b2bd35797ad76aba2752d6a9c9912e6958
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs
@@ -0,0 +1,164 @@
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageManangerToolbarFactory : UxmlFactory<PackageManagerToolbar>
+    {
+        protected override PackageManagerToolbar DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageManagerToolbar();
+        }
+    }
+#endif
+
+    internal class PackageManagerToolbar : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageManagerToolbar> { }
+#endif
+        private readonly VisualElement root;
+
+        [SerializeField]
+        private PackageFilter selectedFilter = PackageFilter.All;
+
+        public PackageManagerToolbar()
+        {
+            root = Resources.GetTemplate("PackageManagerToolbar.uxml");
+            Add(root);
+            root.StretchToParentSize();
+
+            SetFilter(PackageCollection.Instance.Filter);
+            
+            RegisterCallback<AttachToPanelEvent>(OnEnterPanel);
+            RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
+        }
+
+        public void GrabFocus()
+        {
+            SearchToolbar.GrabFocus();
+        }
+
+        public new void SetEnabled(bool enable)
+        {
+            base.SetEnabled(enable);
+            FilterButton.SetEnabled(enable);
+            AdvancedButton.SetEnabled(enable);
+            SearchToolbar.SetEnabled(enable);
+        }
+
+        private static string GetFilterDisplayName(PackageFilter filter)
+        {
+            switch (filter)
+            {
+                case PackageFilter.All:
+                    return "All packages";
+                case PackageFilter.Local:
+                    return "In Project";
+                case PackageFilter.Modules:
+                    return "Built-in packages";
+                case PackageFilter.None:
+                    return "None";
+                default:
+                    return filter.ToString();
+            }
+        }
+
+        private void SetFilter(object obj)
+        {
+            var previouSelectedFilter = selectedFilter;
+            selectedFilter = (PackageFilter) obj;
+            FilterButton.text = string.Format("{0} â–¾", GetFilterDisplayName(selectedFilter));
+
+            if (selectedFilter != previouSelectedFilter)
+                PackageCollection.Instance.SetFilter(selectedFilter);
+        }
+
+        private void OnFilterButtonMouseDown(MouseDownEvent evt)
+        {
+            if (evt.propagationPhase != PropagationPhase.AtTarget)
+                return;
+
+            var menu = new GenericMenu();
+            menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.All)), 
+                selectedFilter == PackageFilter.All, 
+                SetFilter, PackageFilter.All);
+            menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.Local)), 
+                selectedFilter == PackageFilter.Local, 
+                SetFilter, PackageFilter.Local);
+            menu.AddSeparator("");
+            menu.AddItem(new GUIContent(GetFilterDisplayName(PackageFilter.Modules)), 
+                selectedFilter == PackageFilter.Modules, 
+                SetFilter, PackageFilter.Modules);
+            var menuPosition = new Vector2(FilterButton.layout.xMin, FilterButton.layout.center.y);
+            menuPosition = this.LocalToWorld(menuPosition);
+            var menuRect = new Rect(menuPosition, Vector2.zero);
+            menu.DropDown(menuRect);
+        }
+
+        private void OnAdvancedButtonMouseDown(MouseDownEvent evt)
+        {
+            if (evt.propagationPhase != PropagationPhase.AtTarget)
+                return;
+
+            var menu = new GenericMenu();
+
+            menu.AddItem(new GUIContent("Show preview packages"), PackageManagerPrefs.ShowPreviewPackages, TogglePreviewPackages);
+            //menu.AddItem(new GUIContent("Reset to defaults"), false, ResetToDefaultsClick);
+
+            var menuPosition = new Vector2(AdvancedButton.layout.xMax + 30, AdvancedButton.layout.center.y);
+            menuPosition = this.LocalToWorld(menuPosition);
+            var menuRect = new Rect(menuPosition, Vector2.zero);
+            menu.DropDown(menuRect);
+        }
+
+        private static void TogglePreviewPackages()
+        {
+            var showPreviewPackages = PackageManagerPrefs.ShowPreviewPackages;
+            if (!showPreviewPackages && PackageManagerPrefs.ShowPreviewPackagesWarning)
+            {
+                const string message = "Preview packages are not verified with Unity, may be unstable, and are unsupported in production. Are you sure you want to show preview packages?";
+                if (!EditorUtility.DisplayDialog("Unity Package Manager", message, "Yes", "No"))
+                    return;
+                PackageManagerPrefs.ShowPreviewPackagesWarning = false;
+            }
+            PackageManagerPrefs.ShowPreviewPackages = !showPreviewPackages;
+            PackageCollection.Instance.UpdatePackageCollection(true);
+        }
+
+        private void ResetToDefaultsClick()
+        {
+            if (!EditorUtility.DisplayDialog("Unity Package Manager", "Operation will reset all your packages to Editor defaults. Do you want to continue?", "Yes", "No"))
+                return;
+
+            // Registered on callback
+            AssemblyReloadEvents.beforeAssemblyReload += PackageManagerWindow.ShowPackageManagerWindow;
+
+            Client.ResetToEditorDefaults();
+
+            var windows = UnityEngine.Resources.FindObjectsOfTypeAll<PackageManagerWindow>();
+            if (windows.Length > 0)
+            {
+                windows[0].Close();
+            }
+        }
+
+        private void OnEnterPanel(AttachToPanelEvent evt)
+        {
+            FilterButton.RegisterCallback<MouseDownEvent>(OnFilterButtonMouseDown);
+            AdvancedButton.RegisterCallback<MouseDownEvent>(OnAdvancedButtonMouseDown);
+        }
+
+        private void OnLeavePanel(DetachFromPanelEvent evt)
+        {
+            FilterButton.UnregisterCallback<MouseDownEvent>(OnFilterButtonMouseDown);
+            AdvancedButton.UnregisterCallback<MouseDownEvent>(OnAdvancedButtonMouseDown);
+        }
+
+        private Label FilterButton { get { return root.Q<Label>("toolbarFilterButton"); } }
+        private Label AdvancedButton { get { return root.Q<Label>("toolbarAdvancedButton"); } }
+        internal PackageSearchToolbar SearchToolbar { get { return root.Q<PackageSearchToolbar>("toolbarSearch"); } }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..60bfd847d60f147f3e3318ace3bd447a0abc500d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerToolbar.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6d1682724bab428496b2bd2d8c7b194
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs
new file mode 100644
index 0000000000000000000000000000000000000000..af9706020c8db87f91b86d796354f09abd92ca04
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs
@@ -0,0 +1,131 @@
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+using UnityEditor.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+    internal class PackageManagerWindow : EditorWindow
+    {
+        public const string PackagePath = "Packages/com.unity.package-manager-ui/";
+        public const string ResourcesPath = PackagePath + "Editor/Resources/";
+        private const string TemplatePath = ResourcesPath + "Templates/PackageManagerWindow.uxml";
+        private const string DarkStylePath = ResourcesPath + "Styles/Main_Dark.uss";
+        private const string LightStylePath = ResourcesPath + "Styles/Main_Light.uss";
+
+        private const double targetVersionNumber = 2018.1;
+
+        public PackageCollection Collection;
+        public PackageSearchFilter SearchFilter;
+
+#if UNITY_2018_1_OR_NEWER
+
+        public void OnEnable()
+        {
+            PackageCollection.InitInstance(ref Collection);
+            PackageSearchFilter.InitInstance(ref SearchFilter);
+
+            this.GetRootVisualContainer().AddStyleSheetPath(EditorGUIUtility.isProSkin ? DarkStylePath : LightStylePath);
+
+            var windowResource = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(TemplatePath);
+            if (windowResource != null)
+            {
+                var template = windowResource.CloneTree(null);
+                this.GetRootVisualContainer().Add(template);
+                template.StretchToParentSize();
+
+                PackageList.OnSelected += OnPackageSelected;
+                PackageList.OnLoaded += OnPackagesLoaded;
+                PackageList.OnFocusChange += OnListFocusChange;
+                
+                PackageManagerToolbar.SearchToolbar.OnSearchChange += OnSearchChange;
+                PackageManagerToolbar.SearchToolbar.OnFocusChange += OnToolbarFocusChange;
+
+                // Disable filter while fetching first results
+                if (!PackageCollection.Instance.LatestListPackages.Any())
+                    PackageManagerToolbar.SetEnabled(false);
+                else
+                    PackageList.SelectLastSelection();
+            }
+        }
+
+        private void OnListFocusChange()
+        {
+            PackageManagerToolbar.GrabFocus();
+        }
+
+        private void OnToolbarFocusChange()
+        {
+            PackageList.GrabFocus();
+        }
+
+        private void OnSearchChange(string searchText)
+        {
+            PackageSearchFilter.Instance.SearchText = searchText;
+            PackageFiltering.FilterPackageList(PackageList);
+        }
+
+        public void OnDisable()
+        {
+            // Package list item may not be valid here.
+            if (PackageList != null)
+            {
+                PackageList.OnSelected -= OnPackageSelected;
+                PackageList.OnLoaded -= OnPackagesLoaded;
+            }
+
+            if (PackageManagerToolbar != null)
+            {
+                PackageManagerToolbar.SearchToolbar.OnSearchChange -= OnSearchChange;
+                PackageManagerToolbar.SearchToolbar.OnFocusChange -= OnToolbarFocusChange;
+            }
+        }
+        
+        public void OnDestroy()
+        {
+            PackageSearchFilter.Instance.ResetSearch();
+            PackageCollection.Instance.SetFilter(PackageFilter.All, false);
+        }
+
+        private void OnPackageSelected(Package package)
+        {
+            PackageDetails.SetPackage(package);
+        }
+
+        private void OnPackagesLoaded()
+        {
+            PackageManagerToolbar.SetEnabled(true);
+        }
+
+        private PackageList PackageList
+        {
+            get {return this.GetRootVisualContainer().Q<PackageList>("packageList");}
+        }
+
+        private PackageDetails PackageDetails
+        {
+            get {return this.GetRootVisualContainer().Q<PackageDetails>("detailsGroup");}
+        }
+
+        private PackageManagerToolbar PackageManagerToolbar
+        {
+            get {return this.GetRootVisualContainer().Q<PackageManagerToolbar>("toolbarContainer");}
+        }
+
+        internal Alert ErrorBanner { get { return this.GetRootVisualContainer().Q<Alert>("errorBanner"); } }
+        
+#endif
+
+        [MenuItem("Window/Package Manager", priority = 1500)]
+        internal static void ShowPackageManagerWindow()
+        {
+#if UNITY_2018_1_OR_NEWER
+            var window = GetWindow<PackageManagerWindow>(false, "Packages", true);
+            window.minSize = new Vector2(700, 250);
+            window.Show();
+#else
+            EditorUtility.DisplayDialog("Unsupported Unity Version", string.Format("The Package Manager requires Unity Version {0} or higher to operate.", targetVersionNumber), "Ok");
+#endif
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bceb03391612684a10564042d9db14252f3c61b4
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageManagerWindow.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: 650ea1d167b834d0f86d94e1e8c3b80f
+timeCreated: 1502224642
+licenseType: Pro
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs
new file mode 100644
index 0000000000000000000000000000000000000000..da07baed96cc6ec4052cc235a2665ade3b7b386c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs
@@ -0,0 +1,153 @@
+using System;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageSearchToolbarFactory : UxmlFactory<PackageSearchToolbar>
+    {
+        protected override PackageSearchToolbar DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageSearchToolbar();
+        }
+    }
+#endif
+
+    internal class PackageSearchToolbar : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageSearchToolbar> { }
+#endif
+        private const string kPlaceHolder = "Search by package name, verified, preview or version number...";
+        
+        public event Action OnFocusChange = delegate { };
+        public event Action<string> OnSearchChange = delegate { };
+        
+        private string searchText;
+        private bool showingPlaceHolder;
+
+        private readonly VisualElement root;
+
+        public PackageSearchToolbar()
+        {
+            root = Resources.GetTemplate("PackageSearchToolbar.uxml");
+            Add(root);
+            root.StretchToParentSize();
+
+            SearchTextField.value = searchText;
+            SearchTextField.maxLength = 54;
+            SearchCancelButton.clickable.clicked += SearchCancelButtonClick;
+            
+            RegisterCallback<AttachToPanelEvent>(OnEnterPanel);
+            RegisterCallback<DetachFromPanelEvent>(OnLeavePanel);
+
+            searchText = PackageSearchFilter.Instance.SearchText;
+            
+            if (string.IsNullOrEmpty(searchText))
+            {
+                showingPlaceHolder = true;
+                SearchTextField.value = kPlaceHolder;
+                SearchTextField.AddToClassList("placeholder");
+            }
+            else
+            {
+                showingPlaceHolder = false;
+                SearchTextField.value = searchText;
+                SearchTextField.RemoveFromClassList("placeholder");
+            }
+        }
+        
+        public void GrabFocus()
+        {
+            SearchTextField.Focus();
+        }
+
+        public new void SetEnabled(bool enable)
+        {
+            base.SetEnabled(enable);
+            SearchTextField.SetEnabled(enable);
+            SearchCancelButton.SetEnabled(enable);
+        }
+
+        private void OnSearchTextFieldChange(ChangeEvent<string> evt)
+        {
+            if (showingPlaceHolder && evt.newValue == kPlaceHolder)
+                return;
+            if (!string.IsNullOrEmpty(evt.newValue))
+                SearchCancelButton.AddToClassList("on");
+            else
+                SearchCancelButton.RemoveFromClassList("on");
+
+            searchText = evt.newValue;
+            OnSearchChange(searchText);
+        }
+
+        private void OnSearchTextFieldFocus(FocusEvent evt)
+        {
+            if (showingPlaceHolder)
+            {
+                SearchTextField.value = string.Empty;
+                SearchTextField.RemoveFromClassList("placeholder");
+                showingPlaceHolder = false;
+            }
+        }
+
+        private void OnSearchTextFieldFocusOut(FocusOutEvent evt)
+        {
+            if (string.IsNullOrEmpty(searchText))
+            {
+                showingPlaceHolder = true;
+                SearchTextField.AddToClassList("placeholder");
+                SearchTextField.value = kPlaceHolder;
+            }
+        }
+
+        private void SearchCancelButtonClick()
+        {
+            if (!string.IsNullOrEmpty(SearchTextField.value))
+            {
+                SearchTextField.value = string.Empty;
+            }
+            
+            showingPlaceHolder = true;
+            SearchTextField.AddToClassList("placeholder");
+            SearchTextField.value = kPlaceHolder;
+        }
+
+        private void OnEnterPanel(AttachToPanelEvent evt)
+        {
+            SearchTextField.RegisterCallback<FocusEvent>(OnSearchTextFieldFocus);
+            SearchTextField.RegisterCallback<FocusOutEvent>(OnSearchTextFieldFocusOut);
+            SearchTextField.RegisterCallback<ChangeEvent<string>>(OnSearchTextFieldChange);
+            SearchTextField.RegisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+        }
+
+        private void OnLeavePanel(DetachFromPanelEvent evt)
+        {
+            SearchTextField.UnregisterCallback<FocusEvent>(OnSearchTextFieldFocus);
+            SearchTextField.UnregisterCallback<FocusOutEvent>(OnSearchTextFieldFocusOut);
+            SearchTextField.UnregisterCallback<ChangeEvent<string>>(OnSearchTextFieldChange);
+            SearchTextField.UnregisterCallback<KeyDownEvent>(OnKeyDownShortcut);
+        }
+
+        private void OnKeyDownShortcut(KeyDownEvent evt)
+        {
+            if (evt.keyCode == KeyCode.Escape)
+            {
+                SearchCancelButtonClick();
+                SearchCancelButton.Focus();
+                evt.StopImmediatePropagation();
+                return;
+            }
+            
+            if (evt.keyCode == KeyCode.Tab)
+            {
+                OnFocusChange();
+                evt.StopImmediatePropagation();
+            }
+        }
+        private TextField SearchTextField { get { return root.Q<TextField>("searchTextField"); } }
+        private Button SearchCancelButton { get { return root.Q<Button>("searchCancelButton"); } }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..38292f40d2109a87f3735753143603cf346d8348
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageSearchToolbar.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f74142ec8a4cd4fb1b0ff6cf5c3075af
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs
new file mode 100644
index 0000000000000000000000000000000000000000..432ad27864cda5c35b6e414cb1465897f37e2a6b
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs
@@ -0,0 +1,150 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI
+{
+#if !UNITY_2018_3_OR_NEWER
+    internal class PackageStatusBarFactory : UxmlFactory<PackageStatusBar>
+    {
+        protected override PackageStatusBar DoCreate(IUxmlAttributes bag, CreationContext cc)
+        {
+            return new PackageStatusBar();
+        }
+    }
+#endif
+    
+    internal class PackageStatusBar : VisualElement
+    {
+#if UNITY_2018_3_OR_NEWER
+        internal new class UxmlFactory : UxmlFactory<PackageStatusBar> { }
+#endif
+
+        private readonly VisualElement root;
+        private string LastErrorMessage;
+
+        private List<IBaseOperation> operationsInProgress;
+
+        private enum StatusType {Normal, Loading, Error};  
+
+        public PackageStatusBar()
+        {
+            root = Resources.GetTemplate("PackageStatusBar.uxml");
+            Add(root);
+
+            MoreAddOptionsButton.clickable.clicked += OnMoreAddOptionsButtonClick;
+
+            LastErrorMessage = string.Empty;
+            operationsInProgress = new List<IBaseOperation>();
+
+            SetDefaultMessage();
+
+            PackageCollection.Instance.ListSignal.WhenOperation(OnListOrSearchOperation);
+            PackageCollection.Instance.SearchSignal.WhenOperation(OnListOrSearchOperation);
+        }
+
+        private void SetDefaultMessage()
+        {
+            if(!string.IsNullOrEmpty(PackageCollection.Instance.lastUpdateTime))
+                SetStatusMessage(StatusType.Normal, "Last update " + PackageCollection.Instance.lastUpdateTime);
+            else
+                SetStatusMessage(StatusType.Normal, string.Empty);
+        }
+
+        private void OnListOrSearchOperation(IBaseOperation operation)
+        {
+            if (operation == null || operation.IsCompleted)
+                return;
+            operationsInProgress.Add(operation);
+            operation.OnOperationFinalized += () => { OnOperationFinalized(operation); };
+            operation.OnOperationError += OnOperationError;
+
+            SetStatusMessage(StatusType.Loading, "Loading packages...");
+        }
+
+        private void OnOperationFinalized(IBaseOperation operation)
+        {
+            operationsInProgress.Remove(operation);
+
+            if (operationsInProgress.Any()) return;
+
+            var errorMessage = LastErrorMessage;
+
+            if (Application.internetReachability == NetworkReachability.NotReachable)
+            {
+                EditorApplication.update -= CheckInternetReachability;
+                EditorApplication.update += CheckInternetReachability;
+
+                errorMessage = "You seem to be offline.";
+            }
+
+            if (!string.IsNullOrEmpty(errorMessage))
+                SetStatusMessage(StatusType.Error, errorMessage);
+            else
+                SetDefaultMessage();
+        }
+
+        private void OnOperationError(Error error)
+        {
+            LastErrorMessage = "Cannot load packages, see console.";
+        }
+
+        private void CheckInternetReachability()
+        {
+            if (Application.internetReachability == NetworkReachability.NotReachable) return;
+
+            PackageCollection.Instance.FetchListCache(true);
+            PackageCollection.Instance.FetchSearchCache(true);
+            EditorApplication.update -= CheckInternetReachability;
+        }
+
+        private void SetStatusMessage(StatusType status, string message)
+        {
+            if (status == StatusType.Loading)
+                LoadingSpinner.Start();
+            else
+                LoadingSpinner.Stop();
+
+            UIUtils.SetElementDisplay(LoadingIcon, status == StatusType.Error);
+            if (status == StatusType.Error)
+                LoadingText.AddToClassList("icon");
+            else
+                LoadingText.RemoveFromClassList("icon");
+
+            LoadingText.text = message;
+        }
+
+        private void OnMoreAddOptionsButtonClick()
+        {
+            var menu = new GenericMenu();
+
+            var addPackageFromDiskItem = new GUIContent("Add package from disk...");
+
+            /* // Disable adding from url field before the feature is ready
+            var addPackageFromUrlItem = new GUIContent("Add package from URL...");
+            menu.AddItem(addPackageFromUrlItem, false, delegate
+            {
+                AddFromUrlField.Show(true);
+            });
+            */
+
+            menu.AddItem(addPackageFromDiskItem, false, delegate
+            {
+                var path = EditorUtility.OpenFilePanelWithFilters("Select package on disk", "", new[] { "package.json file", "json" });
+                if (!string.IsNullOrEmpty(path) && !Package.AddRemoveOperationInProgress)
+                    Package.AddFromLocalDisk(path);
+            });
+            var menuPosition = MoreAddOptionsButton.LocalToWorld(new Vector2(MoreAddOptionsButton.layout.width, 0));
+            var menuRect = new Rect(menuPosition, Vector2.zero);
+            menu.DropDown(menuRect);
+        }
+
+        private PackageAddFromUrlField AddFromUrlField { get { return root.Q<PackageAddFromUrlField>("packageAddFromUrlField");  }}
+        private VisualElement LoadingSpinnerContainer { get { return root.Q<VisualElement>("loadingSpinnerContainer");  }}
+        private LoadingSpinner LoadingSpinner { get { return root.Q<LoadingSpinner>("packageSpinner");  }}
+        private Label LoadingIcon { get { return root.Q<Label>("loadingIcon");  }}
+        private Label LoadingText { get { return root.Q<Label>("loadingText");  }}
+        private Button MoreAddOptionsButton{ get { return root.Q<Button>("moreAddOptionsButton");  }}
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b9a9b19be4cb6751c2e2b4c598ea288492cfc191
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Sources/UI/PackageStatusBar.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f34f5fa2437664b2a81b4a7f34df87ad
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..a5db520758e14732c7c2f54a6db990381e3f6276
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef
@@ -0,0 +1,9 @@
+{
+    "name": "Unity.PackageManagerUI.Editor",
+    "references": [],
+    "optionalUnityReferences": [],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..53a545ff5f354892cc7775ea0428b1e83a5c5e01
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Editor/Unity.PackageManagerUI.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 15a615c733aa240909fe0b28b0d5143c
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..bff9ef84ac88b43f310998c81a5bb04c0a85501c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md
@@ -0,0 +1,31 @@
+**Unity Companion License ("_License_")**
+
+Software Copyright © 2018 Unity Technologies ApS** **
+
+Unity Technologies ApS ("**_Unity_**") grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available under this License (“**_Software_**”), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity content authoring and rendering engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted, and in no event may the Software be used for competitive analysis or to develop a competing product or service.
+
+2. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+3. *Ownership & Grant Back to You*.
+
+  3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+  3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+  3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+4. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at[ https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+5. *Notices & Third-Party Rights*. This License, including the copyright notice associated with the Software, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+6. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+7. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+8. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+9. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+10. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..846adcd01ddd1b2fa98cc4c97f6006ffb1cf5e58
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2b3002c18d29d41b0898ab58bc6ee10d
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b7db7bbddd931b429367700c48806f729790bbbf
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md
@@ -0,0 +1,5 @@
+# Unity Package Manager UI
+
+[![](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/build-badge.svg?branch=2018.3%2Fstaging)](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/build-info?branch=2018.3%2Fstaging) [![](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/dependencies-badge.svg?branch=2018.3%2Fstaging)](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/dependencies-info?branch=2018.3%2Fstaging) [![](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/dependants-badge.svg)](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/dependants-info) ![ReleaseBadge](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/release-badge.svg) ![ReleaseBadge](https://badges.cds.internal.unity3d.com/packages/com.unity.package-manager-ui/candidates-badge.svg)
+
+Unity Package Manager UI as a Unity Package
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..927878a42d7ec4fe8cc3abbf08340525bc4bdb0c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 23805a7a1623842b0b7b21158066bd90
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5f5c2e6baec234a8ebe165ea62857ab9fcb45f97
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ab866bd39382069418f5c179c1e1ab3e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..312fb970ce9fe333309c8f28506fda94e303d17d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bac185a28e198c1419b649ca946942ea
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..42899bc0552a4ac062abb8308ffb65384756d626
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs
@@ -0,0 +1,3 @@
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Unity.PackageManagerCaptain.Editor")]
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a17ac41b3be0c14baea907ff7fa981a881eb67d2
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5941c79cb78c34a0d9c677ece9784f15
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d6f3ec1c544897006b4fd94ddff1602541d1eba8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 87738e82a4f047cc947cff8a2ccea594
+timeCreated: 1507838883
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ea571723faf6f5fbaa6e2281fbbd73d1f20a4bac
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs
@@ -0,0 +1,281 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageSets
+    {
+        private static readonly PackageSets _instance = new PackageSets();
+        public static PackageSets Instance { get { return _instance; } }
+
+        private static readonly System.Random Random = new System.Random(1);
+        private static string RandomString(int length)
+        {
+            const string chars = "abcdefghijklmnopqrstuvwxyz";
+            return new string(Enumerable.Repeat(chars, length)
+                .Select(s => s[Random.Next(s.Length)]).ToArray());
+        }
+
+        private static readonly string[] Words = new[] { "lorem", "ipsum", "dolor", "sit", "amet", "consectetuer",
+            "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod",
+            "tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat" };
+
+        private static string LoremIpsum(int numParagraphs, int minSentences, int maxSentences, int minWords, int maxWords)
+        {
+            var result = new StringBuilder();
+
+            for (var p = 0; p < numParagraphs; p++)
+            {
+                var numSentences = Random.Next(maxSentences - minSentences) + minSentences + 1;
+                for (var s = 0; s < numSentences; s++)
+                {
+                    var numWords = Random.Next(maxWords - minWords) + minWords + 1;
+                    for (var w = 0; w < numWords; w++)
+                    {
+                        if (p == 0 && s == 0 && w == 0)
+                        {
+                            result.Append("Lorem ipsum dolor sit");
+                        }
+                        else
+                        {
+                            if (w == 0)
+                            {
+                                var firstWord = Words [Random.Next (Words.Length)];
+                                firstWord = char.ToUpper (firstWord [0]) + firstWord.Substring (1);
+                                result.Append (firstWord);
+                            }
+                            else
+                            {
+                                result.Append (" ");
+                                result.Append (Words [Random.Next (Words.Length)]);
+                            }
+                        }
+                    }
+                    result.Append(". ");
+                }
+                result.Append(System.Environment.NewLine);
+                result.Append(System.Environment.NewLine);
+            }
+
+            return result.ToString();
+        }
+
+        private int _count = 0;
+
+        public PackageInfo Single(string name = null, string version = null)
+        {
+            var type = Random.NextDouble() > 0.5 ? PackageSource.Unknown : PackageSource.Registry;
+            return Single(type, name, version);
+        }
+
+        public PackageInfo Single(PackageSource type, string name = null, string version = null, bool isCurrent = true, bool isVerified = false)
+        {
+            if (name == null)
+                name = RandomString(Random.Next(5, 10));
+            if (version == null)
+            {
+                version = string.Format("1.0.{0}", _count);
+                if (Random.NextDouble() > 0.5)
+                    version += "-preview";
+            }
+
+            var group = UpmBaseOperation.GroupName(type);
+            var package = new PackageInfo
+            {
+                DisplayName = char.ToUpper(name[0]) + name.Substring(1),
+                Name = string.Format("com.unity.{0}", name),
+                Description = LoremIpsum(Random.Next(3,5), 2, 10, 5, 20),
+                PackageId = string.Format("com.unity.{0}@{1}", name, version),
+                State = PackageState.UpToDate,
+                Group = group,
+                Version = version,
+                IsVerified = isVerified,
+                IsCurrent = isCurrent,
+                IsLatest = false,
+                Origin = type,
+                Category = null,
+                Errors = new List<Error>()
+            };
+
+            _count++;
+
+            return package;
+        }
+
+        public List<PackageInfo> Many(int count, bool onlyPackageGroup = false)
+        {
+            return Many(null, count, onlyPackageGroup);
+        }
+
+        public List<PackageInfo> Many(string name, int count, bool onlyPackageGroup = false)
+        {
+            var packages = new List<PackageInfo>();
+            for (var i = 0; i < count; i++)
+            {
+                var package = Single(name);
+                packages.Add(package);
+            }
+
+            // At least one is set to a module and one to a package
+            if (packages.Count > 1)
+            {
+                packages[0].Group = PackageGroupOrigins.Packages.ToString();
+                packages[1].Group = PackageGroupOrigins.BuiltInPackages.ToString();
+            }
+
+            if (onlyPackageGroup)
+                packages.SetGroup(PackageGroupOrigins.Packages.ToString());
+
+            if (name != null)
+            {
+                packages.SetCurrent(false);
+                packages.SetLatest(false);
+
+                if (count > 1)
+                {
+                    packages.First().IsCurrent = true;
+                    packages.First().IsLatest = false;
+                    packages.Last().IsCurrent = false;
+                    packages.Last().IsLatest = true;
+                }
+                else
+                {
+                    packages.First().IsCurrent = true;
+                    packages.First().IsLatest = true;
+                }
+            }
+
+            return packages.OrderBy(p => p.DisplayName).ToList();
+        }
+
+        public List<PackageInfo> TestData()
+        {
+            var packages = Many(5);
+            packages[0].State = PackageState.UpToDate;
+            packages[1].State = PackageState.Outdated;
+            packages[2].State = PackageState.InProgress;
+            packages[3].State = PackageState.Error;
+
+            return packages;
+        }
+
+        // Package that actually exist. Useful when using test package that will be added to manifest
+        public List<PackageInfo> RealPackages()
+        {
+            var packages = new List<PackageInfo>();
+
+            // Don't add this package if it exists
+            if (PackageCollection.Instance.GetPackageByName("a") == null)
+            {
+                var package = new PackageInfo
+                {
+                    DisplayName = "A",
+                    Name = "a",
+                    Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
+                    PackageId = "a@1.0.1",
+                    State = PackageState.UpToDate,
+                    Version = "1.0.1",
+                    Group = PackageGroupOrigins.Packages.ToString(),
+                    IsCurrent = true,
+                    IsLatest = true,
+                    Errors = new List<Error>()
+                };
+                packages.Add(package);
+            }
+
+            if (PackageCollection.Instance.GetPackageByName("b") == null)
+            {
+                var package = new PackageInfo
+                {
+                    DisplayName = "B",
+                    Name = "b",
+                    Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
+                    PackageId = "b@1.0.1",
+                    State = PackageState.UpToDate,
+                    Version = "1.0.1",
+                    Group = PackageGroupOrigins.Packages.ToString(),
+                    IsCurrent = true,
+                    IsLatest = true,
+                    Errors = new List<Error>()
+                };
+                packages.Add(package);
+            }
+
+            if (PackageCollection.Instance.GetPackageByName("c") == null)
+            {
+                var package = new PackageInfo
+                {
+                    DisplayName = "C",
+                    Name = "c",
+                    Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
+                    PackageId = "c@1.0.1",
+                    State = PackageState.UpToDate,
+                    Version = "1.0.1",
+                    Group = PackageGroupOrigins.Packages.ToString(),
+                    IsCurrent = true,
+                    IsLatest = true,
+                    Errors = new List<Error>()
+                };
+                packages.Add(package);
+            }
+
+            if (PackageCollection.Instance.GetPackageByName("d") == null)
+            {
+                var package = new PackageInfo
+                {
+                    DisplayName = "NonExistingVersion(d)",
+                    Name = "d",
+                    Description = "Non existing package", //LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
+                    PackageId = "d@4.0.0",
+                    State = PackageState.UpToDate,
+                    Version = "4.0.0",
+                    Group = PackageGroupOrigins.Packages.ToString(),
+                    IsCurrent = true,
+                    IsLatest = true,
+                    Errors = new List<Error>()
+                };
+                packages.Add(package);
+            }
+
+            if (PackageCollection.Instance.GetPackageByName("nonexistingpackage") == null)
+            {
+                var package = new PackageInfo
+                {
+                    DisplayName = "NonExistingPackage",
+                    Name = "nonexistingpackage",
+                    Description = LoremIpsum(Random.Next(3, 5), 2, 10, 5, 20),
+                    PackageId = "nonexistingpackage@0.0.1",
+                    State = PackageState.UpToDate,
+                    Version = "0.0.1",
+                    Group = PackageGroupOrigins.Packages.ToString(),
+                    IsCurrent = true,
+                    IsLatest = true,
+                    Errors = new List<Error>()
+                };
+                packages.Add(package);
+            }
+
+            return packages;
+        }
+
+        public List<PackageInfo> Outdated()
+        {
+            const string name = "TestOutdated";
+
+            var packageA = Single(PackageSource.Registry, name, "1.0.1");
+            var packageB = Single(PackageSource.Registry, name, "1.0.2");
+            packageA.State = PackageState.Outdated;
+            packageB.IsCurrent = true;
+            packageB.IsLatest = false;
+
+            packageB.State = PackageState.UpToDate;
+            packageB.IsCurrent = false;
+            packageB.IsLatest = true;
+
+            var packages = new List<PackageInfo> {packageA, packageB};
+
+            return packages;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..022c04050492275acb0d58adebabba6cb71d9465
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/PackageSets.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a5edd19845e0e426eb775477a7988a4a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cf73defe6aa5e40fd9c63a166bc61f17b7022728
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs
@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+using UnityEditor.Experimental.UIElements;
+using UnityEngine;
+using UnityEngine.Experimental.UIElements;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal abstract class UITests<TWindow> where TWindow : EditorWindow
+    {
+        private TWindow Window { get; set; }
+        protected VisualElement Container { get { return Window.GetRootVisualContainer(); } }
+        protected MockOperationFactory Factory { get; private set; }
+
+        [OneTimeSetUp]
+        protected void OneTimeSetUp()
+        {
+            Factory = new MockOperationFactory();
+            OperationFactory.Instance = Factory;
+
+            Window = EditorWindow.GetWindow<TWindow>();
+            Window.Show();
+        }
+
+        [OneTimeTearDown]
+        protected void OneTimeTearDown()
+        {
+            OperationFactory.Reset();
+            Window = null;
+
+            if (TestContext.CurrentContext.Result.FailCount <= 0)
+            {
+                PackageCollection.Instance.UpdatePackageCollection(true);
+            }
+        }
+
+        protected void SetSearchPackages(IEnumerable<PackageInfo> packages)
+        {
+            Factory.SearchOperation = new MockSearchOperation(Factory, packages);
+            PackageCollection.Instance.FetchSearchCache(true);
+        }
+
+        protected void SetListPackages(IEnumerable<PackageInfo> packages)
+        {
+            Factory.Packages = packages;
+            PackageCollection.Instance.FetchListCache(true);
+        }
+
+        protected static Error MakeError(ErrorCode code, string message)
+        {
+            var error = "{\"errorCode\" : " + (uint)code + ", \"message\" : \"" + message + "\"}";
+            return JsonUtility.FromJson<Error>(error);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4e60f9213a8238daa6810f7c6d5ec6abc3735c67
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Common/UITests.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 76078ddafb924ce19edc6034201cb15b
+timeCreated: 1507838870
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services.meta
new file mode 100644
index 0000000000000000000000000000000000000000..33def5efefcc1d9065b22eff2fe806326a3cae3c
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 005c4d80949154e5c87348bb9f5d15eb
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock.meta
new file mode 100644
index 0000000000000000000000000000000000000000..639ff769b5be54f58abd4f397d7b8eddaeb83a58
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f851ca8f9604f442aafccf60a6713ce9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b9cd056d56797b762f5215a45a22c5420811623e
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockAddOperation : MockOperation, IAddOperation
+    {
+        public new event Action<Error> OnOperationError = delegate { };
+        public new event Action OnOperationFinalized = delegate { };
+        public event Action<PackageInfo> OnOperationSuccess = delegate { };
+
+        public PackageInfo PackageInfo { get; set; }
+
+        public MockAddOperation(MockOperationFactory factory, PackageInfo packageInfo = null) : base(factory)
+        {
+            PackageInfo = packageInfo;
+        }
+
+        public void AddPackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction = null,
+                                    Action<Error> errorCallbackAction = null)
+        {
+            if (ForceError != null)
+            {
+                if (errorCallbackAction != null)
+                    errorCallbackAction(ForceError);
+
+                IsCompleted = true;
+                OnOperationError(ForceError);
+            }
+            else
+            {
+                // on add package success, add the package to the list and set it to current
+                var list = Factory.Packages.ToList();
+                list.RemoveAll(p => p.PackageId.ToLower() == packageInfo.PackageId.ToLower());
+                list.Add(packageInfo);
+                Factory.Packages = list;
+
+                Factory.Packages.ByName(packageInfo.Name).SetCurrent(false);
+                packageInfo.IsCurrent = true;
+
+                if (doneCallbackAction != null)
+                    doneCallbackAction(PackageInfo);
+
+                IsCompleted = true;
+                OnOperationSuccess(PackageInfo);
+            }
+
+            OnOperationFinalized();
+        }
+
+        internal void ResetEvents()
+        {
+            OnOperationError = delegate { };
+            OnOperationFinalized = delegate { };
+            OnOperationSuccess = delegate { };
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0a4ad88a01ff3b39a83c109ea5f262bec8b95d61
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockAddOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e426a33061f184a9785cd5d82f9fb486
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..669552171edd349ec2f17711b09ad7c6a20349f6
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockListOperation : MockOperation, IListOperation
+    {
+        public new event Action<Error> OnOperationError = delegate { };
+        public new event Action OnOperationFinalized = delegate { };
+
+        public bool OfflineMode { get; set; }
+
+        public MockListOperation(MockOperationFactory factory) : base(factory)
+        {
+        }
+
+        public void GetPackageListAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction,
+            Action<Error> errorCallbackAction = null)
+        {
+            if (ForceError != null)
+            {
+                if (errorCallbackAction != null)
+                    errorCallbackAction(ForceError);
+
+                IsCompleted = true;
+                OnOperationError(ForceError);
+            }
+            else
+            {
+                if (doneCallbackAction != null)
+                    doneCallbackAction(Factory.Packages);
+
+                IsCompleted = true;
+            }
+
+            OnOperationFinalized();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2a8cabf83b794e6567dd63e36af33dfef9acf2f7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockListOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fea24dc53b50441a9b2a8f9473fede33
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dc113098d3ab4977b4f4e243428d7f5baedec0c3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs
@@ -0,0 +1,28 @@
+using System;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockOperation : IBaseOperation
+    {
+        public event Action<Error> OnOperationError { add { } remove { } }
+        public event Action OnOperationFinalized { add { } remove { } }
+        public event Action<string> OnOperationFailure { add { } remove { } }
+        
+        public bool IsCompleted { get; protected set; }
+        public bool RequireNetwork { get; set; }
+
+        public Error ForceError { protected get; set; } // Allow external component to force an error on the requests (eg: testing)
+
+        protected readonly MockOperationFactory Factory;
+
+        protected MockOperation(MockOperationFactory factory)
+        {
+            RequireNetwork = false;
+            Factory = factory;
+        }
+
+        public void Cancel()
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b88b65d6927e0fefdd855a2df90db9c260e31a1d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4fc12201ddc4b4d45b9bdecdf7f00ea5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2af87c27985d5b69ebc7d5b972c257a46333e3d1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockRemoveOperation : MockOperation, IRemoveOperation
+    {
+        public new event Action<Error> OnOperationError = delegate { };
+        public new event Action OnOperationFinalized = delegate { };
+        public event Action<PackageInfo> OnOperationSuccess = delegate { };
+
+        public PackageInfo PackageInfo { get; set; }
+
+        public MockRemoveOperation(MockOperationFactory factory) : base(factory)
+        {
+        }
+
+        public void RemovePackageAsync(PackageInfo packageInfo, Action<PackageInfo> doneCallbackAction, Action<Error> errorCallbackAction = null)
+        {
+            if (ForceError != null)
+            {
+                if (errorCallbackAction != null)
+                    errorCallbackAction(ForceError);
+
+                IsCompleted = true;
+                OnOperationError(ForceError);
+                OnOperationFinalized();
+                return;
+            }
+
+            Factory.Packages = (from package in Factory.Packages
+                where package.PackageId.ToLower() != packageInfo.PackageId.ToLower()
+                select package);
+
+            if (doneCallbackAction != null)
+                doneCallbackAction(packageInfo);
+
+            IsCompleted = true;
+            OnOperationSuccess(packageInfo);
+            OnOperationFinalized();
+        }
+        
+        internal void ResetEvents()
+        {
+            OnOperationError = delegate { };
+            OnOperationFinalized = delegate { };
+            OnOperationSuccess = delegate { };
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f0e652e27564d2ad7783e6f68399adca324ae7c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockRemoveOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fd382b8abbd6145c29e32af0e2a26d88
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs
new file mode 100644
index 0000000000000000000000000000000000000000..76393cc800a7dbe82ac04fb2fc951ac0c3f7d353
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockSearchOperation : MockOperation, ISearchOperation
+    {
+        public new event Action<Error> OnOperationError = delegate { };
+        public new event Action OnOperationFinalized = delegate { };
+
+        public IEnumerable<PackageInfo> Packages { get; set; }
+
+        public MockSearchOperation(MockOperationFactory factory, IEnumerable<PackageInfo> packages) : base(factory)
+        {
+            Packages = packages;
+        }
+
+        public void GetAllPackageAsync(Action<IEnumerable<PackageInfo>> doneCallbackAction = null,  Action<Error> errorCallbackAction = null)
+        {
+            if (ForceError != null)
+            {
+                if (errorCallbackAction != null)
+                    errorCallbackAction(ForceError);
+                IsCompleted = true;
+                OnOperationError(ForceError);
+            }
+            else
+            {
+                if (doneCallbackAction != null)
+                    doneCallbackAction(Packages);
+
+                IsCompleted = true;
+            }
+
+            OnOperationFinalized();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3114715688ec5df63d16473e2f500a058253fa9d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Mock/MockSearchOperation.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0a2c7bcbdfe0a438999cb0653789cdf4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..221ffb06bbf6fb99e33a971ec2353bb29c1354c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class MockOperationFactory : IOperationFactory
+    {
+        public IEnumerable<PackageInfo> Packages { get; set; }
+        public MockAddOperation AddOperation { get; set; }
+        public MockSearchOperation SearchOperation { private get; set; }
+        public MockRemoveOperation RemoveOperation { private get; set; }
+
+        public MockOperationFactory()
+        {
+            Packages = Enumerable.Empty<PackageInfo>();
+        }
+
+        public void ResetOperations()
+        {
+            if (AddOperation != null) 
+                AddOperation.ResetEvents();
+            AddOperation = null;
+            
+            if (RemoveOperation != null) 
+                RemoveOperation.ResetEvents();
+            RemoveOperation = null;
+
+            SearchOperation = null;
+        }
+
+        public IListOperation CreateListOperation(bool offlineMode = false)
+        {          
+            return new MockListOperation(this);
+        }
+
+        public ISearchOperation CreateSearchOperation()
+        {          
+            return SearchOperation ?? new MockSearchOperation(this, Packages);
+        }
+
+        public IAddOperation CreateAddOperation()
+        {
+            return AddOperation ?? new MockAddOperation(this, Packages.First());
+        }
+
+        public IRemoveOperation CreateRemoveOperation()
+        {
+            return RemoveOperation ?? new MockRemoveOperation(this);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..624dc0fb31d44d244aa7614cedadfb074096cd10
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/MockOperationFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 75938f72739584ed9925bf4ae8989079
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f3e04f86ae796f625555a4cda425b9792ce2b7a3
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f68d88b9933cd4204925b22192bf15b4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e31dd12aae0965517295d21d146fbb1a47213c33
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs
@@ -0,0 +1,24 @@
+using NUnit.Framework;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageBaseTests
+    {
+        protected MockOperationFactory Factory;
+        protected const string kPackageTestName = "com.unity.test";
+
+
+        [OneTimeSetUp]
+        public void OneTimeSetup()
+        {
+            Factory = new MockOperationFactory();
+            OperationFactory.Instance = Factory;
+        }
+
+        [OneTimeTearDown]
+        public void OneTimeTearDown()
+        {
+            OperationFactory.Reset();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..68d83b67f94f88088fa2a01df7130315f2bc6401
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageBaseTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 983d491088dbb4db8b83c926939a08c5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6a1ede18669736560d29ecee09c37e0580b2719d
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs
@@ -0,0 +1,157 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageCollectionTests : PackageBaseTests
+    {
+        private Action<PackageFilter> OnFilterChangeEvent;
+        private Action<IEnumerable<Package>> OnPackagesChangeEvent;
+
+        [SetUp]
+        public void Setup()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);
+        }
+
+        [TearDown]
+        public void TearDown()
+        {
+            PackageCollection.Instance.OnFilterChanged -= OnFilterChangeEvent;
+            PackageCollection.Instance.OnPackagesChanged -= OnPackagesChangeEvent;
+        }
+
+        [Test]
+        public void Constructor_Instance_FilterIsLocal()
+        {
+            Assert.AreEqual(PackageFilter.Local, PackageCollection.Instance.Filter);
+        }
+
+        [Test]
+        public void SetFilter_WhenFilterChange_FilterChangeEventIsPropagated()
+        {
+            var wasCalled = false;
+            OnFilterChangeEvent = filter =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnFilterChanged += OnFilterChangeEvent;
+            PackageCollection.Instance.SetFilter(PackageFilter.All, false);
+            Assert.IsTrue(wasCalled);
+        }
+
+        [Test]
+        public void SetFilter_WhenNoFilterChange_FilterChangeEventIsNotPropagated()
+        {
+            var wasCalled = false;
+            OnFilterChangeEvent = filter =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnFilterChanged += OnFilterChangeEvent;
+            PackageCollection.Instance.SetFilter(PackageFilter.Local, false);
+            Assert.IsFalse(wasCalled);
+        }
+
+        [Test]
+        public void SetFilter_WhenFilterChange_FilterIsChanged()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.All, false);
+            Assert.AreEqual(PackageFilter.All, PackageCollection.Instance.Filter);
+        }
+
+        [Test]
+        public void SetFilter_WhenNoFilterChangeRefresh_PackagesChangeEventIsNotPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);
+            Assert.IsFalse(wasCalled);
+        }
+
+        [Test]
+        public void SetFilter_WhenFilterChangeNoRefresh_PackagesChangeEventIsNotPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+            PackageCollection.Instance.SetFilter(PackageFilter.All, false);
+            Assert.IsFalse(wasCalled);
+        }
+
+        [Test]
+        public void SetFilter_WhenNoFilterChangeNoRefresh_PackagesChangeEventIsNotPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+            PackageCollection.Instance.SetFilter(PackageFilter.Local, false);
+            Assert.IsFalse(wasCalled);
+        }
+
+        [Test]
+        public void FetchListCache_PackagesChangeEventIsPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+            Factory.Packages = PackageSets.Instance.Many(5);
+            PackageCollection.Instance.FetchListCache(true);
+
+            Assert.IsTrue(wasCalled);
+        }
+
+
+        [Test]
+        public void FetchListOfflineCache_PackagesChangeEventIsPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+
+            Factory.Packages = PackageSets.Instance.Many(5);
+            PackageCollection.Instance.FetchListOfflineCache(true);
+
+            Assert.IsTrue(wasCalled);
+        }
+
+        [Test]
+        public void FetchSearchCache_PackagesChangeEventIsPropagated()
+        {
+            var wasCalled = false;
+            OnPackagesChangeEvent = packages =>
+            {
+                wasCalled = true;
+            };
+            PackageCollection.Instance.OnPackagesChanged += OnPackagesChangeEvent;
+
+            Factory.SearchOperation = new MockSearchOperation(Factory, PackageSets.Instance.Many(5));
+            PackageCollection.Instance.FetchSearchCache(true);
+
+            Assert.IsTrue(wasCalled);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1de3a06bcef5f00cc5b13869ed64473c8303696f
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageCollectionTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01cd264c206ae482393dc9d04b26eca0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9cf3d1d7bbb12b3736087f2de6ce4eef56dee3dd
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs
@@ -0,0 +1,60 @@
+using NUnit.Framework;
+using Semver;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageInfoTests : PackageBaseTests
+    {
+        [Test]
+        public void HasTag_WhenPreReleasePackageVersionTagWithPreReleaseName_ReturnsTrue()
+        {
+            var tag = PackageTag.preview.ToString();
+            
+            var info = new PackageInfo()
+            {
+                PackageId = kPackageTestName,
+                Version = new SemVersion(1, 0, 0, tag)
+            };
+            
+            Assert.IsTrue(info.HasVersionTag(tag));
+        }
+        
+        [Test]
+        public void HasTag_WhenPackageVersionTagIsAnyCase_ReturnsTrue()
+        {
+            var tag = "pREview";
+            
+            var info = new PackageInfo()
+            {
+                PackageId = kPackageTestName,
+                Version = new SemVersion(1, 0, 0, tag)
+            };
+            
+            Assert.IsTrue(info.HasVersionTag(tag));
+        }
+        
+        [Test]
+        public void VersionWithoutTag_WhenVersionContainsTag_ReturnsVersionOnly()
+        {
+            var info = new PackageInfo()
+            {
+                PackageId = kPackageTestName,
+                Version = new SemVersion(1, 0, 0, PackageTag.preview.ToString())
+            };
+            
+            Assert.AreEqual("1.0.0", info.VersionWithoutTag);
+        }
+        
+        [Test]
+        public void VersionWithoutTag_WhenVersionDoesNotContainTag_ReturnsVersionOnly()
+        {
+            var info = new PackageInfo()
+            {
+                PackageId = kPackageTestName,
+                Version = new SemVersion(1)
+            };
+            
+            Assert.AreEqual("1.0.0", info.VersionWithoutTag);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4a464ac1ad2ab2e97369a42ba3a0c10968726074
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageInfoTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2f1d33abb004b44cb90ec83a2bfe872e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c5aedb5f8c8e9e9f368c7db9ad0b806205dcd3f1
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs
@@ -0,0 +1,146 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageSearchTests : PackageBaseTests
+    {
+        private const string kName = "Test-Package";
+
+        private const string kCurrentVersion = "3.0.0";
+        private const string kPrerelease = "preview";
+        private const string kUpperPrerelease = "PREVIEW";
+        private const string kMixedPrerelease = "pReViEw";
+
+        private Package testPackage;
+
+        [SetUp]
+        public void Setup()
+        {
+            testPackage = new Package(kName, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, kName, kCurrentVersion + "-" + kPrerelease, true, true)
+            });
+        }
+
+        [TestCase(null)]
+        [TestCase("")]
+        [TestCase("\t")]
+        [TestCase(" ")]
+        [TestCase("  ")]
+        public void MatchCriteria_NullOrEmptyCriteria_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCaseSource("GetAllPartialName")]
+        public void MatchCriteria_CriteriaMatchDisplayNamePartially_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCaseSource("GetAllPartialVersions")]
+        public void MatchCriteria_CriteriaMatchCurrentVersion_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+        
+        [TestCase(kPrerelease)]
+        [TestCase(kUpperPrerelease)]
+        [TestCase(kMixedPrerelease)]
+        public void MatchCriteria_CriteriaMatchCurrentVersionPreRelease_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCase("p")]
+        [TestCase("pr")]
+        [TestCase("pre")]
+        [TestCase("prev")]
+        [TestCase("view")]
+        [TestCase("vie")]
+        [TestCase("vi")]
+        public void MatchCriteria_CriteriaPartialMatchCurrentVersionPreRelease_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCase("-p")]
+        [TestCase("-pr")]
+        [TestCase("-pre")]
+        [TestCase("-prev")]
+        [TestCase("-previ")]
+        [TestCase("-previe")]
+        [TestCase("-preview")]
+        public void MatchCriteria_CriteriaPartialMatchCurrentVersionPreReleaseLeadingDash_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCase("veri")]
+        [TestCase("verif")]
+        [TestCase("verifie")]
+        [TestCase("verified")]
+        [TestCase("erified")]
+        [TestCase("rified")]
+        [TestCase("ified")]
+        public void MatchCriteria_CriteriaPartialMatchVerified_ReturnsTrue(string criteria)
+        {
+            Assert.IsTrue(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        [TestCase("Test Package")]
+        [TestCase("Test -Package")]
+        [TestCase("Test - Package")]
+        [TestCase("Test- Package")]
+        [TestCase("NotFound")]
+        [TestCase("1.0.0-preview")]
+        [TestCase("5.0.0")]
+        [TestCase("beta")]
+        [TestCase("previewed")]
+        [TestCase("verify")]
+        [TestCase("experimental")]
+        public void MatchCriteria_CriteriaDoesntMatch_ReturnsFalse(string criteria)
+        {
+            Assert.IsFalse(PackageFiltering.FilterByText(testPackage, criteria));
+        }
+
+        private static IEnumerable<string> GetAllPartialVersions()
+        {
+            var versions = new List<string>();
+            for (var i = 1; i <= kCurrentVersion.Length; i++)
+            {
+                versions.Add(kCurrentVersion.Substring(0, i));
+            }
+            return versions;
+        }
+        
+        private static IEnumerable<string> GetAllPartial(string str)
+        {
+            var names = new List<string>();
+            for (var i = 0; i < str.Length; i++)
+            {
+                var s1 = str.Substring(0, i + 1);
+                var s2 = str.Substring(i, str.Length - i);
+                names.Add(s1);
+                names.Add(s1.ToLower());
+                names.Add(s1.ToUpper());
+                names.Add(" " + s1);
+                names.Add(s1 + " ");
+                names.Add(" " + s1 + " ");
+                names.Add(s2);
+                names.Add(s2.ToLower());
+                names.Add(s2.ToUpper());
+                names.Add(" " + s2);
+                names.Add(s2 + " ");
+                names.Add(" " + s2 + " ");
+            }
+            return names;
+        }
+
+        private static IEnumerable<string> GetAllPartialName()
+        {
+            return GetAllPartial(kName);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..734401dd37403fd44e46fb0c7e27fabcf2fd9c94
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageSearchTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 448aaa781aea44811a5d66e3edac37e4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a117fa0567a77efbe33cc4d2d1e061f9ac3e2ddd
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs
@@ -0,0 +1,521 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NUnit.Framework;
+using Semver;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageTests : PackageBaseTests
+    {
+        private Action<IAddOperation> OnAddOperation;
+        private Action<IRemoveOperation> OnRemoveOperation;
+
+        // Package version to display
+        public PackageInfo Display(Package package)
+        {
+            return PackageCollection.Instance.Filter == PackageFilter.All || package.Current == null ? package.Latest : package.Current;
+        }
+
+        [SetUp]
+        public void Setup()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);
+        }
+        
+        [TearDown]
+        public void TearDown()
+        {
+            Factory.ResetOperations();
+            Factory.Packages = Enumerable.Empty<PackageInfo>();
+        }
+
+        [Test]
+        public void Constructor_WithNullPackageName_ThrowsException()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            Assert.Throws<ArgumentException>(() => 
+            {
+                new Package(null, packages);
+            });
+        }
+
+        [Test]
+        public void Constructor_WithEmptyPackageName_ThrowsException()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            Assert.Throws<ArgumentException>(() => 
+            {
+                new Package("", packages);
+            });
+        }
+
+        [Test]
+        public void Constructor_WithNullPackageInfos_ThrowsException()
+        {
+            Assert.Throws<ArgumentNullException>(() => 
+            {
+                new Package(kPackageTestName, null);
+            });
+        }
+
+        [Test]
+        public void Constructor_WithEmptyPackageInfos_ThrowsException()
+        {
+            var packages = Enumerable.Empty<PackageInfo>();
+            Assert.Throws<ArgumentException>(() => 
+            {
+                new Package(kPackageTestName, packages);
+            });
+        }
+        
+        [Test]
+        public void Constructor_WithOnePackageInfo_CurrentIsFirstVersion()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Current, package.Versions.First());
+            Assert.IsTrue(package.Current.IsCurrent);
+        }
+        
+        [Test]
+        public void Constructor_WithOnePackageInfo_LatestIsLastVersion()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Latest, package.Versions.Last());
+            Assert.IsTrue(package.Latest.IsCurrent);
+        }
+        
+        [Test]
+        public void Constructor_WithOnePackageInfo_LatestAndCurrentAreEqual()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Current, package.Latest);
+        }
+        
+        [Test]
+        public void Constructor_WithTwoPackageInfos_CurrentIsFirstVersion()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Current, package.Versions.First());
+            Assert.IsTrue(package.Current.IsCurrent);
+        }
+        
+        [Test]
+        public void Constructor_WithTwoPackageInfos_LatestIsLastVersion()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Latest, package.Versions.Last());
+            Assert.IsFalse(package.Latest.IsCurrent);
+        }
+        
+        [Test]
+        public void Constructor_WithTwoPackagesInfo_LatestAndCurrentAreNotEqual()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreNotEqual(package.Current, package.Latest);
+        }
+
+        [Test]
+        public void Constructor_WithMultiplePackagesInfo_VersionsCorrespond()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
+            var package = new Package(kPackageTestName, packages);
+
+            Assert.AreEqual(packages, package.Versions);
+        }
+        
+        [Test]
+        public void Add_WhenPackageInfoIsCurrent_AddOperationIsNotCalled()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 3, true);
+            Factory.Packages = packages;
+            var package = new Package(kPackageTestName, packages);
+            var addOperationCalled = false;
+
+            OnAddOperation = operation =>
+            {
+                addOperationCalled = true;
+            };
+            
+            package.AddSignal.OnOperation += OnAddOperation;
+            package.Add(packages.First());
+            package.AddSignal.OnOperation -= OnAddOperation;
+            
+            Assert.IsFalse(addOperationCalled);
+        }
+
+        [Test]
+        public void Add_WhenPackageInfoIsNotCurrent_AddOperationIsCalled()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 3, true);
+            Factory.Packages = packages;
+            Factory.AddOperation = new MockAddOperation(Factory, packages[1]);
+            var package = new Package(kPackageTestName, packages);
+            var addOperationCalled = false;
+
+            OnAddOperation = operation =>
+            {
+                addOperationCalled = true;
+            };
+            
+            package.AddSignal.OnOperation += OnAddOperation;
+            package.Add(packages[1]);
+            package.AddSignal.OnOperation -= OnAddOperation;
+            
+            Assert.IsTrue(addOperationCalled);
+        }
+        [Test]
+        public void Update_WhenCurrentIsLatest_AddOperationIsNotCalled()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            Factory.Packages = packages;
+            var package = new Package(kPackageTestName, packages);
+            var addOperationCalled = false;
+
+            OnAddOperation = operation =>
+            {
+                addOperationCalled = true;
+            };
+            
+            package.AddSignal.OnOperation += OnAddOperation;
+            package.Update();
+            package.AddSignal.OnOperation -= OnAddOperation;
+            
+            Assert.IsFalse(addOperationCalled);
+        }
+        
+        [Test]
+        public void Update_WhenCurrentIsNotLatest_AddOperationIsCalled()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            Factory.Packages = packages;
+            Factory.AddOperation = new MockAddOperation(Factory, packages.Last());
+            var package = new Package(kPackageTestName, packages);
+            var addOperationCalled = false;
+
+            OnAddOperation = operation =>
+            {
+                addOperationCalled = true;
+            };
+            
+            package.AddSignal.OnOperation += OnAddOperation;
+            package.Update();
+            package.AddSignal.OnOperation -= OnAddOperation;
+            
+            Assert.IsTrue(addOperationCalled);
+        }
+        
+        [Test]
+        public void Remove_RemoveOperationIsCalled()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            Factory.Packages = packages;
+            var package = new Package(kPackageTestName, packages);
+            var removeOperationCalled = false;
+
+            OnRemoveOperation = operation =>
+            {
+                removeOperationCalled = true;
+            };
+            
+            package.RemoveSignal.OnOperation += OnRemoveOperation;
+            package.Remove();
+            package.RemoveSignal.OnOperation -= OnRemoveOperation;
+            
+            Assert.IsTrue(removeOperationCalled);
+        }
+
+        [Test]
+        public void IsPackageManagerUI_WhenPackageManagerUIPackage_ReturnsTrue()
+        {
+            var packages = new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Unknown, Package.packageManagerUIName, "1.0.0")
+            };
+            var package = new Package(Package.packageManagerUIName, packages);
+            
+            Assert.IsTrue(package.IsPackageManagerUI);
+        }
+        
+        [Test]
+        public void IsPackageManagerUI_WhenNotPackageManagerUIPackage_ReturnsFalse()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.IsFalse(package.IsPackageManagerUI);
+        }
+        
+        [Test]
+        public void Name_ReturnsExpectedValue()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 1, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(kPackageTestName, package.Name);
+        }
+        
+        [Test]
+        public void Display_WhenCurrentIsNotNull_ReturnsCurrent()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Current, Display(package));
+        }
+        
+        [Test]
+        public void Display_WhenCurrentIsNull_ReturnsLatest()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            packages[0].IsCurrent = false;
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(package.Latest, Display(package));
+        }
+        
+        [Test]
+        public void Display_WhenCurrentAndLatest_ReturnsLatest()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 2, true);
+            packages[0].IsCurrent = false;
+            var package = new Package(kPackageTestName, packages);
+            var answer = packages.Max(x => x.Version);
+
+            Assert.AreEqual(Display(package).Version, answer);
+        }
+        
+        [Test]
+        public void Versions_WhenOrderedPackageInfo_ReturnsOrderedValues()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(packages, package.Versions);
+        }
+        
+        [Test]
+        public void Versions_WhenUnorderedPackageInfo_ReturnsOrderedValues()
+        {
+            var packages = PackageSets.Instance.Many(kPackageTestName, 5, true);
+            packages[0].Version = new SemVersion(1);
+            packages[1].Version = new SemVersion(4);
+            packages[2].Version = new SemVersion(2);
+            packages[3].Version = new SemVersion(5);
+            packages[4].Version = new SemVersion(3);
+
+            var orderPackages = packages.OrderBy(p => p.Version);
+            
+            var package = new Package(kPackageTestName, packages);
+            
+            Assert.AreEqual(orderPackages, package.Versions);
+        }
+
+        //
+        // Version Comparison tests
+        //
+        private static string name = "test";
+
+        [Test]
+        public void VersionUpdate_Current_lessthen_Verified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true),        // Verified
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_Current_equalto_Verified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", true, true),         // Verified
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_Current_greaterthen_Verified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", true), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true),        // Verified
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "3.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_Current_greaterthen_Verified_WithLatest()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", true), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true),        // Verified
+                PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "4.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoVerified_Current_lessthen_Latest()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "3.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoVerified_Current_equalto_Latest()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "0.0.0", false), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", true) 
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
+        }
+        
+        [Test]
+        public void VersionUpdate_NoCurrent_WithVerified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true),    // verified 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoCurrent_Latest()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoCurrent_Latest_WithPreview()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "2.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoCurrent_Verified_WithPreview()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true),    // verified 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
+        }
+
+        [Test]
+        public void VersionUpdate_NoCurrent_OnlyPreviews()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0-preview", false), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0-preview", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "2.0.0-preview");
+        }
+
+        [Test]
+        public void VersionUpdate_CurrentPreview_WithVerified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true),    // verified 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true)    // current
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "3.0.0-preview");
+        }
+        
+        [Test]
+        public void VersionUpdate_CurrentPreview_WithLatestPreview()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false, true),    // verified 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true),    // current
+                PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0-preview", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "4.0.0-preview");
+        }
+
+        [Test]
+        public void VersionUpdate_CurrentPreview_WithLatestPreviewNoVerified()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, name, "1.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false),
+                PackageSets.Instance.Single(PackageSource.Registry, name, "3.0.0-preview", true),    // current
+                PackageSets.Instance.Single(PackageSource.Registry, name, "4.0.0-preview", false)
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "4.0.0-preview");
+        }
+
+        [Test]
+        public void VersionUpdate_CurrentEmbedded()
+        {
+            var package = new Package(name, new List<PackageInfo>
+            {
+                PackageSets.Instance.Single(PackageSource.Embedded, name, "1.0.0", true), 
+                PackageSets.Instance.Single(PackageSource.Registry, name, "2.0.0", false, true),    // verified
+            });
+
+            Assert.IsTrue(package.LatestUpdate.Version == "1.0.0");
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5e884505e483cc66efa14cea07411f2f35adc6db
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Services/Packages/PackageTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 78e267bad6d564d49803ba3e9c13ff2e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d0b86000cbb236d9d8cb07799a9a3a6eb6fe17e5
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7b87dac66d6e74d5f848d26f169bbe89
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eabf39fb01d4f71dc04622f1ccaeb82afd4b8d39
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs
@@ -0,0 +1,122 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine.Experimental.UIElements;
+using NUnit.Framework;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageDetailsTests : UITests<PackageManagerWindow>
+    {
+        [SetUp]
+        public void Setup()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);
+            PackageCollection.Instance.UpdatePackageCollection(true);
+            SetSearchPackages(Enumerable.Empty<PackageInfo>());
+            SetListPackages(Enumerable.Empty<PackageInfo>());
+            Factory.ResetOperations();
+        }
+
+        [Test]
+        public void Show_CorrectTag()
+        {
+            var packageInfo = PackageSets.Instance.Single();
+            foreach (var tag in new List<string>
+            {
+                PackageTag.preview.ToString(),
+                PackageTag.verified.ToString(),
+                "usertag"        // Any other unsupported tag a user might use
+            })
+            {
+                packageInfo.IsVerified = PackageTag.verified.ToString() == tag;
+                packageInfo.Version = packageInfo.Version.Change(null, null, null, tag);            
+                var package = new Package(packageInfo.Name, new List<PackageInfo> {packageInfo});
+                var details = Container.Q<PackageDetails>("detailsGroup");
+                details.SetPackage(package);
+
+                // Check for every UI-supported tags that visibility is correct
+                Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.preview)) == packageInfo.IsPreview);
+                Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.verified)) == packageInfo.IsVerified);
+                Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.local)) == packageInfo.IsLocal);
+                Assert.IsTrue(UIUtils.IsElementVisible(details.GetTag(PackageTag.inDevelopment)) == packageInfo.IsInDevelopment);
+            }
+        }
+
+        [Test]
+        public void Show_CorrectLabel_UpToDate()
+        {
+            SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", true)});
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.UpToDate]);
+            Assert.IsFalse(details.UpdateButton.enabledSelf);
+            Assert.IsTrue(details.VersionPopup.enabledSelf);
+        }
+
+        [Test]
+        public void Show_CorrectLabel_Install()
+        {
+            SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", false)});
+
+            PackageCollection.Instance.SetFilter(PackageFilter.All);
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Add]);
+            Assert.IsTrue(details.UpdateButton.enabledSelf);
+            Assert.IsTrue(details.VersionPopup.enabledSelf);
+        }
+
+        [Test]
+        public void Show_CorrectLabel_UpdateTo()
+        {
+            SetListPackages(new List<PackageInfo> 
+            {
+                PackageSets.Instance.Single(PackageSource.Registry, "name", "1.0.0", true),
+                PackageSets.Instance.Single(PackageSource.Registry, "name", "2.0.0", false)
+            });
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Update]);
+            Assert.IsTrue(details.UpdateButton.enabledSelf);
+            Assert.IsTrue(details.VersionPopup.enabledSelf);
+        }
+        
+        [Test]
+        public void Show_HideLabel_Embedded()
+        {
+            SetListPackages(new List<PackageInfo> 
+            {
+                PackageSets.Instance.Single(PackageSource.Embedded, "name", "1.0.0", true),
+                PackageSets.Instance.Single(PackageSource.Registry, "name", "2.0.0", false)
+            });
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsFalse(details.UpdateBuiltIn.visible);
+            Assert.IsFalse(details.UpdateCombo.visible);
+            Assert.IsFalse(details.UpdateButton.visible);
+        }
+        
+        [Test]
+        public void Show_CorrectLabel_LocalFolder()
+        {
+            SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Local, "name", "1.0.0")});
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.UpToDate]);
+            Assert.IsFalse(details.UpdateButton.enabledSelf);
+            Assert.IsTrue(details.VersionPopup.enabledSelf);
+        }
+        
+        [Test]
+        public void Show_CorrectLabel_Git()
+        {
+            SetListPackages(new List<PackageInfo> {PackageSets.Instance.Single(PackageSource.Git, "name", "1.0.0")});
+
+            var details = Container.Q<PackageDetails>("detailsGroup");
+            Assert.IsTrue(details.UpdateButton.text == PackageDetails.PackageActionVerbs[(int)PackageDetails.PackageAction.Git]);
+            Assert.IsFalse(details.UpdateButton.enabledSelf);
+            Assert.IsFalse(details.VersionPopup.enabledSelf);
+        }
+        
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..15cc05a8ba96e97d961c9a1c84b69c578c6ba9a7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageDetailsTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d028fbbad11524d13a069f495ddcf01c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a0562fce1902f41024af74c0a1e9ef5f625cb585
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs
@@ -0,0 +1,211 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine.Experimental.UIElements;
+using NUnit.Framework;
+
+namespace UnityEditor.PackageManager.UI.Tests
+{
+    internal class PackageManagerWindowTests : UITests<PackageManagerWindow>
+    {
+        // Filter change shows correct result
+        private Action<IEnumerable<Package>> onPackageChangedEvent;    // TODO: We need to have a discussion on event de-registration
+        private bool showPreviewPackagesPreviousValue;
+
+        [SetUp]
+        public void Setup()
+        {
+            showPreviewPackagesPreviousValue = PackageManagerPrefs.ShowPreviewPackages;
+            PackageManagerPrefs.ShowPreviewPackages = true;
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);
+            SetListPackages(Enumerable.Empty<PackageInfo>());
+            SetSearchPackages(Enumerable.Empty<PackageInfo>());
+            Factory.ResetOperations();
+        }
+
+        [TearDown]
+        public void TearDown()
+        {
+            PackageCollection.Instance.OnPackagesChanged -= onPackageChangedEvent;
+            PackageManagerPrefs.ShowPreviewPackages = showPreviewPackagesPreviousValue;
+        }
+
+        [Test]
+        public void When_Default_FirstPackageUIElement_HasSelectedClass()
+        {
+            onPackageChangedEvent = packages =>
+            {
+                var package = Container.Query(null, "package").First();
+
+                Assert.NotNull(package);
+                Assert.IsTrue(package.ClassListContains(PackageItem.SelectedClassName));
+            };
+            
+            PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
+            SetListPackages(PackageSets.Instance.Many(5, true));
+        }
+
+        [Test]
+        public void When_PackageCollection_Updates_PackageList_Updates()
+        {
+            var packages = PackageSets.Instance.Outdated();
+            var current = packages.ToList().First();
+            var latest = packages.ToList().Last();
+
+            SetListPackages(packages);
+            Factory.AddOperation = new MockAddOperation(Factory, latest);
+
+            var package = PackageCollection.Instance.GetPackageByName(current.Name);
+
+            onPackageChangedEvent = newpackages =>
+            {
+                package = PackageCollection.Instance.GetPackageByName(current.Name);
+
+                Assert.IsTrue(package.Current.PackageId == latest.PackageId);
+
+                var packageItem = Container.Query(null, "package").Build().First();
+                var label = packageItem.Q<Label>("packageName");
+                var version = packageItem.Q<Label>("packageVersion");
+                var state = packageItem.Q<Label>("packageState");
+                var hasOutdatedClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Outdated));
+                Assert.IsTrue(latest.Name == string.Format("com.unity.{0}", label.text));
+                Assert.IsTrue(latest.Version == version.text);
+                Assert.IsFalse(hasOutdatedClass);
+            };
+            
+            package.AddSignal.OnOperation += operation =>
+            {
+                operation.OnOperationSuccess += packageInfo =>
+                {
+                    PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
+                };
+            };
+
+            package.Update();
+        }
+
+        [Test]
+        public void When_PackageCollection_Update_Fails_Package_Stay_Current()
+        {
+            var packages = PackageSets.Instance.Outdated();
+            var current = packages.ToList().First();
+            var latest = packages.ToList().Last();
+
+            SetListPackages(packages);
+
+            var error = MakeError(ErrorCode.Unknown, "Fake error");
+            Factory.AddOperation = new MockAddOperation(Factory, latest);
+            Factory.AddOperation.ForceError = error;
+
+            var package = PackageCollection.Instance.GetPackageByName(current.Name);
+
+            package.AddSignal.OnOperation += operation =>
+            {
+                operation.OnOperationError += operationError => { Assert.IsTrue(error == operationError); };
+                operation.OnOperationFinalized += () =>
+                {
+                    Assert.IsTrue(package.Current.PackageId ==
+                                  current.PackageId); // Make sure package hasn't been upgraded
+
+                    var packageItem = Container.Query(null, "package").Build().First();
+                    var label = packageItem.Q<Label>("packageName");
+                    var version = packageItem.Q<Label>("packageVersion");
+                    var state = packageItem.Q<Label>("packageState");
+                    var hasErrorClass = state.ClassListContains(PackageItem.GetIconStateId(PackageState.Error));
+                    Assert.IsTrue(current.Name == string.Format("com.unity.{0}", label.text));
+                    Assert.IsTrue(current.Version == version.text);
+                    Assert.IsTrue(hasErrorClass);
+                };
+            };
+
+            package.Update();
+        }
+
+        [Test]
+        public void When_PackageCollection_Remove_PackageLists_Updated()
+        {
+            var packages = PackageSets.Instance.Many(5);
+            var current = packages.ToList().First();
+
+            SetListPackages(packages);
+            var package = PackageCollection.Instance.GetPackageByName(current.Name);
+            Assert.IsNotNull(package);
+
+            onPackageChangedEvent = allPackages =>
+            {
+                package = PackageCollection.Instance.GetPackageByName(current.Name);
+                Assert.IsNull(package);
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
+
+            package.Remove();
+            PackageCollection.Instance.FetchListOfflineCache(true);
+        }
+
+        [Test]
+        public void When_PackageCollection_Remove_Fails_PackageLists_NotUpdated()
+        {
+            var packages = PackageSets.Instance.Many(5);
+            var current = packages.ToList().First();
+
+            var error = MakeError(ErrorCode.Unknown, "Fake error");
+            Factory.RemoveOperation = new MockRemoveOperation(Factory) {ForceError = error};
+            SetListPackages(packages);
+            var package = PackageCollection.Instance.GetPackageByName(current.Name);
+            Assert.IsNotNull(package);
+
+            package.RemoveSignal.OnOperation += operation =>
+            {
+                operation.OnOperationError += operationError => { Assert.AreEqual(error, operationError); };
+                operation.OnOperationFinalized += () =>
+                {
+                    package = PackageCollection.Instance.GetPackageByName(current.Name);
+                    Assert.IsNotNull(package);
+                };
+            };
+
+            package.Remove();
+        }
+        
+        [Test] 
+        public void When_Filter_Changes_Shows_Correct_List()
+        {
+            var packagesLocal = PackageSets.Instance.Many(2);
+            var packagesAll = PackageSets.Instance.Many(5);
+
+            SetListPackages(packagesLocal);
+            SetSearchPackages(packagesAll);
+
+            onPackageChangedEvent = packages =>
+            {
+                foreach (var package in packagesAll)
+                {
+                    Assert.IsTrue(packages.Any(updatePackage => updatePackage.Current == package));
+                }
+            };
+
+            PackageCollection.Instance.OnPackagesChanged += onPackageChangedEvent;
+            
+            PackageCollection.Instance.SetFilter(PackageFilter.All);
+        }
+
+        [Test]
+        public void ListPackages_UsesCache()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.Local);                            // Set filter to use list
+            SetListPackages(PackageSets.Instance.Many(2));
+            
+            Assert.IsTrue(PackageCollection.Instance.LatestListPackages.Any());            // Make sure packages are cached
+        }
+
+        [Test]
+        public void SearchPackages_UsesCache()
+        {
+            PackageCollection.Instance.SetFilter(PackageFilter.All);                                // Set filter to use search
+            SetSearchPackages(PackageSets.Instance.Many(2));
+            
+            Assert.IsTrue(PackageCollection.Instance.LatestSearchPackages.Any());     // Make sure packages are cached
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..487aa14cfed27b0b02321732937c56f457dd24e0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/UI/PackageManagerWindowTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 063b1587caa4a47f396741f4e69d108c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..bc291f04367f834f9c473c91d3a5e5377783fab7
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef
@@ -0,0 +1,13 @@
+{
+    "name": "Unity.PackageManagerUI.EditorTests",
+    "references": [
+        "Unity.PackageManagerUI.Editor"
+    ],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b59c94f88ff4b487dd685b73655ec24f7501b0c0
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Tests/Editor/Unity.PackageManagerUI.EditorTests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5afb9687033af4bca957216add3fe854
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd76f73c89ba7a839ce7646d268e8023994dfc35
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md	
@@ -0,0 +1,7 @@
+This package contains third-party software components governed by the license(s) indicated below:
+
+Component Name: Semver
+
+License Type: "MIT"
+
+[SemVer License](https://github.com/maxhauser/semver/blob/master/License.txt)
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad2d342683ea2afef24056e711e8363c2a53d991
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/Third Party Notices.md.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 536c0048c80e8407084e29942e15685b
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4902ca76122d4048e2d9c695d1141580ff69f448
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json
@@ -0,0 +1,13 @@
+{
+  "name": "com.unity.package-manager-ui",
+  "displayName": "Package Manager UI",
+  "version": "2.0.8",
+  "unity": "2018.3",
+  "description": "Use the Unity Package Manager user interface to manage a Project's packages and discover new packages.\n\nFor more information, click the 'View documentation' link above. ",
+  "dependencies": {},
+  "repository": {
+    "type": "git",
+    "url": "git@github.cds.internal.unity3d.com:unity/com.unity.package-manager-ui.git",
+    "revision": "cf3d6baaa1e1750beae1757866ccd075239e89a3"
+  }
+}
diff --git a/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json.meta b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..121ac00025cbdbd69a11bc20329fe4c02cce6761
--- /dev/null
+++ b/Library/PackageCache/com.unity.package-manager-ui@2.0.8/package.json.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6d6f82a762acb4417b895d3babc790f9
+timeCreated: 1501782804
+licenseType: Pro
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md b/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f29e450a0fffd9fc21af7803f7302a482be16e6
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md
@@ -0,0 +1,13 @@
+[2.0.0] 2018-02-07
+Fixed issue with IAP_PURCHASING flag not set on project load
+
+[2.0.1] 2018-02-14
+Fixed issue where importing the asset store package would fail due to importer settings.
+
+[2.0.2] 2018-06-12
+Fixed issue where TypeLoadException occured while using "UnityEngine.Purchasing" because SimpleJson was not found. fogbugzId: 1035663/
+
+[2.0.3] 2018-06-14
+Fixed issue related to 2.0.2 that caused new projects to not compile in the editor. 
+Engine dll is enabled for editor by default.
+Removed meta data that disabled engine dll for windows store.
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d24120480e38d05690cd36ea988d26e0a0d936ba
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/CHANGELOG.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bb15697a279504a90b825c44dc355047
+timeCreated: 1518046607
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5d83eb85d3628a1650aa73814e9cd6adb9e2d673
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 30aa3194afbe44a72aa7ec76cb2bab8a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md
new file mode 100644
index 0000000000000000000000000000000000000000..b64496cb805a00e622243351fa054007c7586530
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md
@@ -0,0 +1,16 @@
+# Unity In-App Purchasing (IAP)
+
+Unity IAP makes it easy to implement in-app purchases in your application across the most popular App stores.
+
+Supported platforms include:
+
+* iOS App Store
+* Mac App Store
+* Google Play
+* Universal Windows Platform
+* Amazon Appstore
+* Samsung Galaxy Apps
+* Tizen Store
+* CloudMoolah Store
+* Facebook Gameroom
+* Xiaomi Mi Game Pay
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c58134d4ad641e5172cd9e91c5a2ef598acaea4f
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Documentation/IAP.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: be4b06d1ee51e4ac2a01a0e499d4c214
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Editor.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fa8ed063d8208a2eb20d299785e405c03801e1aa
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d929147d9f78c487397abb40f2c257b0
+folderAsset: yes
+timeCreated: 1492551707
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll
new file mode 100644
index 0000000000000000000000000000000000000000..de3e3b42a3fd6c1a5381e9c464334a0373845f21
Binary files /dev/null and b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll differ
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..8edff568756ef49089bbb7d97f10411238e5df4e
Binary files /dev/null and b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c8920939ec3319300acbb83434a3cd49c2c0a22e
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.mdb.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9de9e8523c82543c5b3e40a4b51aa2c9
+timeCreated: 1492551707
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a9664b7a0992aaa86e73952b74dcb6c0ce6d7097
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/Editor/UnityEditor.Purchasing.dll.meta
@@ -0,0 +1,25 @@
+fileFormatVersion: 2
+guid: f1045c695c5bf4fb7b8509687bc60fc0
+timeCreated: 1492551710
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 1
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    Any:
+      enabled: 0
+      settings: {}
+    Editor:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+    WindowsStoreApps:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/License.md b/Library/PackageCache/com.unity.purchasing@2.0.3/License.md
new file mode 100644
index 0000000000000000000000000000000000000000..27c17ac40d9d229c9ba20d9aafa47f6c8cc820d7
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/License.md
@@ -0,0 +1,32 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*. 
+
+    3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+    3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. 
+
+    3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. 
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
+
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/License.md.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/License.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a183744e2ccfa1a3922a109a0a5b4c60a53603ab
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/License.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 65d58d50c3db54f979b1ffae3777d74b
+timeCreated: 1504642585
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/README.md b/Library/PackageCache/com.unity.purchasing@2.0.3/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..bfc2ab8dd4693ba3753f4c12f35f39e5e5692696
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/README.md
@@ -0,0 +1,9 @@
+# Unity In App Purchasing
+
+Implementation of the Unity In App Purchasing API.
+
+## Release Notes
+
+- Adding Readme file
+- Adding local plugin importer callbacks.
+- Removing Bintray references in package.json
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/README.md.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/README.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8a63b28b760ef5bf39ea750a19e07ff3dbf2e927
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/README.md.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 90791303b72ec4ae198f99d637dfdf6c
+timeCreated: 1493316726
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2131fff7fbe6189291da0f4fc48d1d7a977fb238
Binary files /dev/null and b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll differ
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb
new file mode 100644
index 0000000000000000000000000000000000000000..3c58e6a20f435d2d2f9a63121f58d493596d9713
Binary files /dev/null and b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb differ
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ec41327b3b46aefde0c3de406ac75740b5331a41
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.mdb.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86c18994495874297b469aaa57ef9b44
+timeCreated: 1492551707
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ec8ee090943dd8efd827cf8250aa9eb03e76e366
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/UnityEngine.Purchasing.dll.meta
@@ -0,0 +1,27 @@
+fileFormatVersion: 2
+guid: b5f4343795a0e4626ac1fe4a9e6fce59
+timeCreated: 1491256195
+licenseType: Pro
+PluginImporter:
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 1
+  platformData:
+    data:
+      first:
+        Any: 
+      second:
+        enabled: 1
+        settings: {}
+    data:
+      first:
+        Editor: Editor
+      second:
+        enabled: 1
+        settings:
+          DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/package.json b/Library/PackageCache/com.unity.purchasing@2.0.3/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..55d9f7d8bb34e0c06cc297724b1e43e49f8925cc
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/package.json
@@ -0,0 +1,13 @@
+{
+  "name": "com.unity.purchasing",
+  "displayName": "In App Purchasing",
+  "version": "2.0.3",
+  "unity": "2018.1",
+  "description": "Unity IAP supports the iOS, Mac, tvOS, Google Play, Facebook Gameroom, Windows, Amazon, Samsung Galaxy, Tizen, Cloud Moolah MOO, Xiaomi Mi Game Pay App Stores.\n\nWith Unity IAP, setting up in-app purchases for your game across multiple app stores has never been easier.\n\nUse one common API to access all stores for free. With just a few lines of code, you can fully understand and optimize your in-game economy.\n\nUnity IAP automatically couples with Unity Analytics enabling you to monitor and act on trends in your revenue and purchase data across multiple platforms.\n\nIncludes client-side receipt validation for Apple, Google Play, and Xiaomi Mi Game Pay.",
+  "keywords": [
+    "purchasing",
+    "iap",
+    "unity"
+  ],
+  "license" : "Unity Companion Package License v1.0"
+}
diff --git a/Library/PackageCache/com.unity.purchasing@2.0.3/package.json.meta b/Library/PackageCache/com.unity.purchasing@2.0.3/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c291d8550ce509106a6931700d7b70795154e538
--- /dev/null
+++ b/Library/PackageCache/com.unity.purchasing@2.0.3/package.json.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 44f39a74ca5ee4bf5936b17e901f251c
+timeCreated: 1491258786
+licenseType: Pro
+TextScriptImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/.gitlab-ci.yml b/Library/PackageCache/com.unity.textmeshpro@1.4.1/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..45a43a13b1c3da8465033532dfcd0b56f2ad113f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/.gitlab-ci.yml
@@ -0,0 +1,12 @@
+image: node:6.10.0
+
+stages:
+  - push_to_packman_staging
+
+push_to_packman_staging:
+  stage: push_to_packman_staging
+  only:
+    - tags
+  script:
+    - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc
+    - npm publish
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md b/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..ddd61f4cc80b27031583a8854033577f909e9954
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md
@@ -0,0 +1,171 @@
+# Changelog
+These are the release notes for the TextMesh Pro UPM package which was first introduced with Unity 2018.1. Please see the following link for the Release Notes for prior versions of TextMesh Pro. http://digitalnativestudios.com/forum/index.php?topic=1363.0
+
+## [1.4.1] - 2019-05-08
+### Changes
+- Improved handling of automatic Font Asset upgrade to version 1.1.0 which is required to support the new Dynamic SDF system. See Case #1144858
+- Made release compatible with .Net 3.5 Scripting Runtime.
+- Added support for Stereo rendering to the TMP SDF Overlay shaders.
+- Fixed Caret positioning issue when using IME. Case #1146626
+
+## [1.4.0] - 2019-03-07
+### Changes
+- Same release as 1.4.0-preview.3a.
+
+## [1.4.0-preview.3a] - 2019-02-28
+### Changes
+- Improved performance of the Project Files GUID Remapping Tool.
+- Fixed an issue with the TMP_FontAsset.TryAddCharacters() functions which was resulting in an error when added characters exceeded the capacity of the atlas texture.
+- Updated TMP_FontAsset.TryAddCharacters functions to add new overloads returning list of characters that could not be added.
+- Added function in OnEnable of FontAsset Editor's to clean up Fallback list to remove any null / empty entries.
+- Added support for Stereo rendering to the TMP Distance Field and Mobile Distance Field shaders.
+
+## [1.4.0-preview.2a] - 2019-02-14
+### Changes
+- Fixed an issue with SDF Scale handling where the text object would not render correctly after the object scale had been set to zero.
+- Fixed an issue with the TMP_UpdateManager where text objects were not getting unregistered correctly.
+- Any changes to Font Asset Creation Settings' padding, atlas width and / or atlas height will now result in all Material Presets for the given font asset to also be updated.
+- Added new section in the TMP Settings related to the new Dynamic Font System. 
+- Added new property in the Dynamic Font System section to determine if OpenType Font Features will be retrieved from source font files at runtime as new characters are added to font assets. Glyph Adjustment Data (Kerning) is the only feature currently supported.
+- Fix an issue where font assets created at runtime were not getting their asset version number set to "1.1.0".
+- Improved parsing of the text file used in the Font Asset Creator and "Characters from File" option to handle UTF16 "\u" and UTF32 "\U" escape character sequences.
+- Fixed a Null Reference Error (NRE) that could occur when using the &ltfont&gt tag with an invalid font name followed by the &ltsprite&gt tag.
+- The Glyph Adjustment Table presentation and internal data structure has been changed to facilitate the future addition of OpenType font features. See https://forum.unity.com/threads/version-1-4-0-preview-with-dynamic-sdf-for-unity-2018-3-now-available.622420/#post-4206595 for more details.
+- Fixed an issue with the &ltrotate&gt tag incorrectly affecting character spacing. 
+
+## [1.4.0-preview.1] - 2019-01-30
+### Changes
+- Renamed TMPro_FontUtilities to TMP_FontAssetCommon to more accurately reflect the content of this file.
+- Accessing the TextMesh Pro Settings via the new Edit - Settings menu when TMP Essential Resources have not yet been imported in the project will no longer open a new window to provide the options to import these resources.
+- Fixed an issue where using int.MaxValue, int.MinValue, float.MaxValue and float.MinValue in conjunction with SetText() would display incorrect numerical values. Case #1078521.
+- Added public setter to the TMP Settings' missingGlyphCharacter to allow changing which character will be used for missing characters via scripting.
+- Fixed a potential Null Reference Exception related to loading the Default Style Sheet.
+- Added compiler conditional to TMP_UpdateManager.cs to address changes to SRP.
+- Improved the &ltmargin&gt tag to make it possible to define both left and right margin values. Example: &ltmargin left=10% right=10px&gt.
+- Added new menu option to allow the quick creation of a UI Button using TMP. New menu option is located in Create - UI - Button (TextMeshPro).
+- Renamed TMP related create menu options.
+- Fixed TMP object creation handling when using Prefab isolation mode. Case #1077392
+- Fixed another issue related to Prefabs where some serialized properties of the text object would incorrectly show up in the Overrides prefab options. Case #1093101
+- Fixed issue where changing the Sorting Layer or Sorting Order of a <TextMeshPro> object would not dirty the scene. Case #1069776
+- Fixed a text alignment issue when setting text alignment on disabled text objects. Case #1047771
+- Fixed an issue where text object bounds were not set correctly on newly created text objects or in some cases when setting the text to null or string.empty. Case #1093388
+- Fixed an issue in the IntToString() function that could result in Index Out Of Bounds error. Case #1102007
+- Changed the TMP_InputField IsValidChar function to protected virtual.
+- The "Allow Rich Text Editing" property of the TMP_InputField is now set to false by default.
+- Added new option to the Sprite Asset context menu to make it easier to update sprite glyphs edited via the Unity Sprite Editor.
+- Added new Sharpness slider in the Debug section of the SDF Material inspector.
+- Fixed an error that would occur when using the context menu Reset on text component. Case #1044726
+- Fixed issue where CharacterInfo.index would be incorrect as a result of using Surrogate Pairs in the text. Case #1037828
+- The TMP_EditorPanel and TMP_UiEditorPanel now have their "UseForChildren" flag set to true to enable user / custom inspectors to inherit from them.
+- Fixed an issue where rich text tags using pixel (px) or font units (em) were not correctly accounting for orthographic camera mode. This change only affects the normal TMP text component.
+- Fixed an inspector issue related to changes to the margin in the TMP Extra Settings panel. Case #1114253
+- Added new property to Glyph Adjustment Pairs which determines if Character Spacing Adjustments should affect the given pair.
+- Updated the Glyph Adjustment Table where ID now represents the unicode (hex) value for the character instead of its decimal value.
+- Added new SetValueWithoutNotify() function to TMP_DropDown and SetTextWithoutNotify() function to TMP_InputField allowing these to be set without triggering OnValueChanged event.
+- Geometry buffer deallocation which normally takes place when current allocations exceed those of the new text by more than 256 characters will no longer occur if the new text is set to null or string.empty.
+- Fixed a minor issue where the underline SDF scale would be incorrect when the underline text sequence contained normal size characters and ended with a subscript or superscript character.
+- Fixed an error that would occur when using the Reset Context menu on a Material using the SDF Surface or Mobile SDF Surface Shaders. Case #1122279
+- Resolved a Null Reference Error that would appear when cycling through the text overflow modes. Case #1121624
+
+## [1.3.0] - 2018-08-09
+### Changes
+- Revamped UI to conform to Unity Human Interface Guidelines.
+- Updated the title text on the Font Asset Creator window tab to "Font Asset Creator".
+- Using TMP_Text.SetCharArray() with an empty char[] array will now clear the text.
+- Made a small improvement to the TMP Input Field when using nested 2d RectMasks.
+- Renamed symbol defines used by TMP to append TMP_ in front of the define to avoid potential conflicts with user defines.
+- Improved the Project Files GUID Remapping tool to allow specifying a target folder to scan.
+- Added the ability to cancel the scanning process used by the Project Files GUID Remapping tool.
+- Moved TMP Settings to universal settings window in 2018.3 and above.
+- Changing style sheet in the TMP Settings will now be reflected automatically on existing text objects in the editor.
+- Added new function TMP_StyleSheet.UpdateStyleSheet() to update the internal reference to which style sheet text objects should be using in conjunction with the style tag.
+
+## [1.2.4] - 2018-06-10
+### Changes
+- Fixed a minor issue when using Justified and Flush alignment in conjunction with \u00A0.
+- The Font Asset creationSettings field is no longer an Editor only serialized field.
+
+## [1.2.3] - 2018-05-29
+### Changes
+- Added new bitmap shader with support for Custom Font Atlas texture. This shader also includes a new property "Padding" to provide control over the geometry padding to closely fit a modified / custom font atlas texture.
+- Fixed an issue with ForceMeshUpdate(bool ignoreActiveState) not being handled correctly.
+- Cleaned up memory allocations from repeated use of the Font Asset Creator.
+- Sprites are now scaled based on the current font instead of the primary font asset assigned to the text object.
+- It is now possible to recall the most recent settings used when creating a font asset in the Font Asset Creator.
+- Newly created font assets now contain the settings used when they were last created. This will make the process of updating / regenerating font assets much easier.
+- New context menu "Update Font Asset" was added to the Font Asset inspector which will open the Font Asset Creator with the most recently used settings for that font asset.
+- New Context Menu "Create Font Asset" was added to the Font inspector panel which will open the Font Asset Creator with this source font file already selected.
+- Fixed 3 compiler warnings that would appear when using .Net 4.x.
+- Modified the TMP Settings to place the Missing Glyph options in their own section.
+- Renamed a symbol used for internal debugging to avoid potential conflicts with other user project defines.
+- TMP Sprite Importer "Create Sprite Asset" and "Save Sprite Asset" options are disabled unless a Sprite Data Source, Import Format and Sprite Texture Atlas are provided.
+- Improved the performance of the Project Files GUID Remapping tool.
+- Users will now be prompted to import the TMP Essential Resources when using the Font Asset Creator if such resources have not already been imported.
+
+## [1.2.2] - 2018-03-28
+### Changes
+- Calling SetAllDirty() on a TMP text component will now force a regeneration of the text object including re-parsing of the text.
+- Fixed potential Null Reference Exception that could occur when assigning a new fallback font asset.
+- Removed public from test classes.
+- Fixed an issue where using nested links (which doesn't make sense conceptually) would result in an error. Should accidental use of nested links occurs, the last / most nested ends up being used.
+- Fixed a potential text alignment issue where an hyphen at the end of a line followed by a new line containing a single word too long to fit the text container would result in miss alignment of the hyphen.
+- Updated package license.
+- Non-Breaking Space character (0xA0) will now be excluded from word spacing adjustments when using Justified or Flush text alignment.
+- Improved handling of Underline, Strikethrough and Mark tag with regards to vertex color and Color tag alpha.
+- Improved TMP_FontAsset.HasCharacter(char character, bool searchFallbacks) to include a recursive search of fallbacks as well as TMP Settings fallback list and default font asset.
+- The &ltgradient&gt tag will now also apply to sprites provided the sprite tint attribute is set to a value of 1. Ex. &ltsprite="Sprite Asset" index=0 tint=1&gt.
+- Updated Font Asset Creator Plugin to allow for cancellation of the font asset generation process.
+- Added callback to support the Scriptable Render Pipeline (SRP) with the normal TextMeshPro component.
+- Improved handling of some non-breaking space characters which should not be ignored at the end of a line.
+- Sprite Asset fallbacks will now be searched when using the &ltsprite&gt tag and referencing a sprite by Unicode or by Name.
+- Updated EmojiOne samples from https://www.emojione.com/ and added attribution.
+- Removed the 32bit versions of the TMP Plugins used by the Font Asset Creator since the Unity Editor is now only available as 64bit.
+- The isTextTruncated property is now serialized.
+- Added new event handler to the TMP_TextEventHandler.cs script included in Example 12a to allow tracking of interactions with Sprites.
+
+## [1.2.1] - 2018-02-14
+### Changes
+- Package is now backwards compatible with Unity 2018.1.
+- Renamed Assembly Definitions (.asmdef) to new UPM package conventions.
+- Added DisplayName for TMP UPM package.
+- Revised Editor and Playmode tests to ignore / skip over the tests if the required resources are not present in the project.
+- Revised implementation of Font Asset Creator progress bar to use Unity's EditorGUI.ProgressBar instead of custom texture.
+- Fixed an issue where using the material tag in conjunction with fallback font assets was not handled correctly.
+- Fixed an issue where changing the fontStyle property in conjunction with using alternative typefaces / font weights would not correctly trigger a regeneration of the text object.
+
+## [1.2.0] - 2018-01-23
+### Changes
+- Package version # increased to 1.2.0 which is the first release for Unity 2018.2.
+
+## [1.1.0] - 2018-01-23
+### Changes
+- Package version # increased to 1.1.0 which is the first release for Unity 2018.1. 
+
+## [1.0.27] - 2018-01-16
+### Changes
+- Fixed an issue where setting the TMP_InputField.text property to null would result in an error.
+- Fixed issue with Raycast Target state not getting serialized properly when saving / reloading a scene.
+- Changed reference to PrefabUtility.GetPrefabParent() to PrefabUtility.GetCorrespondingObjectFromSource() to reflect public API change in 2018.2
+- Option to import package essential resources will only be presented to users when accessing a TMP component or the TMP Settings file via the project menu.
+
+## [1.0.26] - 2018-01-10
+### Added
+- Removed Tizen player references in the TMP_InputField as the Tizen player is no longer supported as of Unity 2018.1.
+
+## [1.0.25] - 2018-01-05
+### Added
+- Fixed a minor issue with PreferredValues calculation in conjunction with using text auto-sizing.
+- Improved Kerning handling where it is now possible to define positional adjustments for the first and second glyph in the pair.
+- Renamed Kerning Info Table to Glyph Adjustment Table to better reflect the added functionality of this table.
+- Added Search toolbar to the Glyph Adjustment Table.
+- Fixed incorrect detection / handling of Asset Serialization mode in the Project Conversion Utility.
+- Removed SelectionBase attribute from TMP components.
+- Revised TMP Shaders to support the new UNITY_UI_CLIP_RECT shader keyword which can provide a performance improvement of up to 30% on some devices.
+- Added TMP_PRESENT define as per the request of several third party asset publishers.
+
+## [1.0.23] - 2017-11-14
+### Added
+- New menu option added to Import Examples and additional content like Font Assets, Materials Presets, etc for TextMesh Pro. This new menu option is located in "Window -> TextMeshPro -> Import Examples and Extra Content".
+- New menu option added to Convert existing project files and assets created with either the Source Code or DLL only version of TextMesh Pro. Please be sure to backup your project before using this option. The new menu option is located in "Window -> TextMeshPro -> Project Files GUID Remapping Tool".
+- Added Assembly Definitions for the TMP Runtime and Editor scripts.
+- Added support for the UI DirtyLayoutCallback, DirtyVerticesCallback and DirtyMaterialCallback.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..edf5c3279a498216ee712ad880e645fad22a7864
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/CHANGELOG.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 22464cf7ab0243a6bf9c79851183b002
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md
new file mode 100644
index 0000000000000000000000000000000000000000..8f8c09260fff39d097f546f8685648d5f6685e26
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md
@@ -0,0 +1,35 @@
+# **_TextMesh Pro User Guide_**
+
+#### **Overview**
+This User Guide was designed to provide first time users of TextMesh Pro with a basic overview of the features and functionality of the tool.
+
+#### **Installation**
+The TextMesh Pro UPM package is already included with the Unity Editor and as such does not require installation. TextMesh Pro "TMP" does however require adding resources to your project which are essential for using TextMesh Pro. 
+
+To import the "*TMP Essential Resources*", please use the "*Window -> TextMeshPro -> Import TMP Essential Resources*" menu option. These resources will be added at the root of your project in the "*TextMesh Pro*" folder.
+
+The TextMesh Pro package also includes additional resources and examples that will make discovering and learning about TextMesh Pro's powerful features easier. It is strongly recommended that first time users import these additional resources. 
+
+To import the "*TMP Examples & Extras*", please use the "*Window -> TextMeshPro -> Import TMP Examples & Extras*" menu option. These resources will also be added in the same "*TextMesh Pro*" folder inside your project. 
+
+
+#### **Quick Start**
+There are two TextMesh Pro components available. The first TMP text component is of type &lt;TextMeshPro&gt; and designed to work with the MeshRenderer. This component is an ideal replacement for the legacy TextMesh component. 
+
+To add a new &lt;TextMeshPro&gt; text object, go to: “*GameObject->3D Object->TextMeshPro Text*”. 
+
+The second TMP text component is of type  &lt;TextMeshProUGUI&gt; and designed to work with the CanvasRenderer and Canvas system. This component is an ideal replacement for the UI.Text component. 
+
+To add a new &lt;TextMeshProUGUI&gt; text object, go to: “*GameObject->UI->TextMeshPro Text*”. 
+
+You may also wish to watch this [Getting Started](https://youtu.be/olnxlo-Wri4) short video which covers this topic.
+
+We strongly recommend that you also watch the [Font Asset Creation](https://youtu.be/qzJNIGCFFtY) video as well as the [Working with Material Presets](https://youtu.be/d2MARbDNeaA) as these two topics is also key to working and getting the most out of TextMesh Pro. 
+
+As mentionned in the Installation section of this guide, it is recommended that you import the "*TMP Examples & Extras*" and take the time to explore each of the examples as they provide a great overview of the functionality of the tool and the many text layout and [rich text tags](http://digitalnativestudios.com/textmeshpro/docs/rich-text/) available in TextMesh Pro.
+
+#### **Support & API Documentation**
+Should you have questions or require assistance, please visit the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section of the Unity forum as well as the [TextMesh Pro User Forum](http://digitalnativestudios.com/forum/index.php) where you will find additional information, [Video Tutorials](http://digitalnativestudios.com/forum/index.php?board=4.0) and [FAQ](http://digitalnativestudios.com/forum/index.php?topic=890.0). In the event you are unable to find the information you seek, always feel free to post on the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section user forum.
+
+[Online Documentation](http://digitalnativestudios.com/textmeshpro/docs/) is also available on TextMesh Pro including Rich Text tags, Shaders, Scripting API and more.
+
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8c72f725584c84d05172be1292fa9cba7066f006
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Documentation~/TextMeshPro.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ca77d26d10b9455ca5a4b22c93be2a31
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7c07b0070aa1530e77c0e1c8d371532570e82c65
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d1a0a27327b54c3bac52a08929c33f81
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f2596c789ed19b773124bf37a109e8a38a63bfd7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e93ec7eb6de342aabd156833e253f838
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd
new file mode 100644
index 0000000000000000000000000000000000000000..93f5a2cba4edda006da1d1611ce610dfd6d1c55f
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7bdb473e3d381d59d2d3fa9cd099abc5282b443b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta	
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: a7ec9e7ad8b847b7ae4510af83c5d868
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 7
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 1
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -2
+  maxTextureSize: 128
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: 1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 2
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Standalone
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: iPhone
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: 2
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Android
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: Windows Store Apps
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  - serializedVersion: 2
+    buildTarget: WebGL
+    maxTextureSize: 128
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 1
+  pSDShowRemoveMatteOption: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd
new file mode 100644
index 0000000000000000000000000000000000000000..2fb1164dc57a10989f156c22d43ac8e7fd4c71ed
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bd64ad7dedaa00a257c3b10e7e0b16ca8a91dbe2
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta	
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: ee148e281f3c41c5b4ff5f8a5afe5a6c
+timeCreated: 1463559213
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 128
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd
new file mode 100644
index 0000000000000000000000000000000000000000..f0360d349d07234742b64e274c4c2d6ae2d17554
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eb2e1ce240c7554dd178a963c60efcd77148ec8c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta	
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f
+timeCreated: 1457860876
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 128
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd
new file mode 100644
index 0000000000000000000000000000000000000000..7036296ea5331b80315ac29da27250ee2ad38572
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a22cdf1c9fe724c47d21221d3de38b94f56d4b13
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta	
@@ -0,0 +1,57 @@
+fileFormatVersion: 2
+guid: ec7c645d93308c04d8840982af12101e
+timeCreated: 1463559213
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 128
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd
new file mode 100644
index 0000000000000000000000000000000000000000..3cc41630a761fd8ff6f789a03b443350be9970c4
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..623993d2f6b96cb8e28514da51e6d878a7717eab
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 2fd6421f253b4ef1a19526541f9ffc0c
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 128
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders.meta
new file mode 100644
index 0000000000000000000000000000000000000000..95efe2ba9a8506a1a77a37beac403932c2b4681e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2da27f5fe80a3a549ac7331d9f52f5f0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc
new file mode 100644
index 0000000000000000000000000000000000000000..2e962588cf965bdfa3cf1e0fe578d2797b9342cd
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc	
@@ -0,0 +1,85 @@
+// UI Editable properties
+uniform sampler2D	_FaceTex;					// Alpha : Signed Distance
+uniform float		_FaceUVSpeedX;
+uniform float		_FaceUVSpeedY;
+uniform fixed4		_FaceColor;					// RGBA : Color + Opacity
+uniform float		_FaceDilate;				// v[ 0, 1]
+uniform float		_OutlineSoftness;			// v[ 0, 1]
+
+uniform sampler2D	_OutlineTex;				// RGBA : Color + Opacity
+uniform float		_OutlineUVSpeedX;
+uniform float		_OutlineUVSpeedY;
+uniform fixed4		_OutlineColor;				// RGBA : Color + Opacity
+uniform float		_OutlineWidth;				// v[ 0, 1]
+
+uniform float		_Bevel;						// v[ 0, 1]
+uniform float		_BevelOffset;				// v[-1, 1]
+uniform float		_BevelWidth;				// v[-1, 1]
+uniform float		_BevelClamp;				// v[ 0, 1]
+uniform float		_BevelRoundness;			// v[ 0, 1]
+
+uniform sampler2D	_BumpMap;					// Normal map
+uniform float		_BumpOutline;				// v[ 0, 1]
+uniform float		_BumpFace;					// v[ 0, 1]
+
+uniform samplerCUBE	_Cube;						// Cube / sphere map
+uniform fixed4 		_ReflectFaceColor;			// RGB intensity
+uniform fixed4		_ReflectOutlineColor;
+//uniform float		_EnvTiltX;					// v[-1, 1]
+//uniform float		_EnvTiltY;					// v[-1, 1]
+uniform float3      _EnvMatrixRotation;
+uniform float4x4	_EnvMatrix;
+
+uniform fixed4		_SpecularColor;				// RGB intensity
+uniform float		_LightAngle;				// v[ 0,Tau]
+uniform float		_SpecularPower;				// v[ 0, 1]
+uniform float		_Reflectivity;				// v[ 5, 15]
+uniform float		_Diffuse;					// v[ 0, 1]
+uniform float		_Ambient;					// v[ 0, 1]
+
+uniform fixed4		_UnderlayColor;				// RGBA : Color + Opacity
+uniform float		_UnderlayOffsetX;			// v[-1, 1]
+uniform float		_UnderlayOffsetY;			// v[-1, 1]
+uniform float		_UnderlayDilate;			// v[-1, 1]
+uniform float		_UnderlaySoftness;			// v[ 0, 1]
+
+uniform fixed4 		_GlowColor;					// RGBA : Color + Intesity
+uniform float 		_GlowOffset;				// v[-1, 1]
+uniform float 		_GlowOuter;					// v[ 0, 1]
+uniform float 		_GlowInner;					// v[ 0, 1]
+uniform float 		_GlowPower;					// v[ 1, 1/(1+4*4)]
+
+// API Editable properties
+uniform float 		_ShaderFlags;
+uniform float		_WeightNormal;
+uniform float		_WeightBold;
+
+uniform float		_ScaleRatioA;
+uniform float		_ScaleRatioB;
+uniform float		_ScaleRatioC;
+
+uniform float		_VertexOffsetX;
+uniform float		_VertexOffsetY;
+
+//uniform float		_UseClipRect;
+uniform float		_MaskID;
+uniform sampler2D	_MaskTex;
+uniform float4		_MaskCoord;
+uniform float4		_ClipRect;	// bottom left(x,y) : top right(z,w)
+//uniform float		_MaskWipeControl;
+//uniform float		_MaskEdgeSoftness;
+//uniform fixed4		_MaskEdgeColor;
+//uniform bool		_MaskInverse;
+
+uniform float		_MaskSoftnessX;
+uniform float		_MaskSoftnessY;
+
+// Font Atlas properties
+uniform sampler2D	_MainTex;
+uniform float		_TextureWidth;
+uniform float		_TextureHeight;
+uniform float 		_GradientScale;
+uniform float		_ScaleX;
+uniform float		_ScaleY;
+uniform float		_PerspectiveFilter;
+uniform float		_Sharpness;
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e6dcc0a08503a4c7bc7e3d00b3da0d77d588da6e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_Properties.cginc.meta	
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3c6c403084eacec478a1129ce20061ea
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader
new file mode 100644
index 0000000000000000000000000000000000000000..7e28d7453c09c90162ebc02f653d61a7efa575b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader	
@@ -0,0 +1,126 @@
+// Simplified SDF shader:
+// - No Shading Option (bevel / bump / env map)
+// - No Glow Option
+// - Softness is applied on both side of the outline
+
+Shader "Hidden/TextMeshPro/Internal/Distance Field SSD" {
+
+Properties {
+	_FaceColor			("Face Color", Color) = (1,1,1,1)
+	_FaceDilate			("Face Dilate", Range(-1,1)) = 0
+
+	_OutlineSoftness	("Outline Softness", Range(0,1)) = 0.02
+
+	_WeightNormal		("Weight Normal", float) = 0
+	_WeightBold			("Weight Bold", float) = .5
+
+	_MainTex			("Font Atlas", 2D) = "white" {}
+	_TextureWidth		("Texture Width", float) = 512
+	_TextureHeight		("Texture Height", float) = 512
+	_GradientScale		("Gradient Scale", float) = 5
+	_ScaleX				("Scale X", float) = 1
+	_ScaleY				("Scale Y", float) = 1
+	_Sharpness			("Sharpness", Range(-1,1)) = 0
+
+	_VertexOffsetX		("Vertex OffsetX", float) = 0
+	_VertexOffsetY		("Vertex OffsetY", float) = 0
+	
+	_ColorMask			("Color Mask", Float) = 15
+}
+
+SubShader {
+	Tags 
+	{
+		"ForceSupported" = "True"
+	}
+
+	Lighting Off
+	Blend One OneMinusSrcAlpha
+	Cull Off
+	ZWrite Off
+	ZTest Always
+
+	Pass {
+		CGPROGRAM
+		#pragma vertex VertShader
+		#pragma fragment PixShader
+
+		#include "UnityCG.cginc"
+		#include "TMP_Properties.cginc"
+
+		sampler2D _GUIClipTexture;
+		uniform float4x4 unity_GUIClipTextureMatrix;
+
+		struct vertex_t {
+			float4	vertex			: POSITION;
+			float3	normal			: NORMAL;
+			fixed4	color			: COLOR;
+			float2	texcoord0		: TEXCOORD0;
+			float2	texcoord1		: TEXCOORD1;
+		};
+
+		struct pixel_t {
+			float4	vertex			: SV_POSITION;
+			fixed4	faceColor		: COLOR;
+			float2	texcoord0		: TEXCOORD0;
+			float2	clipUV			: TEXCOORD1;
+		};
+
+
+		pixel_t VertShader(vertex_t input)
+		{
+			// Does not handle simulated bold correctly.
+			
+			float4 vert = input.vertex;
+			vert.x += _VertexOffsetX;
+			vert.y += _VertexOffsetY;
+			float4 vPosition = UnityObjectToClipPos(vert);
+
+			float opacity = input.color.a;
+
+			fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor;
+			faceColor.rgb *= faceColor.a;
+
+			// Generate UV for the Clip Texture
+			float3 eyePos = UnityObjectToViewPos(input.vertex);
+			float2 clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0));
+
+			// Structure for pixel shader
+			pixel_t output = {
+				vPosition,
+				faceColor,
+				float2(input.texcoord0.x, input.texcoord0.y),
+				clipUV,
+			};
+
+			return output;
+		}
+
+		half transition(half2 range, half distance)
+        {
+            return smoothstep(range.x, range.y, distance);
+        }
+
+		// PIXEL SHADER
+		fixed4 PixShader(pixel_t input) : SV_Target
+		{
+			half distanceSample = tex2D(_MainTex, input.texcoord0).a;
+            half smoothing = fwidth(distanceSample) * (1 - _Sharpness) + _OutlineSoftness;
+            half contour = 0.5 - _FaceDilate * 0.5;
+            half2 edgeRange = half2(contour - smoothing, contour + smoothing);
+
+			half4 c = input.faceColor;
+            
+            half edgeTransition = transition(edgeRange, distanceSample);
+            c *= edgeTransition;
+
+			c *= tex2D(_GUIClipTexture, input.clipUV).a;
+
+			return c;
+		}
+		ENDCG
+	}
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7845e119410058684a52474111a5585806a04663
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Shaders/TMP_SDF Internal SSD.shader.meta	
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: ce4ec0f498d1b1a4f90fe94e115b6f9a
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d6754b05dc2ffa15b75c1d4d8a521e9c1d517275
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f8e6a2d47aba4c6c9b3c5a72d9f48da5
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd
new file mode 100644
index 0000000000000000000000000000000000000000..8ebaa27aa4aa698b57764149516a0fbdf37dcba2
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ed7250a7b0c27494b2fa2f99804fcddd858bfe4a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: fb5730e24283d0c489e5c7d0bee023d9
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..e598e6d9575f5dafc1c76950e476469c2cf580b6
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1e747b22af0c6f8636038ff231d89d427f57ec7e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/SectionHeader_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: e3b0f810fdea84e40ab4ba20f256f7e8
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd
new file mode 100644
index 0000000000000000000000000000000000000000..3da358a124a74236076524bcc158c646d9004205
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..09deb3c829638e2ed28336d6078e5cb8ad690f09
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 8bc445bb79654bf496c92d0407840a92
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..cf49b6cb024072d87361899040ef58f45cf43679
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..78e14cbacd30e080dd0ad45445cb0bacb9c7861b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 18775b51e3bd42299fd30bd036ea982f
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd
new file mode 100644
index 0000000000000000000000000000000000000000..1f35779e7b6a348c682fc7b90c9c64217c8a2dd8
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8e79b489d68784417fc78df1732a1ad9c8516e9e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: ca51b19024094d1b87f3e07edb0a75fb
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..d8af55bdf7fb23f0a6426ece47a055c00662a81c
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c9a6fc01f2f314760a1c8254956a790e8e797a2
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 585b70cb75dd43efbfead809c30a1731
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd
new file mode 100644
index 0000000000000000000000000000000000000000..7eefe6b2e535cce1ec014aed5919d728044e8fbb
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0455a2fc9e5f2dd449d136fec836c512956dfcb0
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta	
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 0d9a36012a224080966c7b55896aa0f9
+timeCreated: 1467964791
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..f08bb6cecccd3eb5ae47f40377c6ef52b6e144e1
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dfd05a11e35e9928a758d26fd099ef47e3c4c174
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta	
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: 49679f302ac6408697f6b9314a38985c
+timeCreated: 1467964413
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd
new file mode 100644
index 0000000000000000000000000000000000000000..939bc6dc3e3671e679fb9cb52efba8601852cbe8
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d189fc277c7cac8ddd057b89cfa1ac1bb779007f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 81ed8c76d2bc4a4c95d092c98af4e58f
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd
new file mode 100644
index 0000000000000000000000000000000000000000..f9ce9a8b3455eda1d2ade85749fee73100ca5d40
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..555bb1bb15a46992d2a90f0807dfbb865f18bc84
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta	
@@ -0,0 +1,56 @@
+fileFormatVersion: 2
+guid: c76700ea0062413d9f69409b4e9e151b
+timeCreated: 1484171296
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..e37b2e2558d13363f395557e913458dd1a3bb77a
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..044d0c2176b7e74a14ac6b52e5ec63b7baaac694
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta	
@@ -0,0 +1,56 @@
+fileFormatVersion: 2
+guid: 35ff0937876540d3bd4b6a941df62a92
+timeCreated: 1484171296
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..7274887f0002217dd1850f641074a743563db700
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d98d37720a2fb5e497aa76382223d62fa8cc0ecc
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 6ace62d30f494c948b71d5594afce11d
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd
new file mode 100644
index 0000000000000000000000000000000000000000..eeeea67be6eb648c505085d768dac6b56afa16a1
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..84ed28c0341cba3bc642a65c8e47ebc24785e633
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 691475c57a824010be0c6f474caeb7e1
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..b69f6a2eff7afcfee728011a5ecf733083dbc325
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b9e61247bf84da5b9e8ed0398506d749274a4775
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 64b9fad609434c489c32b1cdf2004a1c
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd
new file mode 100644
index 0000000000000000000000000000000000000000..3ce55c4960e080920c0239406c7c2e8ec98c47bf
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f8a90b4244340e5534802c5db9442c6716c889fd
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified.psd.meta	
@@ -0,0 +1,59 @@
+fileFormatVersion: 2
+guid: 92027f7f8cfc4feaa477da0dc38d3d46
+timeCreated: 1472535271
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..d7fd5c82cffbea742f63d50527777d8a1e88cd25
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e5b5aa85cd550a06e5734ab72179cf578be31c42
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta	
@@ -0,0 +1,59 @@
+fileFormatVersion: 2
+guid: fa6bd40a216346b783a4cce741d277a5
+timeCreated: 1472535778
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd
new file mode 100644
index 0000000000000000000000000000000000000000..fc7e10b254cfe51ed074203cc581660612922d46
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8023379e81edc16e59a9aae61d33c0817c7b3e8a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 9288066c33474b94b6ee5465f4df1cc0
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..5522c37387e5c5cc571a7465c74276af6f7af043
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..aaa8b81d80b003b0ba78ab6ab03097428120abe2
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 12736c98af174f91827a26b66d2b01b9
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd
new file mode 100644
index 0000000000000000000000000000000000000000..14d28a2d0c17a8776abd98e4515c12b4bc135fce
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e481463b26aab30cc4885147bf6dc3e4e331e1f1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta	
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: c2f7f6a88b4c4f20a53deb72f3d9144c
+timeCreated: 1426240649
+licenseType: Store
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd
new file mode 100644
index 0000000000000000000000000000000000000000..c4483dbd6e6375d5d966095afd5375c5b8089967
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d1ec5285c54c557ebda8175f0d53f9fa1315d1f7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 41b96614b2e6494ba995ddcd252d11ae
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..4263bf9b3cf5c760ddfffdefc453ffbaac1848fe
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7cda20b74a59f28b621405d3d0f8c6146c7a8a99
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 066619c9c9c84f89acb1b48c11a7efe2
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..a5bed37158b92f2d109d4625bbe21e4088fa5ab5
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6fabec54843e798d82dd08c8d83615b2f610e6d5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta	
@@ -0,0 +1,58 @@
+fileFormatVersion: 2
+guid: bb42b2d967d6427983c901a4ffc8ecd9
+timeCreated: 1426240650
+licenseType: Store
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd
new file mode 100644
index 0000000000000000000000000000000000000000..4ef1998b6ed24472f2dcaaaa747ef6f32de292d8
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cf5c7649cdf5033ff2857d34152c538f70f7b93d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 342a0f8aca7f4f0691338912faec0494
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..bdeff41364cfc18e989fb22c200fb614d8c4b803
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dab7997c64359a9f89556c027a4205be33dda2cf
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: e05ace3bd15740cda0bad60d89092a5b
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd
new file mode 100644
index 0000000000000000000000000000000000000000..b00d45855e41f442a81d79d77fe498520adf4a79
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..74931bf8462c256a676d6b672ef61d90aa4ef529
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: 48d034c499ee4697af9dd6e327110249
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd
new file mode 100644
index 0000000000000000000000000000000000000000..84f0e61cf5b5e9e6b414b1cc20922f2d12328e52
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bbd509d1aaabd3df146bd9a8dedb71492b031153
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta	
@@ -0,0 +1,53 @@
+fileFormatVersion: 2
+guid: ed041e68439749a69d0efa0e3d896c2e
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: .25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 8
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 32
+  textureSettings:
+    filterMode: 0
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: .5, y: .5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    sprites: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md b/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..37d06155d67e2862e239016747838b6512fef1bf
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md
@@ -0,0 +1,5 @@
+TextMesh Pro copyright © 2014-2019 Unity Technologies ApS
+
+Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). 
+
+Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1df9555612ae4aecd27ce4fa31ad08c028937d1e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/LICENSE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0d2d0f36e67d4518a07df76235e91f9a
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e8a96b823c24afe4b5089d2906a8a7554672b016
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources.meta	
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ec95f4d5b2d1f14e9ff8682562553f9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage
new file mode 100644
index 0000000000000000000000000000000000000000..6c1904f46bf8f48929d3a9c827d884c9a2fed5ac
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bc49ab305d547db63e9add43995d7b88bf0a5a92
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Essential Resources.unitypackage.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: ce4ff17ca867d2b48b5c8a4181611901
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage
new file mode 100644
index 0000000000000000000000000000000000000000..975bf1be323ccfbc77eb9f1b5a81b70b564bd68c
Binary files /dev/null and b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage differ
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage.meta
new file mode 100644
index 0000000000000000000000000000000000000000..aaf21f78b8aa4cbc973af27d83ce46a3b9a5ec57
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Package Resources/TMP Examples & Extras.unitypackage.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bc00e25696e4132499f56528d3fed2e3
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json
new file mode 100644
index 0000000000000000000000000000000000000000..05c193e25059da0e3c570449447b52b36f41227f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json
@@ -0,0 +1,654 @@
+{
+    "assetRecords": [
+        {
+            "referencedResource": "Blue to Purple - Vertical.asset",
+            "target": "guid: 1e643bbd7e13d46418da3774e72bef60",
+            "replacement": "guid: 479a66fa4b094512a62b0a8e553ad95a"
+        },
+        {
+            "referencedResource": "Dark to Light Green - Vertical.asset",
+            "target": "guid: 90c9133b254e2184b8084dea4f392337",
+            "replacement": "guid: 4c86a3366cd840348ebe8dc438570ee4"
+        },
+        {
+            "referencedResource": "Light to Dark Green - Vertical.asset",
+            "target": "guid: 33c745f0979f3984182a138bcc6e57ec",
+            "replacement": "guid: 5cf8ae092ca54931b443bec5148f3c59"
+        },
+        {
+            "referencedResource": "Yellow to Orange - Vertical.asset",
+            "target": "guid: e002cb2a36d9e4a439a062867fa24e1e",
+            "replacement": "guid: 69a525efa7e6472eab268f6ea605f06e"
+        },
+        {
+            "referencedResource": "Crate - Surface Shader Scene.mat",
+            "target": "guid: e177c46c2a091564d88df2c2ca9dcf97",
+            "replacement": "guid: e6b9b44320f4448d9d5e0ee634259966"
+        },
+        {
+            "referencedResource": "Ground - Logo Scene.mat",
+            "target": "guid: 504ae362e57fc464b847f1e9fd0e4035",
+            "replacement": "guid: c719e38f25a9480abd2480ab621a2949"
+        },
+        {
+            "referencedResource": "Ground - Surface Shader Scene.mat",
+            "target": "guid: 9ed9aa864ec2d7f4dad266b9534c6d85",
+            "replacement": "guid: aadd5a709a48466c887296bb5b1b8110"
+        },
+        {
+            "referencedResource": "Small Crate_diffuse.mat",
+            "target": "guid: 92f161029a6d3c54a92d9d283352a135",
+            "replacement": "guid: 22262639920f43d6be32430e4e58350d"
+        },
+        {
+            "referencedResource": "Text Popup.prefab",
+            "target": "guid: c879e892866c8db4f8930b25672233ac",
+            "replacement": "guid: b06f0e6c1dfa4356ac918da1bb32c603"
+        },
+        {
+            "referencedResource": "TextMeshPro - Prefab 1.prefab",
+            "target": "guid: a6a60659abb4d9d4b934feebd3dcc952",
+            "replacement": "guid: a6e39ced0ea046bcb636c3f0b2e2a745"
+        },
+        {
+            "referencedResource": "TextMeshPro - Prefab 2.prefab",
+            "target": "guid: 1b190e3e0ab4c8e4881656b9160c59c2",
+            "replacement": "guid: fdad9d952ae84cafb74c63f2e694d042"
+        },
+        {
+            "referencedResource": "Anton SDF.asset",
+            "target": "guid: f76ef802b8b940c46a31f9027f2b0158",
+            "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2"
+        },
+        {
+            "referencedResource": "Anton SDF - Drop Shadow.mat",
+            "target": "guid: 250a1a103b3b4914c9707e6a423446d6",
+            "replacement": "guid: 749b9069dc4742c5bfa5c74644049926"
+        },
+        {
+            "referencedResource": "Anton SDF - Outline.mat",
+            "target": "guid: e077dc203e948b740859c1c0ca8b9691",
+            "replacement": "guid: a00013af81304728b2be1f4309ee2433"
+        },
+        {
+            "referencedResource": "Bangers SDF.asset",
+            "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481",
+            "replacement": "guid: 125cb55b44b24c4393181402bc6200e6"
+        },
+        {
+            "referencedResource": "Bangers SDF - Drop Shadow.mat",
+            "target": "guid: c26f698d4eee19e4a8b8f42cd299bab5",
+            "replacement": "guid: f2dcf029949142e28b974630369c8b4e"
+        },
+        {
+            "referencedResource": "Bangers SDF - Outline.mat",
+            "target": "guid: db7f2cfbf23d6d54ca4e74a9abd55326",
+            "replacement": "guid: f629c6e43dba4bf38cb74d8860150664"
+        },
+        {
+            "referencedResource": "Bangers SDF Glow.mat",
+            "target": "guid: 7dd7006c58d8a3148a73aa211d8c13d0",
+            "replacement": "guid: d75b8f41e959450c84ac6e967084d3e1"
+        },
+        {
+            "referencedResource": "Bangers SDF Logo.mat",
+            "target": "guid: 4fb51aa7001a2244395ddf6a15d37389",
+            "replacement": "guid: f4e195ac1e204eff960149d1cb34e18c"
+        },
+        {
+            "referencedResource": "Electronic Highway Sign SDF.asset",
+            "target": "guid: 163292f6f226d954593d45b079f8aae0",
+            "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a"
+        },
+        {
+            "referencedResource": "LiberationSans SDF - Drop Shadow.mat",
+            "target": "guid: 33db60c37b63f08448ded4b385e74e38",
+            "replacement": "guid: e73a58f6e2794ae7b1b7e50b7fb811b0"
+        },
+        {
+            "referencedResource": "LiberationSans SDF - Metalic Green.mat",
+            "target": "guid: 4f9843c79516ed1468b9b5a4f32e67e3",
+            "replacement": "guid: 8b29aaa3eec7468097ff07adfcf29ac9"
+        },
+        {
+            "referencedResource": "LiberationSans SDF - Outline.mat",
+            "target": "guid: 83a1b0fe6c3dbac44b66f09c82e1d509",
+            "replacement": "guid: 79459efec17a4d00a321bdcc27bbc385"
+        },
+        {
+            "referencedResource": "LiberationSans SDF - Overlay.mat",
+            "target": "guid: 55eb086ae18c76e4bb6cc7106d0dd6e2",
+            "replacement": "guid: 9ad269c99dcf42b7aedefd83dd5a7b9d"
+        },
+        {
+            "referencedResource": "LiberationSans SDF - Soft Mask.mat",
+            "target": "guid: 74e06d99c1657fc4abd33f20685ea9ff",
+            "replacement": "guid: 42df1c7856584b6b8db9a509b6b10074"
+        },
+        {
+            "referencedResource": "Oswald Bold SDF.asset",
+            "target": "guid: 09641b029dfa78843902b548a9de7553",
+            "replacement": "guid: 0161d805a3764c089bef00bfe00793f5"
+        },
+        {
+            "referencedResource": "Roboto-Bold SDF.asset",
+            "target": "guid: d62a573c923f5cb47b8ff65261033b90",
+            "replacement": "guid: 5302535af1044152a457ed104f1f4b91"
+        },
+        {
+            "referencedResource": "Roboto-Bold SDF - Drop Shadow.mat",
+            "target": "guid: 102e7c5c5e3b1f3468518cb166967d77",
+            "replacement": "guid: b246c4190f4e46ec9352fe15a7b09ce0"
+        },
+        {
+            "referencedResource": "Roboto-Bold SDF - Surface.mat",
+            "target": "guid: e2da38ead8f8238449c54a1ef49e080f",
+            "replacement": "guid: e6b276ec991f467aa14ef1f3cc665993"
+        },
+        {
+            "referencedResource": "DropCap Numbers.asset",
+            "target": "guid: c4fd2a959a50b584b92dedfefec1ffda",
+            "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6"
+        },
+        {
+            "referencedResource": "Benchmark01.cs",
+            "target": "guid: c5fb1b5c24460f745be29cc0eb06a58c",
+            "replacement": "guid: f970ea55f9f84bf79b05dab180b8c125"
+        },
+        {
+            "referencedResource": "Benchmark01_UGUI.cs",
+            "target": "guid: 5e6abf300e36c0a4eb43969c3f2172f8",
+            "replacement": "guid: 8ef7be1c625941f7ba8ed7cc71718c0d"
+        },
+        {
+            "referencedResource": "Benchmark02.cs",
+            "target": "guid: 3467f4170568a484d8b57e2051a27363",
+            "replacement": "guid: e8538afcddc14efbb5d9e94b7ae50197"
+        },
+        {
+            "referencedResource": "Benchmark03.cs",
+            "target": "guid: e6e9d20624a23da4c8b2b6fb7608bb9a",
+            "replacement": "guid: a73109742c8d47ac822895a473300c29"
+        },
+        {
+            "referencedResource": "Benchmark04.cs",
+            "target": "guid: 481dd67bdedc3104ea2156ed49f3acd5",
+            "replacement": "guid: dc20866c0d5e413ab7559440e15333ae"
+        },
+        {
+            "referencedResource": "CameraController.cs",
+            "target": "guid: a9f0e07aefca0cc459134ff9df622278",
+            "replacement": "guid: 2d687537154440a3913a9a3c7977978c"
+        },
+        {
+            "referencedResource": "ChatController.cs",
+            "target": "guid: eba5a4db2591a5844aea5f6f3ad8548e",
+            "replacement": "guid: 53d91f98a2664f5cb9af11de72ac54ec"
+        },
+        {
+            "referencedResource": "EnvMapAnimator.cs",
+            "target": "guid: 7e69f3f28c520ce4d9ab9964b2895b1a",
+            "replacement": "guid: a4b6f99e8bc54541bbd149b014ff441c"
+        },
+        {
+            "referencedResource": "ObjectSpin.cs",
+            "target": "guid: 5e7872ff51989434dabf7807265ada3c",
+            "replacement": "guid: 4f19c7f94c794c5097d8bd11e39c750d"
+        },
+        {
+            "referencedResource": "ShaderPropAnimator.cs",
+            "target": "guid: c56cf968fb6a5b6488e709242718845d",
+            "replacement": "guid: 2787a46a4dc848c1b4b7b9307b614bfd"
+        },
+        {
+            "referencedResource": "SimpleScript.cs",
+            "target": "guid: c64808ff5137c9044a583750e5b0468a",
+            "replacement": "guid: 9eff140b25d64601aabc6ba32245d099"
+        },
+        {
+            "referencedResource": "SkewTextExample.cs",
+            "target": "guid: 48d40dfeb33b717488f55ddbf676643a",
+            "replacement": "guid: d412675cfb3441efa3bf8dcd9b7624dc"
+        },
+        {
+            "referencedResource": "TeleType.cs",
+            "target": "guid: 9094c5c777af3f14489e8947748e86e6",
+            "replacement": "guid: e32c266ee6204b21a427753cb0694c81"
+        },
+        {
+            "referencedResource": "TextConsoleSimulator.cs",
+            "target": "guid: 45757dcc8f119454dac6365e8fd15e8b",
+            "replacement": "guid: 43bcd35a1c0c40ccb6d472893fe2093f"
+        },
+        {
+            "referencedResource": "TextMeshProFloatingText.cs",
+            "target": "guid: dd0e4b969aa70504382a89d2f208ae6c",
+            "replacement": "guid: a4d4c76e63944cba8c7d00f56334b98c"
+        },
+        {
+            "referencedResource": "TextMeshSpawner.cs",
+            "target": "guid: 385939aed18e82d41894437798c30ed8",
+            "replacement": "guid: 76c11bbcfddf44e0ba17d6c2751c8d84"
+        },
+        {
+            "referencedResource": "TMP_ExampleScript_01.cs",
+            "target": "guid: 36bafabb5572c6347923b971425ab3be",
+            "replacement": "guid: 6f2c5b59b6874405865e2616e4ec276a"
+        },
+        {
+            "referencedResource": "TMP_FrameRateCounter.cs",
+            "target": "guid: c0357609254b68d4881cab18f04dd4dc",
+            "replacement": "guid: 686ec78b56aa445795335fbadafcfaa4"
+        },
+        {
+            "referencedResource": "TMP_TextEventCheck.cs",
+            "target": "guid: ba181bda76b7f6047ba2188e94bf0894",
+            "replacement": "guid: d736ce056cf444ca96e424f4d9c42b76"
+        },
+        {
+            "referencedResource": "TMP_TextEventHandler.cs",
+            "target": "guid: 48a2fdbd95acd794caf78a85a0b6926a",
+            "replacement": "guid: 1312ae25639a4bae8e25ae223209cc50"
+        },
+        {
+            "referencedResource": "TMP_TextInfoDebugTool.cs",
+            "target": "guid: 5eeee4467ee5b6a4884a1ec94812d93e",
+            "replacement": "guid: 21256c5b62f346f18640dad779911e20"
+        },
+        {
+            "referencedResource": "TMP_TextSelector_A.cs",
+            "target": "guid: 68baf2864c88f4a43a50f16709de8717",
+            "replacement": "guid: 103e0a6a1d404693b9fb1a5173e0e979"
+        },
+        {
+            "referencedResource": "TMP_TextSelector_B.cs",
+            "target": "guid: f499ff45b9a3d0840a0df48d01b2877b",
+            "replacement": "guid: a05dcd8be7ec4ccbb35c26219884aa37"
+        },
+        {
+            "referencedResource": "TMP_UiFrameRateCounter.cs",
+            "target": "guid: dc33b7a34d20d5e4e8d54b6867ce81e3",
+            "replacement": "guid: 24b0dc2d1d494adbbec1f4db26b4cf83"
+        },
+        {
+            "referencedResource": "TMPro_InstructionOverlay.cs",
+            "target": "guid: 53b866620ba77504eaf52cab7dbd95c9",
+            "replacement": "guid: c3c1afeda5e545e0b19add5373896d2e"
+        },
+        {
+            "referencedResource": "VertexColorCycler.cs",
+            "target": "guid: c8d54cdd5913d4e4bb7b655d7d16835b",
+            "replacement": "guid: 91b8ba3d52e041fab2d0e0f169855539"
+        },
+        {
+            "referencedResource": "VertexJitter.cs",
+            "target": "guid: e4769cb37968ea948a763a9a89f9e583",
+            "replacement": "guid: 2ed57967c52645d390a89dcf8f61ba73"
+        },
+        {
+            "referencedResource": "VertexShakeA.cs",
+            "target": "guid: eaa12d191e718c945ac55da73fa469db",
+            "replacement": "guid: f7cfa58e417a46ea8889989684c2522e"
+        },
+        {
+            "referencedResource": "VertexShakeB.cs",
+            "target": "guid: 32c83a5d3ba42b84aa26386eac47566b",
+            "replacement": "guid: e4e0d9ccee5f4950be8979268c9014e0"
+        },
+        {
+            "referencedResource": "VertexZoom.cs",
+            "target": "guid: 5305493000edc7d4ea4302757dc19a99",
+            "replacement": "guid: 52ec835d14bd486f900952b77698b7eb"
+        },
+        {
+            "referencedResource": "WarpTextExample.cs",
+            "target": "guid: f3eef864a10f51045a7530e2afe7c179",
+            "replacement": "guid: 790744c462254b7ba8038e6ed28b3db2"
+        },
+        {
+            "referencedResource": "DropCap Numbers.psd",
+            "target": "guid: 28b41fef228d6814f90e541deaf9f262",
+            "replacement": "guid: fd09957580ac4326916010f1f260975b"
+        },
+        {
+            "referencedResource": "Brushed Metal 3.jpg",
+            "target": "guid: c30270e41dccf9441ab56d94261bdcfa",
+            "replacement": "guid: f88677df267a41d6be1e7a6133e7d227"
+        },
+        {
+            "referencedResource": "Engraved Wall.jpg",
+            "target": "guid: 93d6f74f2ef358e41989d4152b195f88",
+            "replacement": "guid: e0f91e6569da4934a48d85bf8d3063f0"
+        },
+        {
+            "referencedResource": "Engraved Wall Normal.jpg",
+            "target": "guid: 1edd0950293e8664094053a041548c23",
+            "replacement": "guid: 20f91c93e7fb490f9496609c52ef3904"
+        },
+        {
+            "referencedResource": "Floor Cement.jpg",
+            "target": "guid: ac5a0a5373b36e049bb7f98f88dbc244",
+            "replacement": "guid: 283f897e4925411ebbaa758b4cb13fc2"
+        },
+        {
+            "referencedResource": "Floor Tiles 1 - diffuse.jpg",
+            "target": "guid: 7bbfb8818476e4641ba3e75f5225eb69",
+            "replacement": "guid: 85ac55597b97403c82fc6601a93cf241"
+        },
+        {
+            "referencedResource": "Floor Tiles 1 - normal.jpg",
+            "target": "guid: e00d5a9a0944134448432ccacf221b95",
+            "replacement": "guid: c45cd05946364f32aba704f0853a975b"
+        },
+        {
+            "referencedResource": "Fruit Jelly (B&W).jpg",
+            "target": "guid: 74d8c208a0193e14ca6916bea88a2c52",
+            "replacement": "guid: 1cdc5b506b1a4a33a53c30669ced1f51"
+        },
+        {
+            "referencedResource": "Gradient Diagonal (Color).jpg",
+            "target": "guid: 2421a4955e71725448211e6bfbc7d7fb",
+            "replacement": "guid: 2ce5c55e85304b819a1826ecbc839aa5"
+        },
+        {
+            "referencedResource": "Gradient Horizontal (Color).jpg",
+            "target": "guid: 0bbb43aff4f7811419ffceb1b16cf3d6",
+            "replacement": "guid: 6eb184de103d4b3f812b38561065192f"
+        },
+        {
+            "referencedResource": "Gradient Vertical (Color).jpg",
+            "target": "guid: 3359915af07779e4e9a966df9eed764f",
+            "replacement": "guid: 03d0538de6e24c0f819bfc9ce084dfa9"
+        },
+        {
+            "referencedResource": "Mask Zig-n-Zag.psd",
+            "target": "guid: 04eb87e72b3c1c648ba47a869ee00505",
+            "replacement": "guid: bb8dfcd263ad4eb383a33d74a720be6f"
+        },
+        {
+            "referencedResource": "Sand Normal Map.jpg",
+            "target": "guid: 89e1b1c005d29cf4598ea861deb35a80",
+            "replacement": "guid: 8b8c8a10edf94ddc8cc4cc4fcd5696a9"
+        },
+        {
+            "referencedResource": "Small Crate_diffuse.jpg",
+            "target": "guid: 64734c9bc6df32149a0c9cb0b18693e1",
+            "replacement": "guid: 602cb87b6a29443b8636370ea0751574"
+        },
+        {
+            "referencedResource": "Small Crate_normal.jpg",
+            "target": "guid: 81b50d9cb6f3104448ec54c00a80101a",
+            "replacement": "guid: 8878a782f4334ecbbcf683b3ac780966"
+        },
+        {
+            "referencedResource": "Stainless 03.png",
+            "target": "guid: 40d7f27f614cc1043a1f7e19074f461c",
+            "replacement": "guid: 83cb272f9ee046f6ab6636ca38af8db4"
+        },
+        {
+            "referencedResource": "Text Overflow - Linked Text Image 1.png",
+            "target": "guid: 1fd8c568b1fcdbe43be65c1619cf3293",
+            "replacement": "guid: 4ccf43d26c4748c792174516f4a8fcef"
+        },
+        {
+            "referencedResource": "Text Overflow - Linked Text UI Screenshot.png",
+            "target": "guid: 7983d2ec0427c114a916ae3c4769dc10",
+            "replacement": "guid: c76d18757a194d618355f05f815cb0a1"
+        },
+        {
+            "referencedResource": "Wipe Pattern - Circle.psd",
+            "target": "guid: 6f5e9497d22a7a84193ec825e2eb41ac",
+            "replacement": "guid: 10c49fcd9c64421db7c0133e61e55f97"
+        },
+        {
+            "referencedResource": "Wipe Pattern - Diagonal.psd",
+            "target": "guid: 8ee4d366b96418044aa9f94b3e2de645",
+            "replacement": "guid: ed5290d8df18488780e2996b9b882f01"
+        },
+        {
+            "referencedResource": "Wipe Pattern - Radial Double.psd",
+            "target": "guid: 3e0e22da7c9570b498205179ef58ef38",
+            "replacement": "guid: 7631f4eff8f74ed38eb3eb9db17134e1"
+        },
+        {
+            "referencedResource": "Wipe Pattern - Radial Quad.psd",
+            "target": "guid: 05ffd580f33f74644a6025ec196860af",
+            "replacement": "guid: 2b5e9ae96c5644d8bae932f8b4ca68a2"
+        },
+        {
+            "referencedResource": "LiberationSans SDF.asset",
+            "target": "guid: 715b80e429c437e40867928a4e1fc975",
+            "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee"
+        },
+        {
+            "referencedResource": "LineBreaking Following Characters.txt",
+            "target": "guid: 312ba5b9e90627940866e19549a788cf",
+            "replacement": "guid: fade42e8bc714b018fac513c043d323b"
+        },
+        {
+            "referencedResource": "LineBreaking Leading Characters.txt",
+            "target": "guid: 8d713940fcbede142ae4a33ea0062b33",
+            "replacement": "guid: d82c1b31c7e74239bff1220585707d2b"
+        },
+        {
+            "referencedResource": "TMP_Bitmap.shader",
+            "target": "guid: edfcf888cd11d9245b91d2883049a57e",
+            "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0"
+        },
+        {
+            "referencedResource": "TMP_Bitmap-Mobile.shader",
+            "target": "guid: d1cf17907700cb647aa3ea423ba38f2e",
+            "replacement": "guid: 1e3b057af24249748ff873be7fafee47"
+        },
+        {
+            "referencedResource": "TMP_SDF.shader",
+            "target": "guid: dca26082f9cb439469295791d9f76fe5",
+            "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6"
+        },
+        {
+            "referencedResource": "TMP_SDF Overlay.shader",
+            "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97",
+            "replacement": "guid: dd89cf5b9246416f84610a006f916af7"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile.shader",
+            "target": "guid: cafd18099dfc0114896e0a8b277b81b6",
+            "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile Masking.shader",
+            "target": "guid: afc255f7c2be52e41973a3d10a2e632d",
+            "replacement": "guid: bc1ede39bf3643ee8e493720e4259791"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile Overlay.shader",
+            "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed",
+            "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1"
+        },
+        {
+            "referencedResource": "TMP_SDF-Surface.shader",
+            "target": "guid: 8e6b9842dbb1a5a4887378afab854e63",
+            "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d"
+        },
+        {
+            "referencedResource": "TMP_SDF-Surface-Mobile.shader",
+            "target": "guid: 3c2ea7753c1425145a74d106ec1cd852",
+            "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17"
+        },
+        {
+            "referencedResource": "TMP_Sprite.shader",
+            "target": "guid: 3a1c68c8292caf046bd21158886c5e40",
+            "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c"
+        },
+        {
+            "referencedResource": "Default Sprite Asset.asset",
+            "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8",
+            "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d"
+        },
+        {
+            "referencedResource": "EmojiOne.asset",
+            "target": "guid: 9a952e2781ef26940ae089f1053ef4ef",
+            "replacement": "guid: c41005c129ba4d66911b75229fd70b45"
+        },
+        {
+            "referencedResource": "TMP Default Style Sheet.asset",
+            "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc",
+            "replacement": "guid: f952c082cb03451daed3ee968ac6c63e"
+        },
+        {
+            "referencedResource": "TMP Settings.asset",
+            "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f",
+            "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3"
+        },
+        {
+            "referencedResource": "TextContainer.cs",
+            "target": "guid: 3b34fc186f40e8043b977d4fa70db8c5",
+            "replacement": "guid: 32d40088a6124c578ad6b428df586e2e"
+        },
+		{
+            "referencedResource": "TextContainer.cs",
+            "target": "fileID: 311004786, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 32d40088a6124c578ad6b428df586e2e"
+        },
+        {
+            "referencedResource": "TextMeshPro.cs",
+            "target": "guid: 1a1578b9753d2604f98d608cb4239e2f",
+            "replacement": "guid: 9541d86e2fd84c1d9990edf0852d74ab"
+        },
+		{
+            "referencedResource": "TextMeshPro.cs",
+            "target": "fileID: -806885394, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab"
+        },
+        {
+            "referencedResource": "TextMeshProUGUI.cs",
+            "target": "guid: 496f2e385b0c62542b5c739ccfafd8da",
+            "replacement": "guid: f4688fdb7df04437aeb418b961361dc5"
+        },
+		{
+            "referencedResource": "TextMeshProUGUI.cs",
+            "target": "fileID: 1453722849, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5"
+        },
+        {
+            "referencedResource": "TMP_Asset.cs",
+            "target": "guid: e2c4405608b405a4680436e183e53c45",
+            "replacement": "guid: 3bda1886f58f4e0ab1139400b160c3ee"
+        },
+		{
+            "referencedResource": "TMP_Asset.cs",
+            "target": "fileID: -659140726, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 3bda1886f58f4e0ab1139400b160c3ee"
+        },
+        {
+            "referencedResource": "TMP_ColorGradient.cs",
+            "target": "guid: e90e18dd4a044ff4394833216e6bf4d2",
+            "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0"
+        },
+		{
+            "referencedResource": "TMP_ColorGradient.cs",
+            "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0"
+        },
+        {
+            "referencedResource": "TMP_Dropdown.cs",
+            "target": "guid: 44cb1d34ddab9d449a05fc3747876be1",
+            "replacement": "guid: 7b743370ac3e4ec2a1668f5455a8ef8a"
+        },
+		{
+            "referencedResource": "TMP_Dropdown.cs",
+            "target": "fileID: 1148083418, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a"
+        },
+        {
+            "referencedResource": "TMP_FontAsset.cs",
+            "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d",
+            "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04"
+        },
+		{
+            "referencedResource": "TMP_FontAsset.cs",
+            "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04"
+        },
+        {
+            "referencedResource": "TMP_InputField.cs",
+            "target": "guid: 7b85855a3deaa2e44ac6741a6bbc85f6",
+            "replacement": "guid: 2da0c512f12947e489f739169773d7ca"
+        },
+		{
+            "referencedResource": "TMP_InputField.cs",
+            "target": "fileID: -1620774994, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca"
+        },
+        {
+            "referencedResource": "TMP_Settings.cs",
+            "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231",
+            "replacement": "guid: 2705215ac5b84b70bacc50632be6e391"
+        },
+		{
+            "referencedResource": "TMP_Settings.cs",
+            "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391"
+        },
+        {
+            "referencedResource": "TMP_SpriteAsset.cs",
+            "target": "guid: 90940d439ca0ef746af0b48419b92d2e",
+            "replacement": "guid: 84a92b25f83d49b9bc132d206b370281"
+        },
+		{
+            "referencedResource": "TMP_SpriteAsset.cs",
+            "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281"
+        },
+        {
+            "referencedResource": "TMP_StyleSheet.cs",
+            "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc",
+            "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410"
+        },
+		{
+            "referencedResource": "TMP_StyleSheet.cs",
+            "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410"
+        },
+        {
+            "referencedResource": "TMP_SubMesh.cs",
+            "target": "guid: bd950677b2d06c74494b1c1118584fff",
+            "replacement": "guid: 07994bfe8b0e4adb97d706de5dea48d5"
+        },
+		{
+            "referencedResource": "TMP_SubMesh.cs",
+            "target": "fileID: 1330537494, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 07994bfe8b0e4adb97d706de5dea48d5"
+        },
+        {
+            "referencedResource": "TMP_SubMeshUI.cs",
+            "target": "guid: a5378e1f14d974d419f811d6b0861f20",
+            "replacement": "guid: 058cba836c1846c3aa1c5fd2e28aea77"
+        },
+		{
+            "referencedResource": "TMP_SubMeshUI.cs",
+            "target": "fileID: 1908110080, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 058cba836c1846c3aa1c5fd2e28aea77"
+        },
+        {
+            "referencedResource": "TMP_Text.cs",
+            "target": "guid: 9ec8dc9c3fa2e5d41b939b5888d2f1e8",
+            "replacement": "guid: 5143f58107604835ab1a5efa2d8818fd"
+        },
+		{
+            "referencedResource": "TMP_Text.cs",
+            "target": "fileID: -1385168320, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 5143f58107604835ab1a5efa2d8818fd"
+        },
+        {
+            "referencedResource": "Default Sprite Asset.png",
+            "target": "guid: 5b32c2d36abe44540bed74c1f787033b",
+            "replacement": "guid: a0fc465d6cf04254a2938578735e2383"
+        },
+        {
+            "referencedResource": "EmojiOne.png",
+            "target": "guid: 6ec706981a919c3489f0b061a40054e2",
+            "replacement": "guid: dffef66376be4fa480fb02b19edbe903"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a7a2790c1bf2e2c662651e8447c67d9080ea3fab
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 05f5bfd584002f948982a1498890f9a9
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json
new file mode 100644
index 0000000000000000000000000000000000000000..f07aa23f47b7b3aad1f13cd15da25ba6fd635983
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json
@@ -0,0 +1,184 @@
+{
+    "assetRecords": [
+        {
+            "referencedResource": "TMP_FontAsset.cs",
+            "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d",
+            "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04"
+        },
+		{
+            "referencedResource": "TMP_FontAsset.cs",
+            "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04"
+        },
+		{
+            "referencedResource": "Anton SDF.asset",
+            "target": "guid: f76ef802b8b940c46a31f9027f2b0158",
+            "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2"
+        },
+        {
+            "referencedResource": "Bangers SDF.asset",
+            "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481",
+            "replacement": "guid: 125cb55b44b24c4393181402bc6200e6"
+        },
+        {
+            "referencedResource": "Electronic Highway Sign SDF.asset",
+            "target": "guid: 163292f6f226d954593d45b079f8aae0",
+            "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a"
+        },
+        {
+            "referencedResource": "Oswald Bold SDF.asset",
+            "target": "guid: 09641b029dfa78843902b548a9de7553",
+            "replacement": "guid: 0161d805a3764c089bef00bfe00793f5"
+        },
+        {
+            "referencedResource": "Roboto-Bold SDF.asset",
+            "target": "guid: d62a573c923f5cb47b8ff65261033b90",
+            "replacement": "guid: 5302535af1044152a457ed104f1f4b91"
+        },
+		{
+            "referencedResource": "LiberationSans SDF.asset",
+            "target": "guid: 715b80e429c437e40867928a4e1fc975",
+            "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee"
+        },
+        {
+            "referencedResource": "TMP_Bitmap.shader",
+            "target": "guid: edfcf888cd11d9245b91d2883049a57e",
+            "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0"
+        },
+        {
+            "referencedResource": "TMP_Bitmap-Mobile.shader",
+            "target": "guid: d1cf17907700cb647aa3ea423ba38f2e",
+            "replacement": "guid: 1e3b057af24249748ff873be7fafee47"
+        },
+        {
+            "referencedResource": "TMP_SDF.shader",
+            "target": "guid: dca26082f9cb439469295791d9f76fe5",
+            "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6"
+        },
+        {
+            "referencedResource": "TMP_SDF Overlay.shader",
+            "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97",
+            "replacement": "guid: dd89cf5b9246416f84610a006f916af7"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile.shader",
+            "target": "guid: cafd18099dfc0114896e0a8b277b81b6",
+            "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile Masking.shader",
+            "target": "guid: afc255f7c2be52e41973a3d10a2e632d",
+            "replacement": "guid: bc1ede39bf3643ee8e493720e4259791"
+        },
+        {
+            "referencedResource": "TMP_SDF-Mobile Overlay.shader",
+            "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed",
+            "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1"
+        },
+        {
+            "referencedResource": "TMP_SDF-Surface.shader",
+            "target": "guid: 8e6b9842dbb1a5a4887378afab854e63",
+            "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d"
+        },
+        {
+            "referencedResource": "TMP_SDF-Surface-Mobile.shader",
+            "target": "guid: 3c2ea7753c1425145a74d106ec1cd852",
+            "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17"
+        },
+        {
+            "referencedResource": "TMP_Sprite.shader",
+            "target": "guid: 3a1c68c8292caf046bd21158886c5e40",
+            "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c"
+        },
+        {
+            "referencedResource": "TMP_ColorGradient.cs",
+            "target": "guid: e90e18dd4a044ff4394833216e6bf4d2",
+            "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0"
+        },
+		{
+            "referencedResource": "TMP_ColorGradient.cs",
+            "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0"
+        },
+        {
+            "referencedResource": "TMP_Settings.cs",
+            "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231",
+            "replacement": "guid: 2705215ac5b84b70bacc50632be6e391"
+        },
+		{
+            "referencedResource": "TMP_Settings.cs",
+            "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391"
+        },
+		{
+            "referencedResource": "TMP Settings.asset",
+            "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f",
+            "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3"
+        },
+		{
+            "referencedResource": "LineBreaking Following Characters.txt",
+            "target": "guid: 312ba5b9e90627940866e19549a788cf",
+            "replacement": "guid: fade42e8bc714b018fac513c043d323b"
+        },
+        {
+            "referencedResource": "LineBreaking Leading Characters.txt",
+            "target": "guid: 8d713940fcbede142ae4a33ea0062b33",
+            "replacement": "guid: d82c1b31c7e74239bff1220585707d2b"
+        },
+        {
+            "referencedResource": "TMP_StyleSheet.cs",
+            "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc",
+            "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410"
+        },
+		{
+            "referencedResource": "TMP_StyleSheet.cs",
+            "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410"
+        },
+		{
+            "referencedResource": "TMP Default Style Sheet.asset",
+            "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc",
+            "replacement": "guid: f952c082cb03451daed3ee968ac6c63e"
+        },
+		{
+            "referencedResource": "TMP_SpriteAsset.cs",
+            "target": "guid: 90940d439ca0ef746af0b48419b92d2e",
+            "replacement": "guid: 84a92b25f83d49b9bc132d206b370281"
+        },
+		{
+            "referencedResource": "TMP_SpriteAsset.cs",
+            "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e",
+            "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281"
+        },
+		{
+            "referencedResource": "Default Sprite Asset.asset",
+            "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8",
+            "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d"
+        },
+        {
+            "referencedResource": "Default Sprite Asset.png",
+            "target": "guid: 5b32c2d36abe44540bed74c1f787033b",
+            "replacement": "guid: a0fc465d6cf04254a2938578735e2383"
+        },
+		{
+            "referencedResource": "EmojiOne.asset",
+            "target": "guid: 9a952e2781ef26940ae089f1053ef4ef",
+            "replacement": "guid: c41005c129ba4d66911b75229fd70b45"
+        },
+        {
+            "referencedResource": "EmojiOne.png",
+            "target": "guid: 6ec706981a919c3489f0b061a40054e2",
+            "replacement": "guid: dffef66376be4fa480fb02b19edbe903"
+        },
+		{
+            "referencedResource": "DropCap Numbers.asset",
+            "target": "guid: c4fd2a959a50b584b92dedfefec1ffda",
+            "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6"
+        },     
+        {
+            "referencedResource": "DropCap Numbers.psd",
+            "target": "guid: 28b41fef228d6814f90e541deaf9f262",
+            "replacement": "guid: fd09957580ac4326916010f1f260975b"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f534ac147b17212033d6f36030d7fe2e3e37ba37
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/PackageConversionData_Assets.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0e0afa652c0031c48896a97b424d027b
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3c2e4cf7e5433b91523c27a75a2f1f251b7a8b16
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e6a1d1e3d2384453a7371b4a07a41ca4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..af509a3a7dcb9a28a355b1af4fc1d3df204d05b4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b5d6c28ed7b94775be9e2560f300247c
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2b7dc854af8dd5a7677ec3fcdb910c0644458d60
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs
@@ -0,0 +1,60 @@
+using UnityEditorInternal;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+    [CustomPropertyDrawer(typeof(TMP_Dropdown.OptionDataList), true)]
+    class DropdownOptionListDrawer : PropertyDrawer
+    {
+        private ReorderableList m_ReorderableList;
+
+        private void Init(SerializedProperty property)
+        {
+            if (m_ReorderableList != null)
+                return;
+
+            SerializedProperty array = property.FindPropertyRelative("m_Options");
+
+            m_ReorderableList = new ReorderableList(property.serializedObject, array);
+            m_ReorderableList.drawElementCallback = DrawOptionData;
+            m_ReorderableList.drawHeaderCallback = DrawHeader;
+            m_ReorderableList.elementHeight += 16;
+        }
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            Init(property);
+
+            m_ReorderableList.DoList(position);
+        }
+
+        private void DrawHeader(Rect rect)
+        {
+            GUI.Label(rect, "Options");
+        }
+
+        private void DrawOptionData(Rect rect, int index, bool isActive, bool isFocused)
+        {
+            SerializedProperty itemData = m_ReorderableList.serializedProperty.GetArrayElementAtIndex(index);
+            SerializedProperty itemText = itemData.FindPropertyRelative("m_Text");
+            SerializedProperty itemImage = itemData.FindPropertyRelative("m_Image");
+
+            RectOffset offset = new RectOffset(0, 0, -1, -3);
+            rect = offset.Add(rect);
+            rect.height = EditorGUIUtility.singleLineHeight;
+
+            EditorGUI.PropertyField(rect, itemText, GUIContent.none);
+            rect.y += EditorGUIUtility.singleLineHeight;
+            EditorGUI.PropertyField(rect, itemImage, GUIContent.none);
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            Init(property);
+
+            return m_ReorderableList.GetHeight();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f7f4c565bc4c83f5f475df15fc187e279ed907a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9545c9eb3bf94265810463794fec8334
+timeCreated: 1464818008
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0936dc755127369af84145ae024407d2f23c6f24
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs
@@ -0,0 +1,61 @@
+/*
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_Glyph))]
+    public class GlyphInfoDrawer : PropertyDrawer
+    {
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_id = property.FindPropertyRelative("id");
+            SerializedProperty prop_x = property.FindPropertyRelative("x");
+            SerializedProperty prop_y = property.FindPropertyRelative("y");
+            SerializedProperty prop_width = property.FindPropertyRelative("width");
+            SerializedProperty prop_height = property.FindPropertyRelative("height");
+            SerializedProperty prop_xOffset = property.FindPropertyRelative("xOffset");
+            SerializedProperty prop_yOffset = property.FindPropertyRelative("yOffset");
+            SerializedProperty prop_xAdvance = property.FindPropertyRelative("xAdvance");
+            SerializedProperty prop_scale = property.FindPropertyRelative("scale");
+
+
+            // We get Rect since a valid position may not be provided by the caller.
+            Rect rect = GUILayoutUtility.GetRect(position.width, 48);
+            rect.y -= 15;
+
+            //GUI.enabled = false;
+            EditorGUIUtility.labelWidth = 40f;
+            EditorGUIUtility.fieldWidth = 45f;
+
+            bool prevGuiState = GUI.enabled;
+            GUI.enabled = true;
+            EditorGUI.LabelField(new Rect(rect.x + 5f, rect.y, 80f, 18), new GUIContent("Ascii: <color=#FFFF80>" + prop_id.intValue + "</color>"), TMP_UIStyleManager.label);
+            EditorGUI.LabelField(new Rect(rect.x + 90f, rect.y, 80f, 18), new GUIContent("Hex: <color=#FFFF80>" + prop_id.intValue.ToString("X") + "</color>"), TMP_UIStyleManager.label);
+            EditorGUI.LabelField(new Rect(rect.x + 170f, rect.y, 80, 18), "Char: [ <color=#FFFF80>" + (char)prop_id.intValue + "</color> ]", TMP_UIStyleManager.label);
+            GUI.enabled = prevGuiState;
+
+            EditorGUIUtility.labelWidth = 35f;
+            EditorGUIUtility.fieldWidth = 10f;
+
+            float width = (rect.width - 5f) / 4;
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 22, width - 5f, 18), prop_x, new GUIContent("X:"));
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 22, width - 5f, 18), prop_y, new GUIContent("Y:"));
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 22, width - 5f, 18), prop_width, new GUIContent("W:"));
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 22, width - 5f, 18), prop_height, new GUIContent("H:"));
+
+            //GUI.enabled = true;
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 44, width - 5f, 18), prop_xOffset, new GUIContent("OX:"));
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 44, width - 5f, 18), prop_yOffset, new GUIContent("OY:"));
+            //GUI.enabled = true;
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 44, width - 5f, 18), prop_xAdvance, new GUIContent("ADV:"));
+            EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 44, width - 5f, 18), prop_scale, new GUIContent("SF:"));
+        }
+
+    }
+}
+*/
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..10ed151e71a4e6c938f06f75939abf502efe5f07
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphInfoDrawer.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 900f1a451c764dc3bdcc0de815a15935
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1e1f4d18c58ffba54b37f0956abd93a8b3232fa1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(GlyphMetrics))]
+    public class GlyphMetricsPropertyDrawer : PropertyDrawer
+    {
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_Width = property.FindPropertyRelative("m_Width");
+            SerializedProperty prop_Height = property.FindPropertyRelative("m_Height");
+            SerializedProperty prop_HoriBearingX = property.FindPropertyRelative("m_HorizontalBearingX");
+            SerializedProperty prop_HoriBearingY = property.FindPropertyRelative("m_HorizontalBearingY");
+            SerializedProperty prop_HoriAdvance = property.FindPropertyRelative("m_HorizontalAdvance");
+
+            // We get Rect since a valid position may not be provided by the caller.
+            Rect rect = new Rect(position.x, position.y, position.width, 49);
+
+            EditorGUI.LabelField(rect, new GUIContent("Glyph Metrics"));
+
+            EditorGUIUtility.labelWidth = 30f;
+            EditorGUIUtility.fieldWidth = 10f;
+
+            //GUI.enabled = false;
+            float width = (rect.width - 75f) / 2;
+            EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:"));
+
+            //GUI.enabled = true;
+
+            width = (rect.width - 75f) / 3;
+            EditorGUI.BeginChangeCheck();
+            EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 40, width - 5f, 18), prop_HoriBearingX, new GUIContent("BX:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 40, width - 5f, 18), prop_HoriBearingY, new GUIContent("BY:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 40, width - 5f, 18), prop_HoriAdvance, new GUIContent("AD:"));
+            if (EditorGUI.EndChangeCheck())
+            {
+
+            }
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 65f;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d91f5791bb6c75f6791da253da7c6d45b92bce7b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e3882522a08b6f5459b4dea6f8791278
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..87ecf0cc6c36127f34cd758479f6ec54d83f08f8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs
@@ -0,0 +1,44 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(GlyphRect))]
+    public class GlyphRectPropertyDrawer : PropertyDrawer
+    {
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            //EditorGUI.BeginProperty(position, label, property);
+
+            SerializedProperty prop_X = property.FindPropertyRelative("m_X");
+            SerializedProperty prop_Y = property.FindPropertyRelative("m_Y");
+            SerializedProperty prop_Width = property.FindPropertyRelative("m_Width");
+            SerializedProperty prop_Height = property.FindPropertyRelative("m_Height");
+
+            // We get Rect since a valid position may not be provided by the caller.
+            Rect rect = new Rect(position.x, position.y, position.width, 49);
+            EditorGUI.LabelField(rect, new GUIContent("Glyph Rect"));
+
+            EditorGUIUtility.labelWidth = 30f;
+            EditorGUIUtility.fieldWidth = 10f;
+
+            //GUI.enabled = false;
+            float width = (rect.width - 75f) / 4;
+            EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_X, new GUIContent("X:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Y, new GUIContent("Y:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:"));
+            EditorGUI.PropertyField(new Rect(rect.x + width * 3, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:"));
+
+            //EditorGUI.EndProperty();
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 45f;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93232794c3faf41acc98ed77d4d70d9c62a57f87
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8bc2b083b068f3546a9509c805e0541c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c4a55bafc2c1221892dd290e7f8acada682db371
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs
@@ -0,0 +1,1116 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+    public abstract class TMP_BaseEditorPanel : Editor
+    {
+        //Labels and Tooltips
+        static readonly GUIContent k_RtlToggleLabel = new GUIContent("Enable RTL Editor", "Reverses text direction and allows right to left editing.");
+        static readonly GUIContent k_MainSettingsLabel = new GUIContent("Main Settings");
+        static readonly GUIContent k_FontAssetLabel = new GUIContent("Font Asset", "The Font Asset containing the glyphs that can be rendered for this text.");
+        static readonly GUIContent k_MaterialPresetLabel = new GUIContent("Material Preset", "The material used for rendering. Only materials created from the Font Asset can be used.");
+        static readonly GUIContent k_AutoSizeLabel = new GUIContent("Auto Size", "Auto sizes the text to fit the available space.");
+        static readonly GUIContent k_FontSizeLabel = new GUIContent("Font Size", "The size the text will be rendered at in points.");
+        static readonly GUIContent k_AutoSizeOptionsLabel = new GUIContent("Auto Size Options");
+        static readonly GUIContent k_MinLabel = new GUIContent("Min", "The minimum font size.");
+        static readonly GUIContent k_MaxLabel = new GUIContent("Max", "The maximum font size.");
+        static readonly GUIContent k_WdLabel = new GUIContent("WD%", "Compresses character width up to this value before reducing font size.");
+        static readonly GUIContent k_LineLabel = new GUIContent("Line", "Negative value only. Compresses line height down to this value before reducing font size.");
+        static readonly GUIContent k_FontStyleLabel = new GUIContent("Font Style", "Styles to apply to the text such as Bold or Italic.");
+
+        static readonly GUIContent k_BoldLabel = new GUIContent("B", "Bold");
+        static readonly GUIContent k_ItalicLabel = new GUIContent("I", "Italic");
+        static readonly GUIContent k_UnderlineLabel = new GUIContent("U", "Underline");
+        static readonly GUIContent k_StrikethroughLabel = new GUIContent("S", "Strikethrough");
+        static readonly GUIContent k_LowercaseLabel = new GUIContent("ab", "Lowercase");
+        static readonly GUIContent k_UppercaseLabel = new GUIContent("AB", "Uppercase");
+        static readonly GUIContent k_SmallcapsLabel = new GUIContent("SC", "Smallcaps");
+        
+        static readonly GUIContent k_ColorModeLabel = new GUIContent("Color Mode", "The type of gradient to use.");
+        static readonly GUIContent k_BaseColorLabel = new GUIContent("Vertex Color", "The base color of the text vertices.");
+        static readonly GUIContent k_ColorPresetLabel = new GUIContent("Color Preset", "A Color Preset which override the local color settings.");
+        static readonly GUIContent k_ColorGradientLabel = new GUIContent("Color Gradient", "The gradient color applied over the Vertex Color. Can be locally set or driven by a Gradient Asset.");
+        static readonly GUIContent k_CorenerColorsLabel = new GUIContent("Colors", "The color composition of the gradient.");
+        static readonly GUIContent k_OverrideTagsLabel = new GUIContent("Override Tags", "Whether the color settings override the <color> tag.");
+        
+        static readonly GUIContent k_SpacingOptionsLabel = new GUIContent("Spacing Options", "Spacing adjustments between different elements of the text.");
+        static readonly GUIContent k_CharacterSpacingLabel = new GUIContent("Character");
+        static readonly GUIContent k_WordSpacingLabel = new GUIContent("Word");
+        static readonly GUIContent k_LineSpacingLabel = new GUIContent("Line");
+        static readonly GUIContent k_ParagraphSpacingLabel = new GUIContent("Paragraph");
+        
+        static readonly GUIContent k_AlignmentLabel = new GUIContent("Alignment", "Horizontal and vertical aligment of the text within its container.");
+        static readonly GUIContent k_WrapMixLabel = new GUIContent("Wrap Mix (W <-> C)", "How much to favor words versus characters when distributing the text.");
+
+        static readonly GUIContent k_WrappingLabel = new GUIContent("Wrapping", "Wraps text to the next line when reaching the edge of the container.");
+        static readonly GUIContent[] k_WrappingOptions = { new GUIContent("Disabled"), new GUIContent("Enabled") };
+        static readonly GUIContent k_OverflowLabel = new GUIContent("Overflow", "How to display text which goes past the edge of the container.");
+
+        static readonly GUIContent k_MarginsLabel = new GUIContent("Margins", "The space between the text and the edge of its container.");
+        static readonly GUIContent k_GeometrySortingLabel = new GUIContent("Geometry Sorting", "The order in which text geometry is sorted. Used to adjust the way overlapping characters are displayed.");
+        static readonly GUIContent k_RichTextLabel = new GUIContent("Rich Text", "Enables the use of rich text tags such as <color> and <font>.");
+        static readonly GUIContent k_EscapeCharactersLabel = new GUIContent("Parse Escape Characters", "Whether to display strings such as \"\\n\" as is or replace them by the character they represent.");
+        static readonly GUIContent k_VisibleDescenderLabel = new GUIContent("Visible Descender", "Compute descender values from visible characters only. Used to adjust layout behavior when hiding and revealing characters dynamically.");
+        static readonly GUIContent k_SpriteAssetLabel = new GUIContent("Sprite Asset", "The Sprite Asset used when NOT specifically referencing one using <sprite=\"Sprite Asset Name\">.");
+
+        static readonly GUIContent k_HorizontalMappingLabel = new GUIContent("Horizontal Mapping", "Horizontal UV mapping when using a shader with a texture face option.");
+        static readonly GUIContent k_VerticalMappingLabel = new GUIContent("Vertical Mapping", "Vertical UV mapping when using a shader with a texture face option.");
+        static readonly GUIContent k_LineOffsetLabel = new GUIContent("Line Offset", "Adds an horizontal offset to each successive line. Used for slanted texturing.");
+
+        static readonly GUIContent k_KerningLabel = new GUIContent("Kerning", "Enables character specific spacing between pairs of characters.");
+        static readonly GUIContent k_PaddingLabel = new GUIContent("Extra Padding", "Adds some padding between the characters and the edge of the text mesh. Can reduce graphical errors when displaying small text.");
+        
+        static readonly GUIContent k_LeftLabel = new GUIContent("Left");
+        static readonly GUIContent k_TopLabel = new GUIContent("Top");
+        static readonly GUIContent k_RightLabel = new GUIContent("Right");
+        static readonly GUIContent k_BottomLabel = new GUIContent("Bottom");
+
+        protected static readonly GUIContent k_ExtraSettingsLabel = new GUIContent("Extra Settings");
+
+        protected struct Foldout
+        {
+            // Track Inspector foldout panel states, globally.
+            public static bool extraSettings = false;
+            public static bool materialInspector = true;
+        }
+        
+        protected static int s_EventId;
+
+        public int selAlignGridA;
+        public int selAlignGridB;
+        
+        protected SerializedProperty m_TextProp;
+        
+        protected SerializedProperty m_IsRightToLeftProp;
+        protected string m_RtlText;
+
+        protected SerializedProperty m_FontAssetProp;
+
+        protected SerializedProperty m_FontSharedMaterialProp;
+        protected Material[] m_MaterialPresets;
+        protected GUIContent[] m_MaterialPresetNames;
+        protected int m_MaterialPresetSelectionIndex;
+        protected bool m_IsPresetListDirty;
+
+        protected SerializedProperty m_FontStyleProp;
+        
+        protected SerializedProperty m_FontColorProp;
+        protected SerializedProperty m_EnableVertexGradientProp;
+        protected SerializedProperty m_FontColorGradientProp;
+        protected SerializedProperty m_FontColorGradientPresetProp;
+        protected SerializedProperty m_OverrideHtmlColorProp;
+
+        protected SerializedProperty m_FontSizeProp;
+        protected SerializedProperty m_FontSizeBaseProp;
+
+        protected SerializedProperty m_AutoSizingProp;
+        protected SerializedProperty m_FontSizeMinProp;
+        protected SerializedProperty m_FontSizeMaxProp;
+        
+        protected SerializedProperty m_LineSpacingMaxProp;
+        protected SerializedProperty m_CharWidthMaxAdjProp;
+
+        protected SerializedProperty m_CharacterSpacingProp;
+        protected SerializedProperty m_WordSpacingProp;
+        protected SerializedProperty m_LineSpacingProp;
+        protected SerializedProperty m_ParagraphSpacingProp;
+
+        protected SerializedProperty m_TextAlignmentProp;
+
+        protected SerializedProperty m_HorizontalMappingProp;
+        protected SerializedProperty m_VerticalMappingProp;
+        protected SerializedProperty m_UvLineOffsetProp;
+
+        protected SerializedProperty m_EnableWordWrappingProp;
+        protected SerializedProperty m_WordWrappingRatiosProp;
+        protected SerializedProperty m_TextOverflowModeProp;
+        protected SerializedProperty m_PageToDisplayProp;
+        protected SerializedProperty m_LinkedTextComponentProp;
+        protected SerializedProperty m_IsLinkedTextComponentProp;
+
+        protected SerializedProperty m_EnableKerningProp;
+
+        protected SerializedProperty m_IsRichTextProp;
+
+        protected SerializedProperty m_HasFontAssetChangedProp;
+
+        protected SerializedProperty m_EnableExtraPaddingProp;
+        protected SerializedProperty m_CheckPaddingRequiredProp;
+        protected SerializedProperty m_EnableEscapeCharacterParsingProp;
+        protected SerializedProperty m_UseMaxVisibleDescenderProp;
+        protected SerializedProperty m_GeometrySortingOrderProp;
+        
+        protected SerializedProperty m_SpriteAssetProp;
+        
+        protected SerializedProperty m_MarginProp;
+
+        protected SerializedProperty m_ColorModeProp;
+
+        protected bool m_HavePropertiesChanged;
+        
+        protected TMP_Text m_TextComponent;
+        protected RectTransform m_RectTransform;
+        
+        protected Material m_TargetMaterial;
+        
+        protected Vector3[] m_RectCorners = new Vector3[4];
+        protected Vector3[] m_HandlePoints = new Vector3[4];
+        
+        protected virtual void OnEnable()
+        {
+            m_TextProp = serializedObject.FindProperty("m_text");
+            m_IsRightToLeftProp = serializedObject.FindProperty("m_isRightToLeft");
+            m_FontAssetProp = serializedObject.FindProperty("m_fontAsset");
+            m_FontSharedMaterialProp = serializedObject.FindProperty("m_sharedMaterial");
+
+            m_FontStyleProp = serializedObject.FindProperty("m_fontStyle");
+
+            m_FontSizeProp = serializedObject.FindProperty("m_fontSize");
+            m_FontSizeBaseProp = serializedObject.FindProperty("m_fontSizeBase");
+
+            m_AutoSizingProp = serializedObject.FindProperty("m_enableAutoSizing");
+            m_FontSizeMinProp = serializedObject.FindProperty("m_fontSizeMin");
+            m_FontSizeMaxProp = serializedObject.FindProperty("m_fontSizeMax");
+            
+            m_LineSpacingMaxProp = serializedObject.FindProperty("m_lineSpacingMax");
+            m_CharWidthMaxAdjProp = serializedObject.FindProperty("m_charWidthMaxAdj");
+
+            // Colors & Gradient
+            m_FontColorProp = serializedObject.FindProperty("m_fontColor");
+            m_EnableVertexGradientProp = serializedObject.FindProperty("m_enableVertexGradient");
+            m_FontColorGradientProp = serializedObject.FindProperty("m_fontColorGradient");
+            m_FontColorGradientPresetProp = serializedObject.FindProperty("m_fontColorGradientPreset");
+            m_OverrideHtmlColorProp = serializedObject.FindProperty("m_overrideHtmlColors");
+
+            m_CharacterSpacingProp = serializedObject.FindProperty("m_characterSpacing");
+            m_WordSpacingProp = serializedObject.FindProperty("m_wordSpacing");
+            m_LineSpacingProp = serializedObject.FindProperty("m_lineSpacing");
+            m_ParagraphSpacingProp = serializedObject.FindProperty("m_paragraphSpacing");
+
+            m_TextAlignmentProp = serializedObject.FindProperty("m_textAlignment");
+
+            m_HorizontalMappingProp = serializedObject.FindProperty("m_horizontalMapping");
+            m_VerticalMappingProp = serializedObject.FindProperty("m_verticalMapping");
+            m_UvLineOffsetProp = serializedObject.FindProperty("m_uvLineOffset");
+
+            m_EnableWordWrappingProp = serializedObject.FindProperty("m_enableWordWrapping");
+            m_WordWrappingRatiosProp = serializedObject.FindProperty("m_wordWrappingRatios");
+            m_TextOverflowModeProp = serializedObject.FindProperty("m_overflowMode");
+            m_PageToDisplayProp = serializedObject.FindProperty("m_pageToDisplay");
+            m_LinkedTextComponentProp = serializedObject.FindProperty("m_linkedTextComponent");
+            m_IsLinkedTextComponentProp = serializedObject.FindProperty("m_isLinkedTextComponent");
+
+            m_EnableKerningProp = serializedObject.FindProperty("m_enableKerning");
+            
+            m_EnableExtraPaddingProp = serializedObject.FindProperty("m_enableExtraPadding");
+            m_IsRichTextProp = serializedObject.FindProperty("m_isRichText");
+            m_CheckPaddingRequiredProp = serializedObject.FindProperty("checkPaddingRequired");
+            m_EnableEscapeCharacterParsingProp = serializedObject.FindProperty("m_parseCtrlCharacters");
+            m_UseMaxVisibleDescenderProp = serializedObject.FindProperty("m_useMaxVisibleDescender");
+            
+            m_GeometrySortingOrderProp = serializedObject.FindProperty("m_geometrySortingOrder");
+            
+            m_SpriteAssetProp = serializedObject.FindProperty("m_spriteAsset");
+
+            m_MarginProp = serializedObject.FindProperty("m_margin");
+
+            m_HasFontAssetChangedProp = serializedObject.FindProperty("m_hasFontAssetChanged");
+
+            m_ColorModeProp = serializedObject.FindProperty("m_colorMode");
+
+            m_TextComponent = (TMP_Text)target;
+            m_RectTransform = m_TextComponent.rectTransform;
+
+            // Create new Material Editor if one does not exists
+            m_TargetMaterial = m_TextComponent.fontSharedMaterial;
+
+            // Set material inspector visibility
+            if (m_TargetMaterial != null)
+                UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(m_TargetMaterial, Foldout.materialInspector);
+
+            // Find all Material Presets matching the current Font Asset Material
+            m_MaterialPresetNames = GetMaterialPresets();
+
+            // Initialize the Event Listener for Undo Events.
+            Undo.undoRedoPerformed += OnUndoRedo;
+        }
+
+        protected virtual void OnDisable()
+        {
+            // Set material inspector visibility
+            if (m_TargetMaterial != null)
+                Foldout.materialInspector = UnityEditorInternal.InternalEditorUtility.GetIsInspectorExpanded(m_TargetMaterial);
+
+            if (Undo.undoRedoPerformed != null)
+                Undo.undoRedoPerformed -= OnUndoRedo;
+        }
+
+        public override void OnInspectorGUI()
+        {
+            // Make sure Multi selection only includes TMP Text objects.
+            if (IsMixSelectionTypes()) return;
+
+            serializedObject.Update();
+
+            DrawTextInput();
+
+            DrawMainSettings();
+
+            DrawExtraSettings();
+
+            EditorGUILayout.Space();
+
+            if (m_HavePropertiesChanged)
+            {
+                m_HavePropertiesChanged = false;
+                m_TextComponent.havePropertiesChanged = true;
+                m_TextComponent.ComputeMarginSize();
+                EditorUtility.SetDirty(target);
+            }
+
+            serializedObject.ApplyModifiedProperties();
+        }
+
+        public void OnSceneGUI()
+        {
+            if (IsMixSelectionTypes()) return;
+
+            // Margin Frame & Handles
+            m_RectTransform.GetWorldCorners(m_RectCorners);
+            Vector4 marginOffset = m_TextComponent.margin;
+            Vector3 lossyScale = m_RectTransform.lossyScale;
+            
+            m_HandlePoints[0] = m_RectCorners[0] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, marginOffset.w * lossyScale.y, 0));
+            m_HandlePoints[1] = m_RectCorners[1] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, -marginOffset.y * lossyScale.y, 0));
+            m_HandlePoints[2] = m_RectCorners[2] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, -marginOffset.y * lossyScale.y, 0));
+            m_HandlePoints[3] = m_RectCorners[3] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, marginOffset.w * lossyScale.y, 0));
+
+            Handles.DrawSolidRectangleWithOutline(m_HandlePoints, new Color32(255, 255, 255, 0), new Color32(255, 255, 0, 255));
+            
+            // Draw & process FreeMoveHandles
+
+            // LEFT HANDLE
+            Vector3 oldLeft = (m_HandlePoints[0] + m_HandlePoints[1]) * 0.5f;
+            Vector3 newLeft = Handles.FreeMoveHandle(oldLeft, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap);
+            bool hasChanged = false;
+            if (oldLeft != newLeft)
+            {
+                float delta = oldLeft.x - newLeft.x;
+                marginOffset.x += -delta / lossyScale.x;
+                //Debug.Log("Left Margin H0:" + handlePoints[0] + "  H1:" + handlePoints[1]);
+                hasChanged = true;
+            }
+
+            // TOP HANDLE
+            Vector3 oldTop = (m_HandlePoints[1] + m_HandlePoints[2]) * 0.5f;
+            Vector3 newTop = Handles.FreeMoveHandle(oldTop, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap);
+            if (oldTop != newTop)
+            {
+                float delta = oldTop.y - newTop.y;
+                marginOffset.y += delta / lossyScale.y;
+                //Debug.Log("Top Margin H1:" + handlePoints[1] + "  H2:" + handlePoints[2]);   
+                hasChanged = true;
+            }
+
+            // RIGHT HANDLE
+            Vector3 oldRight = (m_HandlePoints[2] + m_HandlePoints[3]) * 0.5f;
+            Vector3 newRight = Handles.FreeMoveHandle(oldRight, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap);
+            if (oldRight != newRight)
+            {
+                float delta = oldRight.x - newRight.x;
+                marginOffset.z += delta / lossyScale.x;
+                hasChanged = true;
+                //Debug.Log("Right Margin H2:" + handlePoints[2] + "  H3:" + handlePoints[3]);
+            }
+
+            // BOTTOM HANDLE
+            Vector3 oldBottom = (m_HandlePoints[3] + m_HandlePoints[0]) * 0.5f;
+            Vector3 newBottom = Handles.FreeMoveHandle(oldBottom, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap);
+            if (oldBottom != newBottom)
+            {
+                float delta = oldBottom.y - newBottom.y;
+                marginOffset.w += -delta / lossyScale.y;
+                hasChanged = true;
+                //Debug.Log("Bottom Margin H0:" + handlePoints[0] + "  H3:" + handlePoints[3]);
+            }
+
+            if (hasChanged)
+            {
+                Undo.RecordObjects(new Object[] {m_RectTransform, m_TextComponent }, "Margin Changes");
+                m_TextComponent.margin = marginOffset;
+                EditorUtility.SetDirty(target);
+            }
+        }
+
+        protected void DrawTextInput()
+        {
+            EditorGUILayout.Space();
+
+            // If the text component is linked, disable the text input box.
+            if (m_IsLinkedTextComponentProp.boolValue)
+            {
+                EditorGUILayout.HelpBox("The Text Input Box is disabled due to this text component being linked to another.", MessageType.Info);
+            }
+            else
+            {
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_TextProp);
+
+                if (EditorGUI.EndChangeCheck() || (m_IsRightToLeftProp.boolValue && string.IsNullOrEmpty(m_RtlText)))
+                {
+                    m_TextComponent.m_inputSource = TMP_Text.TextInputSources.Text;
+                    m_TextComponent.m_isInputParsingRequired = true;
+                    m_HavePropertiesChanged = true;
+
+                    // Handle Left to Right or Right to Left Editor
+                    if (m_IsRightToLeftProp.boolValue)
+                    {
+                        m_RtlText = string.Empty;
+                        string sourceText = m_TextProp.stringValue;
+
+                        // Reverse Text displayed in Text Input Box
+                        for (int i = 0; i < sourceText.Length; i++)
+                        {
+                            m_RtlText += sourceText[sourceText.Length - i - 1];
+                        }
+                    }
+                }
+
+                // Toggle showing Rich Tags
+                m_IsRightToLeftProp.boolValue = EditorGUILayout.Toggle(k_RtlToggleLabel, m_IsRightToLeftProp.boolValue);
+
+                if (m_IsRightToLeftProp.boolValue)
+                {
+                    EditorGUI.BeginChangeCheck();
+                    m_RtlText = EditorGUILayout.TextArea(m_RtlText, TMP_UIStyleManager.wrappingTextArea, GUILayout.Height(EditorGUI.GetPropertyHeight(m_TextProp) - EditorGUIUtility.singleLineHeight), GUILayout.ExpandWidth(true));
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        // Convert RTL input
+                        string sourceText = string.Empty;
+
+                        // Reverse Text displayed in Text Input Box
+                        for (int i = 0; i < m_RtlText.Length; i++)
+                        {
+                            sourceText += m_RtlText[m_RtlText.Length - i - 1];
+                        }
+
+                        m_TextProp.stringValue = sourceText;
+                    }
+                }
+            }
+        }
+
+        protected void DrawMainSettings()
+        {
+            // MAIN SETTINGS SECTION
+            GUILayout.Label(k_MainSettingsLabel, EditorStyles.boldLabel);
+
+            EditorGUI.indentLevel += 1;
+
+            DrawFont();
+
+            DrawColor();
+
+            DrawSpacing();
+
+            DrawAlignment();
+
+            DrawWrappingOverflow();
+
+            DrawTextureMapping();
+            
+            EditorGUI.indentLevel -= 1;
+        }
+
+        void DrawFont()
+        {
+            // Update list of material presets if needed.
+            if (m_IsPresetListDirty)
+                m_MaterialPresetNames = GetMaterialPresets();
+
+            // FONT ASSET
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_FontAssetProp, k_FontAssetLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+                m_HasFontAssetChangedProp.boolValue = true;
+
+                m_IsPresetListDirty = true;
+                m_MaterialPresetSelectionIndex = 0;
+            }
+
+            Rect rect;
+
+            // MATERIAL PRESET
+            if (m_MaterialPresetNames != null)
+            {
+                EditorGUI.BeginChangeCheck();
+                rect = EditorGUILayout.GetControlRect(false, 17);
+
+                float oldHeight = EditorStyles.popup.fixedHeight;
+                EditorStyles.popup.fixedHeight = rect.height;
+
+                int oldSize = EditorStyles.popup.fontSize;
+                EditorStyles.popup.fontSize = 11;
+
+                m_MaterialPresetSelectionIndex = EditorGUI.Popup(rect, k_MaterialPresetLabel, m_MaterialPresetSelectionIndex, m_MaterialPresetNames);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_FontSharedMaterialProp.objectReferenceValue = m_MaterialPresets[m_MaterialPresetSelectionIndex];
+                    m_HavePropertiesChanged = true;
+                }
+
+                //Make sure material preset selection index matches the selection
+                if (m_MaterialPresetSelectionIndex < m_MaterialPresetNames.Length && m_TargetMaterial != m_MaterialPresets[m_MaterialPresetSelectionIndex] && !m_HavePropertiesChanged)
+                    m_IsPresetListDirty = true;
+
+                EditorStyles.popup.fixedHeight = oldHeight;
+                EditorStyles.popup.fontSize = oldSize;
+            }
+
+            // FONT STYLE
+            EditorGUI.BeginChangeCheck();
+
+            int v1, v2, v3, v4, v5, v6, v7;
+
+            if (EditorGUIUtility.wideMode)
+            {
+                rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f);
+
+                EditorGUI.PrefixLabel(rect, k_FontStyleLabel);
+
+                int styleValue = m_FontStyleProp.intValue;
+
+                rect.x += EditorGUIUtility.labelWidth;
+                rect.width -= EditorGUIUtility.labelWidth;
+
+                rect.width = Mathf.Max(25f, rect.width / 7f);
+
+                v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold
+                rect.x += rect.width;
+                v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics
+                rect.x += rect.width;
+                v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline
+                rect.x += rect.width;
+                v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough
+                rect.x += rect.width;
+                
+                int selected = 0;
+                
+                EditorGUI.BeginChangeCheck();
+                v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase
+                if (EditorGUI.EndChangeCheck() && v4 > 0)
+                {
+                    selected = v4;
+                }
+                rect.x += rect.width;
+                EditorGUI.BeginChangeCheck();
+                v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase
+                if (EditorGUI.EndChangeCheck() && v5 > 0)
+                {
+                    selected = v5;
+                }
+                rect.x += rect.width;
+                EditorGUI.BeginChangeCheck();
+                v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps
+                if (EditorGUI.EndChangeCheck() && v6 > 0)
+                {
+                    selected = v6;
+                }
+
+                if (selected > 0)
+                {
+                    v4 = selected == 8 ? 8 : 0;
+                    v5 = selected == 16 ? 16 : 0;
+                    v6 = selected == 32 ? 32 : 0;
+                }
+            }
+            else
+            {
+                rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f);
+
+                EditorGUI.PrefixLabel(rect, k_FontStyleLabel);
+
+                int styleValue = m_FontStyleProp.intValue;
+
+                rect.x += EditorGUIUtility.labelWidth;
+                rect.width -= EditorGUIUtility.labelWidth;
+                rect.width = Mathf.Max(25f, rect.width / 4f);
+
+                v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold
+                rect.x += rect.width;
+                v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics
+                rect.x += rect.width;
+                v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline
+                rect.x += rect.width;
+                v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough
+
+                rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f);
+                
+                rect.x += EditorGUIUtility.labelWidth;
+                rect.width -= EditorGUIUtility.labelWidth;
+
+                rect.width = Mathf.Max(25f, rect.width / 4f);
+
+                int selected = 0;
+                
+                EditorGUI.BeginChangeCheck();
+                v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase
+                if (EditorGUI.EndChangeCheck() && v4 > 0)
+                {
+                    selected = v4;
+                }
+                rect.x += rect.width;
+                EditorGUI.BeginChangeCheck();
+                v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase
+                if (EditorGUI.EndChangeCheck() && v5 > 0)
+                {
+                    selected = v5;
+                }
+                rect.x += rect.width;
+                EditorGUI.BeginChangeCheck();
+                v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps
+                if (EditorGUI.EndChangeCheck() && v6 > 0)
+                {
+                    selected = v6;
+                }
+
+                if (selected > 0)
+                {
+                    v4 = selected == 8 ? 8 : 0;
+                    v5 = selected == 16 ? 16 : 0;
+                    v6 = selected == 32 ? 32 : 0;
+                }
+            }
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_FontStyleProp.intValue = v1 + v2 + v3 + v4 + v5 + v6 + v7;
+                m_HavePropertiesChanged = true;
+            }
+
+            // FONT SIZE
+            EditorGUI.BeginChangeCheck();
+            
+            EditorGUI.BeginDisabledGroup(m_AutoSizingProp.boolValue);
+            EditorGUILayout.PropertyField(m_FontSizeProp, k_FontSizeLabel, GUILayout.MaxWidth(EditorGUIUtility.labelWidth + 50f));
+            EditorGUI.EndDisabledGroup();
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_FontSizeBaseProp.floatValue = m_FontSizeProp.floatValue;
+                m_HavePropertiesChanged = true;
+            }
+
+            EditorGUI.indentLevel += 1;
+            
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_AutoSizingProp, k_AutoSizeLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                if (m_AutoSizingProp.boolValue == false)
+                    m_FontSizeProp.floatValue = m_FontSizeBaseProp.floatValue;
+
+                m_HavePropertiesChanged = true;
+            }
+
+            // Show auto sizing options
+            if (m_AutoSizingProp.boolValue)
+            {
+                rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
+
+                EditorGUI.PrefixLabel(rect, k_AutoSizeOptionsLabel);
+
+                int previousIndent = EditorGUI.indentLevel;
+
+                EditorGUI.indentLevel = 0;
+
+                rect.width = (rect.width - EditorGUIUtility.labelWidth) / 4f;
+                rect.x += EditorGUIUtility.labelWidth;
+
+                EditorGUIUtility.labelWidth = 24;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.PropertyField(rect, m_FontSizeMinProp, k_MinLabel);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_FontSizeMinProp.floatValue = Mathf.Min(m_FontSizeMinProp.floatValue, m_FontSizeMaxProp.floatValue);
+                    m_HavePropertiesChanged = true;
+                }
+                rect.x += rect.width;
+
+                EditorGUIUtility.labelWidth = 27;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.PropertyField(rect, m_FontSizeMaxProp, k_MaxLabel);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_FontSizeMaxProp.floatValue = Mathf.Max(m_FontSizeMinProp.floatValue, m_FontSizeMaxProp.floatValue);
+                    m_HavePropertiesChanged = true;
+                }
+                rect.x += rect.width;
+
+                EditorGUI.BeginChangeCheck();
+                EditorGUIUtility.labelWidth = 36;
+                EditorGUI.PropertyField(rect, m_CharWidthMaxAdjProp, k_WdLabel);
+                rect.x += rect.width;
+                EditorGUIUtility.labelWidth = 28;
+                EditorGUI.PropertyField(rect, m_LineSpacingMaxProp, k_LineLabel);
+
+                EditorGUIUtility.labelWidth = 0;
+
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_CharWidthMaxAdjProp.floatValue = Mathf.Clamp(m_CharWidthMaxAdjProp.floatValue, 0, 50);
+                    m_LineSpacingMaxProp.floatValue = Mathf.Min(0, m_LineSpacingMaxProp.floatValue);
+                    m_HavePropertiesChanged = true;
+                }
+                
+                EditorGUI.indentLevel = previousIndent;
+            }
+
+            EditorGUI.indentLevel -= 1;
+
+            
+
+            EditorGUILayout.Space();
+        }
+
+        void DrawColor()
+        {
+            // FACE VERTEX COLOR
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_FontColorProp, k_BaseColorLabel);
+
+            EditorGUILayout.PropertyField(m_EnableVertexGradientProp, k_ColorGradientLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+            }
+            
+            EditorGUIUtility.fieldWidth = 0;
+
+            if (m_EnableVertexGradientProp.boolValue)
+            {
+                EditorGUI.indentLevel += 1;
+                
+                EditorGUI.BeginChangeCheck();
+                
+                EditorGUILayout.PropertyField(m_FontColorGradientPresetProp, k_ColorPresetLabel);
+                
+                SerializedObject obj = null;
+
+                SerializedProperty colorMode;
+
+                SerializedProperty topLeft;
+                SerializedProperty topRight;
+                SerializedProperty bottomLeft;
+                SerializedProperty bottomRight;
+
+                if (m_FontColorGradientPresetProp.objectReferenceValue == null)
+                {
+                    colorMode = m_ColorModeProp;
+                    topLeft = m_FontColorGradientProp.FindPropertyRelative("topLeft");
+                    topRight = m_FontColorGradientProp.FindPropertyRelative("topRight");
+                    bottomLeft = m_FontColorGradientProp.FindPropertyRelative("bottomLeft");
+                    bottomRight = m_FontColorGradientProp.FindPropertyRelative("bottomRight");
+                }
+                else
+                {
+                    obj = new SerializedObject(m_FontColorGradientPresetProp.objectReferenceValue);
+                    colorMode = obj.FindProperty("colorMode");
+                    topLeft = obj.FindProperty("topLeft");
+                    topRight = obj.FindProperty("topRight");
+                    bottomLeft = obj.FindProperty("bottomLeft");
+                    bottomRight = obj.FindProperty("bottomRight");
+                }
+
+                EditorGUILayout.PropertyField(colorMode, k_ColorModeLabel);
+
+                var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+
+                EditorGUI.PrefixLabel(rect, k_CorenerColorsLabel);
+
+                rect.x += EditorGUIUtility.labelWidth;
+                rect.width = rect.width - EditorGUIUtility.labelWidth;
+
+                switch ((ColorMode)colorMode.enumValueIndex)
+                {
+                    case ColorMode.Single:
+                        TMP_EditorUtility.DrawColorProperty(rect, topLeft);
+
+                        topRight.colorValue = topLeft.colorValue;
+                        bottomLeft.colorValue = topLeft.colorValue;
+                        bottomRight.colorValue = topLeft.colorValue;
+                        break;
+                    case ColorMode.HorizontalGradient:
+                        rect.width /= 2f;
+
+                        TMP_EditorUtility.DrawColorProperty(rect, topLeft);
+
+                        rect.x += rect.width;
+                    
+                        TMP_EditorUtility.DrawColorProperty(rect, topRight);
+                        
+                        bottomLeft.colorValue = topLeft.colorValue;
+                        bottomRight.colorValue = topRight.colorValue;
+                        break;
+                    case ColorMode.VerticalGradient:
+                        TMP_EditorUtility.DrawColorProperty(rect, topLeft);
+
+                        rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                        rect.x += EditorGUIUtility.labelWidth;
+                
+                        TMP_EditorUtility.DrawColorProperty(rect, bottomLeft);
+                        
+                        topRight.colorValue = topLeft.colorValue;
+                        bottomRight.colorValue = bottomLeft.colorValue;
+                        break;
+                    case ColorMode.FourCornersGradient:
+                        rect.width /= 2f;
+
+                        TMP_EditorUtility.DrawColorProperty(rect, topLeft);
+
+                        rect.x += rect.width;
+                    
+                        TMP_EditorUtility.DrawColorProperty(rect, topRight);
+
+                        rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                        rect.x += EditorGUIUtility.labelWidth;
+                        rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
+                
+                        TMP_EditorUtility.DrawColorProperty(rect, bottomLeft);
+
+                        rect.x += rect.width;
+
+                        TMP_EditorUtility.DrawColorProperty(rect, bottomRight);
+                        break;
+                }
+                
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_HavePropertiesChanged = true;
+                    if (obj != null)
+                    {
+                        obj.ApplyModifiedProperties();
+                        TMPro_EventManager.ON_COLOR_GRAIDENT_PROPERTY_CHANGED(m_FontColorGradientPresetProp.objectReferenceValue as TMP_ColorGradient);
+                    }
+                }
+
+                EditorGUI.indentLevel -= 1;
+            }
+            
+            EditorGUILayout.PropertyField(m_OverrideHtmlColorProp, k_OverrideTagsLabel);
+            
+            EditorGUILayout.Space();
+        }
+
+        void DrawSpacing()
+        {
+            // CHARACTER, LINE & PARAGRAPH SPACING
+            EditorGUI.BeginChangeCheck();
+            
+            Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
+            
+            EditorGUI.PrefixLabel(rect, k_SpacingOptionsLabel);
+
+            int oldIndent = EditorGUI.indentLevel;
+            EditorGUI.indentLevel = 0;
+
+            rect.x += EditorGUIUtility.labelWidth;
+            rect.width = (rect.width - EditorGUIUtility.labelWidth - 3f) / 2f;
+            
+            EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f);
+            
+            EditorGUI.PropertyField(rect, m_CharacterSpacingProp, k_CharacterSpacingLabel);
+            rect.x += rect.width + 3f;
+            EditorGUI.PropertyField(rect, m_WordSpacingProp, k_WordSpacingLabel);
+
+            rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight);
+            EditorGUIUtility.labelWidth = 0;
+            rect.x += EditorGUIUtility.labelWidth;
+            rect.width = (rect.width - EditorGUIUtility.labelWidth -3f) / 2f;
+            EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f);
+
+            EditorGUI.PropertyField(rect, m_LineSpacingProp, k_LineSpacingLabel);
+            rect.x += rect.width + 3f;
+            EditorGUI.PropertyField(rect, m_ParagraphSpacingProp, k_ParagraphSpacingLabel);
+
+            EditorGUIUtility.labelWidth = 0;
+            EditorGUI.indentLevel = oldIndent;
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+            }
+        }
+
+        void DrawAlignment()
+        {
+            // TEXT ALIGNMENT
+            EditorGUI.BeginChangeCheck();
+
+            EditorGUILayout.PropertyField(m_TextAlignmentProp, k_AlignmentLabel);
+
+            // WRAPPING RATIOS shown if Justified mode is selected.
+            if (((_HorizontalAlignmentOptions)m_TextAlignmentProp.intValue & _HorizontalAlignmentOptions.Justified) == _HorizontalAlignmentOptions.Justified || ((_HorizontalAlignmentOptions)m_TextAlignmentProp.intValue & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush)
+                DrawPropertySlider(k_WrapMixLabel, m_WordWrappingRatiosProp);
+
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+
+            EditorGUILayout.Space();
+        }
+
+        void DrawWrappingOverflow()
+        {
+            // TEXT WRAPPING
+            EditorGUI.BeginChangeCheck();
+            int wrapSelection = EditorGUILayout.Popup(k_WrappingLabel, m_EnableWordWrappingProp.boolValue ? 1 : 0, k_WrappingOptions);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_EnableWordWrappingProp.boolValue = wrapSelection == 1;
+                m_HavePropertiesChanged = true;
+                m_TextComponent.m_isInputParsingRequired = true;
+            }
+            
+            // TEXT OVERFLOW
+            EditorGUI.BeginChangeCheck();
+
+            // Cache Reference to Linked Text Component
+            TMP_Text oldLinkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text;
+
+            if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Linked)
+            {
+                EditorGUILayout.BeginHorizontal();
+                EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel);
+
+                EditorGUILayout.PropertyField(m_LinkedTextComponentProp, GUIContent.none);
+                
+                EditorGUILayout.EndHorizontal();
+
+                if (GUI.changed)
+                {
+                    TMP_Text linkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text;
+
+                    if (linkedComponent)
+                        m_TextComponent.linkedTextComponent = linkedComponent;
+
+                }
+            }
+            else if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Page)
+            {
+                EditorGUILayout.BeginHorizontal();
+                EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel);
+                EditorGUILayout.PropertyField(m_PageToDisplayProp, GUIContent.none);
+                EditorGUILayout.EndHorizontal();
+
+                if (oldLinkedComponent)
+                    m_TextComponent.linkedTextComponent = null;
+            }
+            else
+            {
+                EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel);
+
+                if (oldLinkedComponent)
+                    m_TextComponent.linkedTextComponent = null;
+            }
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+                m_TextComponent.m_isInputParsingRequired = true;
+            }
+
+            EditorGUILayout.Space();
+        }
+
+        protected abstract void DrawExtraSettings();
+
+        protected void DrawMargins()
+        {
+            EditorGUI.BeginChangeCheck();
+            DrawMarginProperty(m_MarginProp, k_MarginsLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+            }
+
+            EditorGUILayout.Space();
+        }
+
+        protected void DrawGeometrySorting()
+        {
+            EditorGUI.BeginChangeCheck();
+
+            EditorGUILayout.PropertyField(m_GeometrySortingOrderProp, k_GeometrySortingLabel);
+
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+
+            EditorGUILayout.Space();
+        }
+
+        protected void DrawRichText()
+        {
+            EditorGUI.BeginChangeCheck();
+                
+            EditorGUILayout.PropertyField(m_IsRichTextProp, k_RichTextLabel);
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+        }
+
+        protected void DrawParsing()
+        {
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_EnableEscapeCharacterParsingProp, k_EscapeCharactersLabel);
+            EditorGUILayout.PropertyField(m_UseMaxVisibleDescenderProp, k_VisibleDescenderLabel);
+            
+            EditorGUILayout.Space();
+
+            EditorGUILayout.PropertyField(m_SpriteAssetProp, k_SpriteAssetLabel, true);
+
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+
+            EditorGUILayout.Space();
+        }
+
+        protected void DrawTextureMapping()
+        {
+            // TEXTURE MAPPING OPTIONS
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_HorizontalMappingProp, k_HorizontalMappingLabel);
+            EditorGUILayout.PropertyField(m_VerticalMappingProp, k_VerticalMappingLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+            }
+
+            // UV OPTIONS
+            if (m_HorizontalMappingProp.enumValueIndex > 0)
+            {
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_UvLineOffsetProp, k_LineOffsetLabel, GUILayout.MinWidth(70f));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_HavePropertiesChanged = true;
+                }
+            }
+
+            EditorGUILayout.Space();
+        }
+
+        protected void DrawKerning()
+        {
+            // KERNING
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_EnableKerningProp, k_KerningLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+            }
+        }
+
+        protected void DrawPadding()
+        {
+            // EXTRA PADDING
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_EnableExtraPaddingProp, k_PaddingLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+                m_CheckPaddingRequiredProp.boolValue = true;
+            }
+        }
+
+        /// <summary>
+        /// Method to retrieve the material presets that match the currently selected font asset.
+        /// </summary>
+        protected GUIContent[] GetMaterialPresets()
+        {
+            TMP_FontAsset fontAsset = m_FontAssetProp.objectReferenceValue as TMP_FontAsset;
+            if (fontAsset == null) return null;
+
+            m_MaterialPresets = TMP_EditorUtility.FindMaterialReferences(fontAsset);
+            m_MaterialPresetNames = new GUIContent[m_MaterialPresets.Length];
+
+            for (int i = 0; i < m_MaterialPresetNames.Length; i++)
+            {
+                m_MaterialPresetNames[i] = new GUIContent(m_MaterialPresets[i].name);
+
+                if (m_TargetMaterial.GetInstanceID() == m_MaterialPresets[i].GetInstanceID())
+                    m_MaterialPresetSelectionIndex = i;
+            }
+
+            m_IsPresetListDirty = false;
+
+            return m_MaterialPresetNames;
+        }
+
+        // DRAW MARGIN PROPERTY
+        protected void DrawMarginProperty(SerializedProperty property, GUIContent label)
+        {
+            Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18);
+
+            EditorGUI.BeginProperty(rect, label, property);
+
+            Rect pos0 = new Rect(rect.x + 15, rect.y + 2, rect.width - 15, 18);
+
+            float width = rect.width + 3;
+            pos0.width = EditorGUIUtility.labelWidth;
+            GUI.Label(pos0, label);
+
+            var vec = property.vector4Value;
+
+            float widthB = width - EditorGUIUtility.labelWidth;
+            float fieldWidth = widthB / 4;
+            pos0.width = Mathf.Max(fieldWidth - 5, 45f);
+
+            // Labels
+            pos0.x = EditorGUIUtility.labelWidth + 15;
+            GUI.Label(pos0, k_LeftLabel);
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, k_TopLabel);
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, k_RightLabel);
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, k_BottomLabel);
+
+            pos0.y += 18;
+
+            pos0.x = EditorGUIUtility.labelWidth;
+            vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x);
+
+            pos0.x += fieldWidth;
+            vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y);
+
+            pos0.x += fieldWidth;
+            vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z);
+
+            pos0.x += fieldWidth;
+            vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w);
+
+            property.vector4Value = vec;
+
+            EditorGUI.EndProperty();
+        }
+
+        protected void DrawPropertySlider(GUIContent label, SerializedProperty property)
+        {
+            Rect rect = EditorGUILayout.GetControlRect(false, 17);
+
+            GUIContent content = label ?? GUIContent.none;
+            EditorGUI.Slider(new Rect(rect.x, rect.y, rect.width, rect.height), property, 0.0f, 1.0f, content);
+        }
+
+        protected abstract bool IsMixSelectionTypes();
+
+        // Special Handling of Undo / Redo Events.
+        protected abstract void OnUndoRedo();
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..87bd7391e6e5dd1ba979677d11703fa0045e870b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 91950f78729ab144aa36e94690b28fad
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ed87b504c0f5d44fb64d9114c7558352741f5380
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs
@@ -0,0 +1,534 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+    /// <summary>Base class for TextMesh Pro shader GUIs.</summary>
+    public abstract class TMP_BaseShaderGUI : ShaderGUI
+    {
+        /// <summary>Representation of a #pragma shader_feature.</summary>
+        /// <description>It is assumed that the first feature option is for no keyword (underscores).</description>
+        protected class ShaderFeature
+        {
+            public string undoLabel;
+
+            public GUIContent label;
+
+            /// <summary>The keyword labels, for display. Include the no-keyword as the first option.</summary>
+            public GUIContent[] keywordLabels;
+
+            /// <summary>The shader keywords. Exclude the no-keyword option.</summary>
+            public string[] keywords;
+
+            int m_State;
+
+            public bool Active
+            {
+                get { return m_State >= 0; }
+            }
+
+            public int State
+            {
+                get { return m_State; }
+            }
+
+            public void ReadState(Material material)
+            {
+                for (int i = 0; i < keywords.Length; i++)
+                {
+                    if (material.IsKeywordEnabled(keywords[i]))
+                    {
+                        m_State = i;
+                        return;
+                    }
+                }
+
+                m_State = -1;
+            }
+
+            public void SetActive(bool active, Material material)
+            {
+                m_State = active ? 0 : -1;
+                SetStateKeywords(material);
+            }
+
+            public void DoPopup(MaterialEditor editor, Material material)
+            {
+                EditorGUI.BeginChangeCheck();
+                int selection = EditorGUILayout.Popup(label, m_State + 1, keywordLabels);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_State = selection - 1;
+                    editor.RegisterPropertyChangeUndo(undoLabel);
+                    SetStateKeywords(material);
+                }
+            }
+
+            void SetStateKeywords(Material material)
+            {
+                for (int i = 0; i < keywords.Length; i++)
+                {
+                    if (i == m_State)
+                    {
+                        material.EnableKeyword(keywords[i]);
+                    }
+                    else
+                    {
+                        material.DisableKeyword(keywords[i]);
+                    }
+                }
+            }
+        }
+
+        static GUIContent s_TempLabel = new GUIContent();
+
+        protected static bool s_DebugExtended;
+
+        static int s_UndoRedoCount, s_LastSeenUndoRedoCount;
+
+        static float[][] s_TempFloats =
+        {
+            null, new float[1], new float[2], new float[3], new float[4]
+        };
+
+        protected static GUIContent[] s_XywhVectorLabels =
+        {
+            new GUIContent("X"),
+            new GUIContent("Y"),
+            new GUIContent("W", "Width"),
+            new GUIContent("H", "Height")
+        };
+
+        protected static GUIContent[] s_LbrtVectorLabels =
+        {
+            new GUIContent("L", "Left"),
+            new GUIContent("B", "Bottom"),
+            new GUIContent("R", "Right"),
+            new GUIContent("T", "Top")
+        };
+
+        static TMP_BaseShaderGUI()
+        {
+            // Keep track of how many undo/redo events happened.
+            Undo.undoRedoPerformed += () => s_UndoRedoCount += 1;
+        }
+
+        bool m_IsNewGUI = true;
+
+        float m_DragAndDropMinY;
+
+        protected MaterialEditor m_Editor;
+
+        protected Material m_Material;
+
+        protected MaterialProperty[] m_Properties;
+
+        void PrepareGUI()
+        {
+            m_IsNewGUI = false;
+            ShaderUtilities.GetShaderPropertyIDs();
+
+            // New GUI just got constructed. This happens in response to a selection,
+            // but also after undo/redo events.
+            if (s_LastSeenUndoRedoCount != s_UndoRedoCount)
+            {
+                // There's been at least one undo/redo since the last time this GUI got constructed.
+                // Maybe the undo/redo was for this material? Assume that is was.
+                TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material as Material);
+            }
+
+            s_LastSeenUndoRedoCount = s_UndoRedoCount;
+        }
+
+        public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
+        {
+            m_Editor = materialEditor;
+            m_Material = materialEditor.target as Material;
+            this.m_Properties = properties;
+
+            if (m_IsNewGUI)
+            {
+                PrepareGUI();
+            }
+
+            DoDragAndDropBegin();
+            EditorGUI.BeginChangeCheck();
+            DoGUI();
+            if (EditorGUI.EndChangeCheck())
+            {
+                TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material);
+            }
+
+            DoDragAndDropEnd();
+        }
+
+        /// <summary>Override this method to create the specific shader GUI.</summary>
+        protected abstract void DoGUI();
+
+        static string[] s_PanelStateLabel = new string[] { "\t- <i>Click to collapse</i> -", "\t- <i>Click to expand</i>  -" };
+
+        protected bool BeginPanel(string panel, bool expanded)
+        {
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+
+            Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18));
+            r.x += 20;
+            r.width += 6;
+
+            bool enabled = GUI.enabled;
+            GUI.enabled = true;
+            expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle);
+            r.width -= 30;
+            EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel);
+            GUI.enabled = enabled;
+
+            EditorGUI.indentLevel += 1;
+            EditorGUI.BeginDisabledGroup(false);
+
+            return expanded;
+        }
+
+        protected bool BeginPanel(string panel, ShaderFeature feature, bool expanded, bool readState = true)
+        {
+            if (readState)
+            {
+                feature.ReadState(m_Material);
+            }
+
+            EditorGUI.BeginChangeCheck();
+
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.BeginHorizontal();
+
+            Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 20, GUILayout.Width(20f)));
+            bool active = EditorGUI.Toggle(r, feature.Active);
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_Editor.RegisterPropertyChangeUndo(feature.undoLabel);
+                feature.SetActive(active, m_Material);
+            }
+
+            r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18));
+            r.width += 6;
+
+            bool enabled = GUI.enabled;
+            GUI.enabled = true;
+            expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle);
+            r.width -= 10;
+            EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel);
+            GUI.enabled = enabled;
+
+            GUILayout.EndHorizontal();
+
+            EditorGUI.indentLevel += 1;
+            EditorGUI.BeginDisabledGroup(!active);
+
+            return expanded;
+        }
+
+        public void EndPanel()
+        {
+            EditorGUI.EndDisabledGroup();
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.EndVertical();
+        }
+
+        MaterialProperty BeginProperty(string name)
+        {
+            MaterialProperty property = FindProperty(name, m_Properties);
+            EditorGUI.BeginChangeCheck();
+            EditorGUI.showMixedValue = property.hasMixedValue;
+            m_Editor.BeginAnimatedCheck(Rect.zero, property);
+
+            return property;
+        }
+
+        bool EndProperty()
+        {
+            m_Editor.EndAnimatedCheck();
+            EditorGUI.showMixedValue = false;
+            return EditorGUI.EndChangeCheck();
+        }
+
+        protected void DoPopup(string name, string label, GUIContent[] options)
+        {
+            MaterialProperty property = BeginProperty(name);
+            s_TempLabel.text = label;
+            int index = EditorGUILayout.Popup(s_TempLabel, (int)property.floatValue, options);
+            if (EndProperty())
+            {
+                property.floatValue = index;
+            }
+        }
+
+        protected void DoCubeMap(string name, string label)
+        {
+            DoTexture(name, label, typeof(Cubemap));
+        }
+
+        protected void DoTexture2D(string name, string label, bool withTilingOffset = false, string[] speedNames = null)
+        {
+            DoTexture(name, label, typeof(Texture2D), withTilingOffset, speedNames);
+        }
+
+        void DoTexture(string name, string label, System.Type type, bool withTilingOffset = false, string[] speedNames = null)
+        {
+            MaterialProperty property = BeginProperty(name);
+            Rect rect = EditorGUILayout.GetControlRect(true, 60f);
+            float totalWidth = rect.width;
+            rect.width = EditorGUIUtility.labelWidth + 60f;
+            s_TempLabel.text = label;
+            Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false);
+
+            if (EndProperty())
+            {
+                property.textureValue = tex as Texture;
+            }
+
+            rect.x += rect.width + 4f;
+            rect.width = totalWidth - rect.width - 4f;
+            rect.height = EditorGUIUtility.singleLineHeight;
+
+            if (withTilingOffset)
+            {
+                DoTilingOffset(rect, property);
+                rect.y += (rect.height + 2f) * 2f;
+            }
+
+            if (speedNames != null)
+            {
+                DoUVSpeed(rect, speedNames);
+            }
+        }
+
+        void DoTilingOffset(Rect rect, MaterialProperty property)
+        {
+            float labelWidth = EditorGUIUtility.labelWidth;
+            int indentLevel = EditorGUI.indentLevel;
+            EditorGUI.indentLevel = 0;
+            EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f);
+
+            Vector4 vector = property.textureScaleAndOffset;
+
+            bool changed = false;
+            float[] values = s_TempFloats[2];
+
+            s_TempLabel.text = "Tiling";
+            Rect vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel);
+            values[0] = vector.x;
+            values[1] = vector.y;
+            EditorGUI.BeginChangeCheck();
+            EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values);
+            if (EndProperty())
+            {
+                vector.x = values[0];
+                vector.y = values[1];
+                changed = true;
+            }
+
+            rect.y += rect.height + 2f;
+            s_TempLabel.text = "Offset";
+            vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel);
+            values[0] = vector.z;
+            values[1] = vector.w;
+            EditorGUI.BeginChangeCheck();
+            EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values);
+            if (EndProperty())
+            {
+                vector.z = values[0];
+                vector.w = values[1];
+                changed = true;
+            }
+
+            if (changed)
+            {
+                property.textureScaleAndOffset = vector;
+            }
+
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUI.indentLevel = indentLevel;
+        }
+
+        protected void DoUVSpeed(Rect rect, string[] names)
+        {
+            float labelWidth = EditorGUIUtility.labelWidth;
+            int indentLevel = EditorGUI.indentLevel;
+            EditorGUI.indentLevel = 0;
+            EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f);
+
+            s_TempLabel.text = "Speed";
+            rect = EditorGUI.PrefixLabel(rect, s_TempLabel);
+
+            EditorGUIUtility.labelWidth = 13f;
+            rect.width = rect.width * 0.5f - 1f;
+            DoFloat(rect, names[0], "X");
+            rect.x += rect.width + 2f;
+            DoFloat(rect, names[1], "Y");
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUI.indentLevel = indentLevel;
+        }
+
+        protected void DoToggle(string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            s_TempLabel.text = label;
+            bool value = EditorGUILayout.Toggle(s_TempLabel, property.floatValue == 1f);
+            if (EndProperty())
+            {
+                property.floatValue = value ? 1f : 0f;
+            }
+        }
+
+        protected void DoFloat(string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            Rect rect = EditorGUILayout.GetControlRect();
+            rect.width = EditorGUIUtility.labelWidth + 55f;
+            s_TempLabel.text = label;
+            float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue);
+            if (EndProperty())
+            {
+                property.floatValue = value;
+            }
+        }
+
+        protected void DoColor(string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            s_TempLabel.text = label;
+            Color value = EditorGUI.ColorField(EditorGUILayout.GetControlRect(), s_TempLabel, property.colorValue);
+            if (EndProperty())
+            {
+                property.colorValue = value;
+            }
+        }
+
+        void DoFloat(Rect rect, string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            s_TempLabel.text = label;
+            float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue);
+            if (EndProperty())
+            {
+                property.floatValue = value;
+            }
+        }
+
+        protected void DoSlider(string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            Vector2 range = property.rangeLimits;
+            s_TempLabel.text = label;
+            float value = EditorGUI.Slider(
+                EditorGUILayout.GetControlRect(), s_TempLabel, property.floatValue, range.x, range.y
+            );
+            if (EndProperty())
+            {
+                property.floatValue = value;
+            }
+        }
+
+        protected void DoVector3(string name, string label)
+        {
+            MaterialProperty property = BeginProperty(name);
+            s_TempLabel.text = label;
+            Vector4 value = EditorGUILayout.Vector3Field(s_TempLabel, property.vectorValue);
+            if (EndProperty())
+            {
+                property.vectorValue = value;
+            }
+        }
+
+        protected void DoVector(string name, string label, GUIContent[] subLabels)
+        {
+            MaterialProperty property = BeginProperty(name);
+            Rect rect = EditorGUILayout.GetControlRect();
+            s_TempLabel.text = label;
+            rect = EditorGUI.PrefixLabel(rect, s_TempLabel);
+            Vector4 vector = property.vectorValue;
+
+            float[] values = s_TempFloats[subLabels.Length];
+            for (int i = 0; i < subLabels.Length; i++)
+            {
+                values[i] = vector[i];
+            }
+
+            EditorGUI.MultiFloatField(rect, subLabels, values);
+            if (EndProperty())
+            {
+                for (int i = 0; i < subLabels.Length; i++)
+                {
+                    vector[i] = values[i];
+                }
+
+                property.vectorValue = vector;
+            }
+        }
+
+        void DoDragAndDropBegin()
+        {
+            m_DragAndDropMinY = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)).y;
+        }
+
+        void DoDragAndDropEnd()
+        {
+            Rect rect = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+            Event evt = Event.current;
+            if (evt.type == EventType.DragUpdated)
+            {
+                DragAndDrop.visualMode = DragAndDropVisualMode.Generic;
+                evt.Use();
+            }
+            else if (
+                evt.type == EventType.DragPerform &&
+                Rect.MinMaxRect(rect.xMin, m_DragAndDropMinY, rect.xMax, rect.yMax).Contains(evt.mousePosition)
+            )
+            {
+                DragAndDrop.AcceptDrag();
+                evt.Use();
+                Material droppedMaterial = DragAndDrop.objectReferences[0] as Material;
+                if (droppedMaterial && droppedMaterial != m_Material)
+                {
+                    PerformDrop(droppedMaterial);
+                }
+            }
+        }
+
+        void PerformDrop(Material droppedMaterial)
+        {
+            Texture droppedTex = droppedMaterial.GetTexture(ShaderUtilities.ID_MainTex);
+            if (!droppedTex)
+            {
+                return;
+            }
+
+            Texture currentTex = m_Material.GetTexture(ShaderUtilities.ID_MainTex);
+            TMP_FontAsset requiredFontAsset = null;
+            if (droppedTex != currentTex)
+            {
+                requiredFontAsset = TMP_EditorUtility.FindMatchingFontAsset(droppedMaterial);
+                if (!requiredFontAsset)
+                {
+                    return;
+                }
+            }
+
+            foreach (GameObject o in Selection.gameObjects)
+            {
+                if (requiredFontAsset)
+                {
+                    TMP_Text textComponent = o.GetComponent<TMP_Text>();
+                    if (textComponent)
+                    {
+                        Undo.RecordObject(textComponent, "Font Asset Change");
+                        textComponent.font = requiredFontAsset;
+                    }
+                }
+
+                TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(o, m_Material, droppedMaterial);
+                EditorUtility.SetDirty(o);
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f07bd856c562c49c438346398adb61605cca57f0
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 438efd46088d408d8a53f707fa68d976
+timeCreated: 1469844810
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d35d539272b8524877c3bac6870db66c270316b8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs
@@ -0,0 +1,85 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+    public class TMP_BitmapShaderGUI : TMP_BaseShaderGUI
+    {
+        static bool s_Face = true;
+
+        protected override void DoGUI()
+        {
+            s_Face = BeginPanel("Face", s_Face);
+            if (s_Face)
+            {
+                DoFacePanel();
+            }
+
+            EndPanel();
+
+            s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended);
+            if (s_DebugExtended)
+            {
+                DoDebugPanel();
+            }
+
+            EndPanel();
+        }
+
+        void DoFacePanel()
+        {
+            EditorGUI.indentLevel += 1;
+            if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex))
+            {
+                DoColor("_FaceColor", "Color");
+                DoTexture2D("_FaceTex", "Texture", true);
+            }
+            else
+            {
+                DoColor("_Color", "Color");
+                DoSlider("_DiffusePower", "Diffuse Power");
+            }
+
+            EditorGUI.indentLevel -= 1;
+
+            EditorGUILayout.Space();
+        }
+
+        void DoDebugPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoTexture2D("_MainTex", "Font Atlas");
+            if (m_Material.HasProperty(ShaderUtilities.ID_VertexOffsetX))
+            {
+                if (m_Material.HasProperty(ShaderUtilities.ID_Padding))
+                {
+                    EditorGUILayout.Space();
+                    DoFloat("_Padding", "Padding");
+                }
+                
+                EditorGUILayout.Space();
+                DoFloat("_VertexOffsetX", "Offset X");
+                DoFloat("_VertexOffsetY", "Offset Y");
+            }
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX))
+            {
+                EditorGUILayout.Space();
+                DoFloat("_MaskSoftnessX", "Softness X");
+                DoFloat("_MaskSoftnessY", "Softness Y");
+                DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels);
+            }
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_StencilID))
+            {
+                EditorGUILayout.Space();
+                DoFloat("_Stencil", "Stencil ID");
+                DoFloat("_StencilComp", "Stencil Comp");
+            }
+
+            EditorGUI.indentLevel -= 1;
+
+            EditorGUILayout.Space();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6d0e0529cc79f1e17fa2b59c66c8bd0ad6b37ddb
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 806de5a9211448c8b65c8435ebb48dd4
+timeCreated: 1469998850
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c1f5fb9993e7eea7a04c83b92fec50c0afc48477
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs
@@ -0,0 +1,237 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+    [CustomPropertyDrawer(typeof(TMP_Character))]
+    public class TMP_CharacterPropertyDrawer : PropertyDrawer
+    {
+        //[SerializeField]
+        //static Material s_InternalSDFMaterial;
+
+        //[SerializeField]
+        //static Material s_InternalBitmapMaterial;
+
+        int m_GlyphSelectedForEditing = -1;
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_Unicode = property.FindPropertyRelative("m_Unicode");
+            SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_GlyphIndex");
+            SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale");
+
+
+            GUIStyle style = new GUIStyle(EditorStyles.label);
+            style.richText = true;
+
+            EditorGUIUtility.labelWidth = 40f;
+            EditorGUIUtility.fieldWidth = 50;
+
+            Rect rect = new Rect(position.x + 50, position.y, position.width, 49);
+
+            // Display non-editable fields
+            if (GUI.enabled == false)
+            {
+                int unicode = prop_Unicode.intValue;
+                EditorGUI.LabelField(new Rect(rect.x, rect.y, 120f, 18), new GUIContent("Unicode: <color=#FFFF80>0x" + unicode.ToString("X") + "</color>"), style);
+                EditorGUI.LabelField(new Rect(rect.x + 115, rect.y, 120f, 18), unicode <= 0xFFFF ? new GUIContent("UTF16: <color=#FFFF80>\\u" + unicode.ToString("X4") + "</color>") : new GUIContent("UTF32: <color=#FFFF80>\\U" + unicode.ToString("X8") + "</color>"), style);
+                EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: <color=#FFFF80>" + prop_GlyphIndex.intValue + "</color>"), style);
+                EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: <color=#FFFF80>" + prop_Scale.floatValue + "</color>"), style);
+
+                // Draw Glyph (if exists)
+                DrawGlyph(position, property);
+            }
+            else // Display editable fields
+            {
+                EditorGUIUtility.labelWidth = 55f;
+                GUI.SetNextControlName("Unicode Input");
+                EditorGUI.BeginChangeCheck();
+                string unicode = EditorGUI.TextField(new Rect(rect.x, rect.y, 120, 18), "Unicode:", prop_Unicode.intValue.ToString("X"));
+
+                if (GUI.GetNameOfFocusedControl() == "Unicode Input")
+                {
+                    //Filter out unwanted characters.
+                    char chr = Event.current.character;
+                    if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F'))
+                    {
+                        Event.current.character = '\0';
+                    }
+                }
+
+                if (EditorGUI.EndChangeCheck())
+                {
+                    // Update Unicode value
+                    prop_Unicode.intValue = TMP_TextUtilities.StringHexToInt(unicode);
+                }
+
+                // Cache current glyph index in case it needs to be restored if the new glyph index is invalid.
+                int currentGlyphIndex = prop_GlyphIndex.intValue;
+
+                EditorGUIUtility.labelWidth = 59f;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_GlyphIndex, new GUIContent("Glyph ID:"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    // Get a reference to the font asset
+                    TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset;
+                    
+                    // Make sure new glyph index is valid.
+                    int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == prop_GlyphIndex.intValue);
+
+                    if (elementIndex == -1)
+                        prop_GlyphIndex.intValue = currentGlyphIndex;
+                    else
+                        fontAsset.m_IsFontAssetLookupTablesDirty = true;
+                }
+
+                int glyphIndex = prop_GlyphIndex.intValue;
+                
+                // Reset glyph selection if new character has been selected.
+                if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex)
+                    m_GlyphSelectedForEditing = -1;
+
+                // Display button to edit the glyph data.
+                if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph")))
+                {
+                    if (m_GlyphSelectedForEditing == -1)
+                        m_GlyphSelectedForEditing = glyphIndex;
+                    else
+                        m_GlyphSelectedForEditing = -1;
+
+                    // Button clicks should not result in potential change.
+                    GUI.changed = false;
+                }
+
+                // Show the glyph property drawer if selected
+                if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled)
+                {
+                    // Get a reference to the font asset
+                    TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset;
+
+                    if (fontAsset != null)
+                    {
+                        // Get the index of the glyph in the font asset glyph table.
+                        int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex);
+                        
+                        if (elementIndex != -1)
+                        {
+                            SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable");
+                            SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex);
+
+                            SerializedProperty prop_GlyphMetrics = prop_Glyph.FindPropertyRelative("m_Metrics");
+                            SerializedProperty prop_GlyphRect = prop_Glyph.FindPropertyRelative("m_GlyphRect");
+
+                            Rect newRect = EditorGUILayout.GetControlRect(false, 115);
+                            EditorGUI.DrawRect(new Rect(newRect.x + 52, newRect.y - 20, newRect.width - 52, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f));
+                            EditorGUI.DrawRect(new Rect(newRect.x + 53, newRect.y - 19, newRect.width - 54, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f));
+
+                            // Display GlyphRect
+                            newRect.x += 55;
+                            newRect.y -= 18;
+                            newRect.width += 5;
+                            EditorGUI.PropertyField(newRect, prop_GlyphRect);
+
+                            // Display GlyphMetrics
+                            newRect.y += 45;
+                            EditorGUI.PropertyField(newRect, prop_GlyphMetrics);
+
+                            rect.y += 120;
+                        }
+                    }
+                }
+
+                EditorGUIUtility.labelWidth = 39f;
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_Scale, new GUIContent("Scale:"));
+                
+                // Draw Glyph (if exists)
+                DrawGlyph(position, property);
+            }
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 58;
+        }
+
+        void DrawGlyph(Rect position, SerializedProperty property)
+        {
+            // Get a reference to the atlas texture
+            TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset;
+
+            if (fontAsset == null)
+                return;
+
+            // Get a reference to the Glyph Table
+            SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable");
+            int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue;
+            int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex);
+
+            // Return if we can't find the glyph
+            if (elementIndex == -1)
+                return;
+
+            SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex);
+
+            // Get reference to atlas texture.
+            int atlasIndex = prop_Glyph.FindPropertyRelative("m_AtlasIndex").intValue;
+            Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null;
+
+            if (atlasTexture == null)
+                return;
+
+            Material mat;
+            if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                mat = TMP_FontAssetEditor.internalBitmapMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+                mat.SetColor("_Color", Color.white);
+            }
+            else
+            {
+                mat = TMP_FontAssetEditor.internalSDFMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+                mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1);
+            }
+
+            // Draw glyph
+            Rect glyphDrawPosition = new Rect(position.x, position.y, 48, 58);
+
+            SerializedProperty prop_GlyphRect = prop_Glyph.FindPropertyRelative("m_GlyphRect");
+
+            int glyphOriginX = prop_GlyphRect.FindPropertyRelative("m_X").intValue;
+            int glyphOriginY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue;
+            int glyphWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue;
+            int glyphHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue;
+
+            float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine;
+            float scale = glyphDrawPosition.width / normalizedHeight;
+
+            // Compute the normalized texture coordinates
+            Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height);
+
+            if (Event.current.type == EventType.Repaint)
+            {
+                glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2;
+                glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2;
+                glyphDrawPosition.width = glyphWidth * scale;
+                glyphDrawPosition.height = glyphHeight * scale;
+
+                // Could switch to using the default material of the font asset which would require passing scale to the shader.
+                Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat);
+            }
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3bf78921f57d358f10c275a3c3b1d84f639a5a35
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01ada73c4792aba4c937ff5d92cce866
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ccfd3676f06598de0b6bf110e07383718dcef8c2
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs
@@ -0,0 +1,51 @@
+using UnityEditor;
+using UnityEngine;
+using System.IO;
+using System.Collections;
+
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class TMP_ColorGradientAssetMenu
+    {
+        [MenuItem("Assets/Create/TextMeshPro/Color Gradient", false, 115)]
+        public static void CreateColorGradient(MenuCommand context)
+        {
+            string filePath;
+
+            if (Selection.assetGUIDs.Length == 0)
+                filePath = "Assets/New TMP Color Gradient.asset";
+            else
+                filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]);
+
+            if (Directory.Exists(filePath))
+            {
+                filePath += "/New TMP Color Gradient.asset";
+            }
+            else
+            {
+                filePath = Path.GetDirectoryName(filePath) + "/New TMP Color Gradient.asset";
+            }
+
+            filePath = AssetDatabase.GenerateUniqueAssetPath(filePath);
+
+            // Create new Color Gradient Asset.
+            TMP_ColorGradient colorGradient = ScriptableObject.CreateInstance<TMP_ColorGradient>();
+
+            // Create Asset
+            AssetDatabase.CreateAsset(colorGradient, filePath);
+
+            //EditorUtility.SetDirty(colorGradient);
+
+            AssetDatabase.SaveAssets();
+
+            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(colorGradient));
+
+            EditorUtility.FocusProjectWindow();
+            Selection.activeObject = colorGradient;
+
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a2201ee6d57c0d1fb7ee5d258e46d340f4581abb
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d9647b571c5e44729b71d756b3d55317
+timeCreated: 1468187791
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4dddbfb0334e76daf8fc2df446d3d87d43717d97
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs
@@ -0,0 +1,146 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TMP_ColorGradient))]
+    public class TMP_ColorGradientEditor : Editor
+    {
+        SerializedProperty m_ColorMode;
+        SerializedProperty m_TopLeftColor;
+        SerializedProperty m_TopRightColor;
+        SerializedProperty m_BottomLeftColor;
+        SerializedProperty m_BottomRightColor;
+
+        void OnEnable()
+        {
+            m_ColorMode = serializedObject.FindProperty("colorMode");
+            m_TopLeftColor = serializedObject.FindProperty("topLeft");
+            m_TopRightColor = serializedObject.FindProperty("topRight");
+            m_BottomLeftColor = serializedObject.FindProperty("bottomLeft");
+            m_BottomRightColor = serializedObject.FindProperty("bottomRight");
+        }
+        
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_ColorMode, new GUIContent("Color Mode"));
+            if (EditorGUI.EndChangeCheck())
+            {
+                switch ((ColorMode)m_ColorMode.enumValueIndex)
+                {
+                    case ColorMode.Single:
+                        m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomRightColor.colorValue = m_TopLeftColor.colorValue;
+                        break;
+                    case ColorMode.HorizontalGradient:
+                        m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomRightColor.colorValue = m_TopRightColor.colorValue;
+                        break;
+                    case ColorMode.VerticalGradient:
+                        m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue;
+                        break;
+                }
+            }
+            Rect rect;
+            switch ((ColorMode)m_ColorMode.enumValueIndex)
+            {
+                case ColorMode.Single:
+                    EditorGUI.BeginChangeCheck();
+                    rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
+                        m_BottomRightColor.colorValue = m_TopLeftColor.colorValue;
+                    }
+                    break;
+
+                case ColorMode.HorizontalGradient:
+                    rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
+
+                    EditorGUI.BeginChangeCheck();
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue;
+                    }
+
+                    rect.x += rect.width;
+
+                    EditorGUI.BeginChangeCheck();
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        m_BottomRightColor.colorValue = m_TopRightColor.colorValue;
+                    }
+                    break;
+
+                case ColorMode.VerticalGradient:
+                    rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
+                    rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
+
+                    EditorGUI.BeginChangeCheck();
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        m_TopRightColor.colorValue = m_TopLeftColor.colorValue;
+                    }
+
+                    rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f);
+                    rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
+
+                    EditorGUI.BeginChangeCheck();
+                    TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor);
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue;
+                    }
+                    break;
+
+                case ColorMode.FourCornersGradient:
+                    rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    EditorGUI.PrefixLabel(rect, new GUIContent("Colors"));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth)  / 2f;
+                    rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
+                    
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor);
+                    rect.x += rect.width;
+                    TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor);
+
+                    rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2));
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
+                    rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2);
+
+                    TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor);
+                    rect.x += rect.width;
+                    TMP_EditorUtility.DrawColorProperty(rect, m_BottomRightColor);
+                    break;
+            }
+
+            if (serializedObject.ApplyModifiedProperties())
+                TMPro_EventManager.ON_COLOR_GRAIDENT_PROPERTY_CHANGED(target as TMP_ColorGradient);
+
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..dc58116c1ae29c6bcd2205d23e7accc00c4c7117
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: fcc60c1d6bb544d9b712b652f418ff3a
+timeCreated: 1468400050
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b8e96135a987506a9de6bbadc72d40d102559a64
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs
@@ -0,0 +1,51 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.UI;
+using UnityEngine.UI;
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TMP_Dropdown), true)]
+    [CanEditMultipleObjects]
+    public class DropdownEditor : SelectableEditor
+    {
+        SerializedProperty m_Template;
+        SerializedProperty m_CaptionText;
+        SerializedProperty m_CaptionImage;
+        SerializedProperty m_ItemText;
+        SerializedProperty m_ItemImage;
+        SerializedProperty m_OnSelectionChanged;
+        SerializedProperty m_Value;
+        SerializedProperty m_Options;
+
+        protected override void OnEnable()
+        {
+            base.OnEnable();
+            m_Template = serializedObject.FindProperty("m_Template");
+            m_CaptionText = serializedObject.FindProperty("m_CaptionText");
+            m_CaptionImage = serializedObject.FindProperty("m_CaptionImage");
+            m_ItemText = serializedObject.FindProperty("m_ItemText");
+            m_ItemImage = serializedObject.FindProperty("m_ItemImage");
+            m_OnSelectionChanged = serializedObject.FindProperty("m_OnValueChanged");
+            m_Value = serializedObject.FindProperty("m_Value");
+            m_Options = serializedObject.FindProperty("m_Options");
+        }
+
+        public override void OnInspectorGUI()
+        {
+            base.OnInspectorGUI();
+            EditorGUILayout.Space();
+
+            serializedObject.Update();
+            EditorGUILayout.PropertyField(m_Template);
+            EditorGUILayout.PropertyField(m_CaptionText);
+            EditorGUILayout.PropertyField(m_CaptionImage);
+            EditorGUILayout.PropertyField(m_ItemText);
+            EditorGUILayout.PropertyField(m_ItemImage);
+            EditorGUILayout.PropertyField(m_Value);
+            EditorGUILayout.PropertyField(m_Options);
+            EditorGUILayout.PropertyField(m_OnSelectionChanged);
+            serializedObject.ApplyModifiedProperties();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..75030cfdb37b15b98862a6ca4a275fa928a3a4d9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_DropdownEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6dbcf248c987476181a37f01a1814975
+timeCreated: 1446377461
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e0056039ec73663e2365be4e198b2713cf577694
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+
+namespace TMPro.EditorUtilities
+{
+    /// <summary>
+    /// Simple implementation of coroutine working in the Unity Editor.
+    /// </summary>
+    public class TMP_EditorCoroutine
+    {
+        //private static Dictionary<int, EditorCoroutine> s_ActiveCoroutines;
+
+        readonly IEnumerator coroutine;
+
+        /// <summary>
+        /// Constructor
+        /// </summary>
+        /// <param name="routine"></param>
+        TMP_EditorCoroutine(IEnumerator routine)
+        {
+            this.coroutine = routine;
+        }
+
+
+        /// <summary>
+        /// Starts a new EditorCoroutine.
+        /// </summary>
+        /// <param name="newCoroutine">Coroutine</param>
+        /// <returns>new EditorCoroutine</returns>
+        public static TMP_EditorCoroutine StartCoroutine(IEnumerator routine)
+        {
+            TMP_EditorCoroutine coroutine = new TMP_EditorCoroutine(routine);
+            coroutine.Start();
+
+            // Add coroutine to tracking list
+            //if (s_ActiveCoroutines == null)
+            //    s_ActiveCoroutines = new Dictionary<int, EditorCoroutine>();
+
+            // Add new instance of editor coroutine to dictionary.
+            //s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine);
+
+            return coroutine;
+        }
+
+
+        /// <summary>
+        /// Clear delegate list 
+        /// </summary>
+        //public static void StopAllEditorCoroutines()
+        //{
+        //    EditorApplication.update = null;
+        //}
+
+
+        /// <summary>
+        /// Register callback for editor updates
+        /// </summary>
+        void Start()
+        {
+            EditorApplication.update += EditorUpdate;
+        }
+
+
+        /// <summary>
+        /// Unregister callback for editor updates.
+        /// </summary>
+        public void Stop()
+        {
+            if (EditorApplication.update != null)
+                EditorApplication.update -= EditorUpdate;
+
+            //s_ActiveCoroutines.Remove(this.GetHashCode());
+        }
+ 
+
+        /// <summary>
+        /// Delegate function called on editor updates.
+        /// </summary>
+        void EditorUpdate()
+        {
+            // Stop editor coroutine if it does not continue.
+            if (coroutine.MoveNext() == false)
+                Stop();
+
+            // Process the different types of EditorCoroutines.
+            if (coroutine.Current != null)
+            {
+
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..16e03fa8f63e7636066122f9dba90c8662a4bea6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 27a0335dab59ec542aadd6636a5b4ebd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bf961c6d0137e2acc5a42873ce4f7e5c0d25745a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs
@@ -0,0 +1,153 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomEditor(typeof(TextMeshPro), true), CanEditMultipleObjects]
+    public class TMP_EditorPanel : TMP_BaseEditorPanel
+    {
+        static readonly GUIContent k_SortingLayerLabel = new GUIContent("Sorting Layer", "Name of the Renderer's sorting layer.");
+        static readonly GUIContent k_OrderInLayerLabel = new GUIContent("Order in Layer", "Renderer's order within a sorting layer.");
+        static readonly GUIContent k_OrthographicLabel = new GUIContent("Orthographic Mode", "Should be enabled when using an orthographic camera. Instructs the shader to not perform any perspective correction.");
+        static readonly GUIContent k_VolumetricLabel = new GUIContent("Volumetric Setup", "Use cubes rather than quads to render the text. Allows for volumetric rendering when combined with a compatible shader.");
+        
+        SerializedProperty m_IsVolumetricTextProp;
+        
+        SerializedProperty m_IsOrthographicProp;
+
+        Renderer m_Renderer;
+
+        protected override void OnEnable()
+        {
+            base.OnEnable();
+
+            m_IsOrthographicProp = serializedObject.FindProperty("m_isOrthographic");
+            
+            m_IsVolumetricTextProp = serializedObject.FindProperty("m_isVolumetricText");
+
+            m_Renderer = m_TextComponent.GetComponent<Renderer>();
+        }
+
+        protected override void DrawExtraSettings()
+        {
+            Foldout.extraSettings = EditorGUILayout.Foldout(Foldout.extraSettings, k_ExtraSettingsLabel, true, TMP_UIStyleManager.boldFoldout);
+            if (Foldout.extraSettings)
+            {
+                EditorGUI.indentLevel += 1;
+
+                DrawMargins();
+
+                DrawSortingLayer();
+
+                DrawGeometrySorting();
+
+                DrawOrthographicMode();
+                
+                DrawRichText();
+
+                DrawParsing();
+
+                DrawVolumetricSetup();
+
+                DrawKerning();
+
+                DrawPadding();
+
+                EditorGUI.indentLevel -= 1;
+            }
+        }
+
+        protected void DrawSortingLayer()
+        {
+            Undo.RecordObject(m_Renderer, "Sorting Layer Change");
+
+            EditorGUI.BeginChangeCheck();
+
+            // SORTING LAYERS
+            var sortingLayerNames = SortingLayerHelper.sortingLayerNames;
+
+            var textComponent = (TextMeshPro)m_TextComponent;
+
+            // Look up the layer name using the current layer ID
+            string oldName = SortingLayerHelper.GetSortingLayerNameFromID(textComponent.sortingLayerID);
+
+            // Use the name to look up our array index into the names list
+            int oldLayerIndex = System.Array.IndexOf(sortingLayerNames, oldName);
+
+            // Show the pop-up for the names
+            EditorGUIUtility.fieldWidth = 0f;
+            int newLayerIndex = EditorGUILayout.Popup(k_SortingLayerLabel, oldLayerIndex, sortingLayerNames);
+            
+            // If the index changes, look up the ID for the new index to store as the new ID
+            if (newLayerIndex != oldLayerIndex)
+            {
+                textComponent.sortingLayerID = SortingLayerHelper.GetSortingLayerIDForIndex(newLayerIndex);
+            }
+
+            // Expose the manual sorting order
+            int newSortingLayerOrder = EditorGUILayout.IntField(k_OrderInLayerLabel, textComponent.sortingOrder);
+            if (newSortingLayerOrder != textComponent.sortingOrder)
+            {
+                textComponent.sortingOrder = newSortingLayerOrder;
+            }
+
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+
+            EditorGUILayout.Space();
+        }
+
+        protected void DrawOrthographicMode()
+        {
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_IsOrthographicProp, k_OrthographicLabel);
+            if (EditorGUI.EndChangeCheck())
+                m_HavePropertiesChanged = true;
+        }
+
+        protected void DrawVolumetricSetup()
+        {
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_IsVolumetricTextProp, k_VolumetricLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_HavePropertiesChanged = true;
+                m_TextComponent.textInfo.ResetVertexLayout(m_IsVolumetricTextProp.boolValue);
+            }
+
+            EditorGUILayout.Space();
+        }
+
+        // Method to handle multi object selection
+        protected override bool IsMixSelectionTypes()
+        {
+            GameObject[] objects = Selection.gameObjects;
+            if (objects.Length > 1)
+            {
+                for (int i = 0; i < objects.Length; i++)
+                {
+                    if (objects[i].GetComponent<TextMeshPro>() == null)
+                        return true;
+                }
+            }
+            return false;
+        }
+
+        protected override void OnUndoRedo()
+        {
+            int undoEventId = Undo.GetCurrentGroup();
+            int lastUndoEventId = s_EventId;
+
+            if (undoEventId != lastUndoEventId)
+            {
+                for (int i = 0; i < targets.Length; i++)
+                {
+                    //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup());
+                    TMPro_EventManager.ON_TEXTMESHPRO_PROPERTY_CHANGED(true, targets[i] as TextMeshPro);
+                    s_EventId = undoEventId;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..54fd804878cea2f9d4e4c945b3c1eb47d7138aaa
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorPanel.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 34f6695d37a94370a3697f6b068f5d5e
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a2ac7a02a52d5c1dc82fb497acf0fefec54ddc0c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs
@@ -0,0 +1,452 @@
+using UnityEngine;
+using UnityEditor;
+using System.Text;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class TMP_EditorUtility
+    {
+        /// <summary>
+        /// Returns the relative path of the package.
+        /// </summary>
+        public static string packageRelativePath
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(m_PackagePath))
+                    m_PackagePath = GetPackageRelativePath();
+
+                return m_PackagePath;
+            }
+        }
+        [SerializeField]
+        private static string m_PackagePath;
+
+        /// <summary>
+        /// Returns the fully qualified path of the package.
+        /// </summary>
+        public static string packageFullPath
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(m_PackageFullPath))
+                    m_PackageFullPath = GetPackageFullPath();
+
+                return m_PackageFullPath;
+            }
+        }
+        [SerializeField]
+        private static string m_PackageFullPath;
+
+        
+        // Static Fields Related to locating the TextMesh Pro Asset
+        private static string folderPath = "Not Found";
+        
+        private static EditorWindow Gameview;
+        private static bool isInitialized = false;
+
+        private static void GetGameview()
+        {
+            System.Reflection.Assembly assembly = typeof(UnityEditor.EditorWindow).Assembly;
+            System.Type type = assembly.GetType("UnityEditor.GameView");
+            Gameview = EditorWindow.GetWindow(type);
+        }
+
+
+        public static void RepaintAll()
+        {
+            if (isInitialized == false)
+            {
+                GetGameview();
+                isInitialized = true;
+            }
+
+            SceneView.RepaintAll();
+            Gameview.Repaint();
+        }
+
+
+        /// <summary>
+        /// Create and return a new asset in a smart location based on the current selection and then select it.
+        /// </summary>
+        /// <param name="name">
+        /// Name of the new asset. Do not include the .asset extension.
+        /// </param>
+        /// <returns>
+        /// The new asset.
+        /// </returns>
+        public static T CreateAsset<T>(string name) where T : ScriptableObject
+        {
+            string path = AssetDatabase.GetAssetPath(Selection.activeObject);
+            if (path.Length == 0)
+            {
+                // no asset selected, place in asset root
+                path = "Assets/" + name + ".asset";
+            }
+            else if (Directory.Exists(path))
+            {
+                // place in currently selected directory
+                path += "/" + name + ".asset";
+            }
+            else {
+                // place in current selection's containing directory
+                path = Path.GetDirectoryName(path) + "/" + name + ".asset";
+            }
+            T asset = ScriptableObject.CreateInstance<T>();
+            AssetDatabase.CreateAsset(asset, AssetDatabase.GenerateUniqueAssetPath(path));
+            EditorUtility.FocusProjectWindow();
+            Selection.activeObject = asset;
+            return asset;
+        }
+
+
+
+        // Function used to find all materials which reference a font atlas so we can update all their references.
+        public static Material[] FindMaterialReferences(TMP_FontAsset fontAsset)
+        {
+            List<Material> refs = new List<Material>();
+            Material mat = fontAsset.material;
+            refs.Add(mat);
+
+            // Get materials matching the search pattern.
+            string searchPattern = "t:Material" + " " + fontAsset.name.Split(new char[] { ' ' })[0];
+            string[] materialAssetGUIDs = AssetDatabase.FindAssets(searchPattern);
+
+            for (int i = 0; i < materialAssetGUIDs.Length; i++)
+            {
+                string materialPath = AssetDatabase.GUIDToAssetPath(materialAssetGUIDs[i]);
+                Material targetMaterial = AssetDatabase.LoadAssetAtPath<Material>(materialPath);
+
+                if (targetMaterial.HasProperty(ShaderUtilities.ID_MainTex) && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex) != null && mat.GetTexture(ShaderUtilities.ID_MainTex) != null && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() == mat.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                {
+                    if (!refs.Contains(targetMaterial))
+                        refs.Add(targetMaterial);
+                }
+                else
+                {
+                    // TODO: Find a more efficient method to unload resources.
+                    //Resources.UnloadAsset(targetMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+                }
+            }
+
+            return refs.ToArray();
+        }
+
+
+        // Function used to find the Font Asset which matches the given Material Preset and Font Atlas Texture.
+        public static TMP_FontAsset FindMatchingFontAsset(Material mat)
+        {
+            if (mat.GetTexture(ShaderUtilities.ID_MainTex) == null) return null;
+
+            // Find the dependent assets of this material.
+            string[] dependentAssets = AssetDatabase.GetDependencies(AssetDatabase.GetAssetPath(mat), false);
+
+            for (int i = 0; i < dependentAssets.Length; i++)
+            {
+                TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(dependentAssets[i]);
+                if (fontAsset != null)
+                    return fontAsset;
+            }
+
+            return null;
+        }
+
+
+        private static string GetPackageRelativePath()
+        {
+            // Check for potential UPM package
+            string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro");
+            if (Directory.Exists(packagePath))
+            {
+                return "Packages/com.unity.textmeshpro";
+            }
+
+            packagePath = Path.GetFullPath("Assets/..");
+            if (Directory.Exists(packagePath))
+            {
+                // Search default location for development package
+                if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources"))
+                {
+                    return "Assets/Packages/com.unity.TextMeshPro";
+                }
+
+                // Search for default location of normal TextMesh Pro AssetStore package
+                if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources"))
+                {
+                    return "Assets/TextMesh Pro";
+                }
+
+                // Search for potential alternative locations in the user project
+                string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories);
+                packagePath = ValidateLocation(matchingPaths, packagePath);
+                if (packagePath != null) return packagePath;
+            }
+
+            return null;
+        }
+
+        private static string GetPackageFullPath()
+        {
+            // Check for potential UPM package
+            string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro");
+            if (Directory.Exists(packagePath))
+            {
+                return packagePath;
+            }
+
+            packagePath = Path.GetFullPath("Assets/..");
+            if (Directory.Exists(packagePath))
+            {
+                // Search default location for development package
+                if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources"))
+                {
+                    return packagePath + "/Assets/Packages/com.unity.TextMeshPro";
+                }
+
+                // Search for default location of normal TextMesh Pro AssetStore package
+                if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources"))
+                {
+                    return packagePath + "/Assets/TextMesh Pro";
+                }
+
+                // Search for potential alternative locations in the user project
+                string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories);
+                string path = ValidateLocation(matchingPaths, packagePath);
+                if (path != null) return packagePath + path;
+            }
+
+            return null;
+        }
+
+
+        /// <summary>
+        /// Method to validate the location of the asset folder by making sure the GUISkins folder exists.
+        /// </summary>
+        /// <param name="paths"></param>
+        /// <returns></returns>
+        private static string ValidateLocation(string[] paths, string projectPath)
+        {
+            for (int i = 0; i < paths.Length; i++)
+            {
+                // Check if any of the matching directories contain a GUISkins directory.
+                if (Directory.Exists(paths[i] + "/Editor Resources"))
+                {
+                    folderPath = paths[i].Replace(projectPath, "");
+                    folderPath = folderPath.TrimStart('\\', '/');
+                    return folderPath;
+                }
+            }
+
+            return null;
+        }
+
+
+        /// <summary>
+        /// Function which returns a string containing a sequence of Decimal character ranges.
+        /// </summary>
+        /// <param name="characterSet"></param>
+        /// <returns></returns>
+        public static string GetDecimalCharacterSequence(int[] characterSet)
+        {
+            if (characterSet == null || characterSet.Length == 0)
+                return string.Empty;
+
+            string characterSequence = string.Empty;
+            int count = characterSet.Length;
+            int first = characterSet[0];
+            int last = first;
+
+            for (int i = 1; i < count; i++)
+            {
+                if (characterSet[i - 1] + 1 == characterSet[i])
+                {
+                    last = characterSet[i];
+                }
+                else
+                {
+                    if (first == last)
+                        characterSequence += first + ",";
+                    else
+                        characterSequence += first + "-" + last + ",";
+
+                    first = last = characterSet[i];
+                }
+
+            }
+
+            // handle the final group
+            if (first == last)
+                characterSequence += first;
+            else
+                characterSequence += first + "-" + last;
+
+            return characterSequence;
+        }
+
+
+        /// <summary>
+        /// Function which returns a string containing a sequence of Unicode (Hex) character ranges.
+        /// </summary>
+        /// <param name="characterSet"></param>
+        /// <returns></returns>
+        public static string GetUnicodeCharacterSequence(int[] characterSet)
+        {
+            if (characterSet == null || characterSet.Length == 0)
+                return string.Empty;
+
+            string characterSequence = string.Empty;
+            int count = characterSet.Length;
+            int first = characterSet[0];
+            int last = first;
+
+            for (int i = 1; i < count; i++)
+            {
+                if (characterSet[i - 1] + 1 == characterSet[i])
+                {
+                    last = characterSet[i];
+                }
+                else
+                {
+                    if (first == last)
+                        characterSequence += first.ToString("X2") + ",";
+                    else
+                        characterSequence += first.ToString("X2") + "-" + last.ToString("X2") + ",";
+
+                    first = last = characterSet[i];
+                }
+
+            }
+
+            // handle the final group
+            if (first == last)
+                characterSequence += first.ToString("X2");
+            else
+                characterSequence += first.ToString("X2") + "-" + last.ToString("X2");
+
+            return characterSequence;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="rect"></param>
+        /// <param name="thickness"></param>
+        /// <param name="color"></param>
+        public static void DrawBox(Rect rect, float thickness, Color color)
+        {
+            EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, rect.width + thickness * 2, thickness), color);
+            EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, thickness, rect.height - thickness * 2), color);
+            EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + rect.height - thickness * 2, rect.width + thickness * 2, thickness), color);
+            EditorGUI.DrawRect(new Rect(rect.x + rect.width, rect.y + thickness, thickness, rect.height - thickness * 2), color);
+        }
+
+
+        /// <summary>
+        /// Function to return the horizontal alignment grid value.
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static int GetHorizontalAlignmentGridValue(int value)
+        {
+            if ((value & 0x1) == 0x1)
+                return 0;
+            else if ((value & 0x2) == 0x2)
+                return 1;
+            else if ((value & 0x4) == 0x4)
+                return 2;
+            else if ((value & 0x8) == 0x8)
+                return 3;
+            else if ((value & 0x10) == 0x10)
+                return 4;
+            else if ((value & 0x20) == 0x20)
+                return 5;
+
+            return 0;
+        }
+
+        /// <summary>
+        /// Function to return the vertical alignment grid value.
+        /// </summary>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public static int GetVerticalAlignmentGridValue(int value)
+        {
+            if ((value & 0x100) == 0x100)
+                return 0;
+            if ((value & 0x200) == 0x200)
+                return 1;
+            if ((value & 0x400) == 0x400)
+                return 2;
+            if ((value & 0x800) == 0x800)
+                return 3;
+            if ((value & 0x1000) == 0x1000)
+                return 4;
+            if ((value & 0x2000) == 0x2000)
+                return 5;
+
+            return 0;
+        }
+
+        public static void DrawColorProperty(Rect rect, SerializedProperty property)
+        {
+            int oldIndent = EditorGUI.indentLevel;
+            EditorGUI.indentLevel = 0;
+            if (EditorGUIUtility.wideMode)
+            {
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y, 50f, rect.height), property, GUIContent.none);
+                rect.x += 50f;
+                rect.width = Mathf.Min(100f, rect.width - 55f);
+            }
+            else
+            {
+                rect.height /= 2f;
+                rect.width = Mathf.Min(100f, rect.width - 5f);
+                EditorGUI.PropertyField(rect, property, GUIContent.none);
+                rect.y += rect.height;
+            }
+
+            EditorGUI.BeginChangeCheck();
+            string colorString = EditorGUI.TextField(rect, string.Format("#{0}", ColorUtility.ToHtmlStringRGBA(property.colorValue)));
+            if (EditorGUI.EndChangeCheck())
+            {
+                Color color;
+
+                if (ColorUtility.TryParseHtmlString(colorString, out color))
+                {
+                    property.colorValue = color;
+                }
+            }
+            EditorGUI.indentLevel = oldIndent;
+        }
+        
+        public static bool EditorToggle(Rect position, bool value, GUIContent content, GUIStyle style)
+        {
+            var id = GUIUtility.GetControlID(content, FocusType.Keyboard, position);
+            var evt = Event.current;
+
+            // Toggle selected toggle on space or return key
+            if (GUIUtility.keyboardControl == id && evt.type == EventType.KeyDown && (evt.keyCode == KeyCode.Space || evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter))
+            {
+                value = !value;
+                evt.Use();
+                GUI.changed = true;
+            }
+
+            if (evt.type == EventType.MouseDown && position.Contains(Event.current.mousePosition))
+            {
+                GUIUtility.keyboardControl = id;
+                EditorGUIUtility.editingTextField = false;
+                HandleUtility.Repaint();
+            }
+            
+            return GUI.Toggle(position, id, value, content, style);
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5088b1bd52bc57a1b9a842bd6eb884fd2c32513f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_EditorUtility.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2300e75732d74890b38a8ff257a3ae15
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..65541ce9b06435d2c81f0181b1603dc59593a39a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs
@@ -0,0 +1,1718 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEditorInternal;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_FontWeightPair))]
+    public class FontWeightDrawer : PropertyDrawer
+    {
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_regular = property.FindPropertyRelative("regularTypeface");
+            SerializedProperty prop_italic = property.FindPropertyRelative("italicTypeface");
+
+            float width = position.width;
+
+            position.width = EditorGUIUtility.labelWidth;
+            EditorGUI.LabelField(position, label);
+
+            int oldIndent = EditorGUI.indentLevel;
+            EditorGUI.indentLevel = 0;
+
+            // NORMAL TYPEFACE
+            if (label.text[0] == '4') GUI.enabled = false;
+            position.x += position.width; position.width = (width - position.width) / 2;
+            EditorGUI.PropertyField(position, prop_regular, GUIContent.none);
+
+            // ITALIC TYPEFACE
+            GUI.enabled = true;
+            position.x += position.width;
+            EditorGUI.PropertyField(position, prop_italic, GUIContent.none);
+
+            EditorGUI.indentLevel = oldIndent;
+        }
+    }
+
+    [CustomEditor(typeof(TMP_FontAsset))]
+    public class TMP_FontAssetEditor : Editor
+    {
+        private struct UI_PanelState
+        {
+            public static bool faceInfoPanel = true;
+            public static bool generationSettingsPanel = true;
+            public static bool fontAtlasInfoPanel = true;
+            public static bool fontWeightPanel = true;
+            public static bool fallbackFontAssetPanel = true;
+            public static bool glyphTablePanel = false;
+            public static bool characterTablePanel = false;
+            public static bool fontFeatureTablePanel = false;
+        }
+
+        private struct AtlasSettings
+        {
+            public GlyphRenderMode glyphRenderMode;
+            public int pointSize;
+            public int padding;
+            public int atlasWidth;
+            public int atlasHeight;
+        }
+
+        /// <summary>
+        /// Material used to display SDF glyphs in the Character and Glyph tables.
+        /// </summary>
+        internal static Material internalSDFMaterial
+        {
+            get
+            {
+                if (s_InternalSDFMaterial == null)
+                {
+                    Shader shader = Shader.Find("Hidden/TextMeshPro/Internal/Distance Field SSD");
+
+                    if (shader != null)
+                        s_InternalSDFMaterial = new Material(shader);
+                }
+
+                return s_InternalSDFMaterial;
+            }
+        }
+        static Material s_InternalSDFMaterial;
+
+        /// <summary>
+        /// Material used to display Bitmap glyphs in the Character and Glyph tables.
+        /// </summary>
+        internal static Material internalBitmapMaterial
+        {
+            get
+            {
+                if (s_InternalBitmapMaterial == null)
+                {
+                    Shader shader = Shader.Find("Hidden/Internal-GUITextureClipText");
+
+                    if (shader != null)
+                        s_InternalBitmapMaterial = new Material(shader);
+                }
+
+                return s_InternalBitmapMaterial;
+            }
+        }
+        static Material s_InternalBitmapMaterial;
+
+        private static string[] s_UiStateLabel = new string[] { "<i>(Click to collapse)</i> ", "<i>(Click to expand)</i> " };
+        private GUIContent[] m_AtlasResolutionLabels = { new GUIContent("8"), new GUIContent("16"), new GUIContent("32"), new GUIContent("64"), new GUIContent("128"), new GUIContent("256"), new GUIContent("512"), new GUIContent("1024"), new GUIContent("2048"), new GUIContent("4096"), new GUIContent("8192") };
+        private int[] m_AtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
+
+        private struct Warning
+        {
+            public bool isEnabled;
+            public double expirationTime;
+        }
+
+        private int m_CurrentGlyphPage = 0;
+        private int m_CurrentCharacterPage = 0;
+        private int m_CurrentKerningPage = 0;
+
+        private int m_SelectedGlyphRecord = -1;
+        private int m_SelectedCharacterRecord = -1;
+        private int m_SelectedAdjustmentRecord = -1;
+
+        private string m_dstGlyphID;
+        private string m_dstUnicode;
+        private const string k_placeholderUnicodeHex = "<i>New Unicode (Hex)</i>";
+        private string m_unicodeHexLabel = k_placeholderUnicodeHex;
+        private const string k_placeholderGlyphID = "<i>New Glyph ID</i>";
+        private string m_GlyphIDLabel = k_placeholderGlyphID;
+
+        private Warning m_AddGlyphWarning;
+        private Warning m_AddCharacterWarning;
+        private bool m_DisplayDestructiveChangeWarning;
+        private AtlasSettings m_AtlasSettings;
+        private bool m_MaterialPresetsRequireUpdate;
+
+        private string m_GlyphSearchPattern;
+        private List<int> m_GlyphSearchList;
+
+        private string m_CharacterSearchPattern;
+        private List<int> m_CharacterSearchList;
+
+        private string m_KerningTableSearchPattern;
+        private List<int> m_KerningTableSearchList;
+        
+        private bool m_isSearchDirty;
+
+        private const string k_UndoRedo = "UndoRedoPerformed";
+
+        private SerializedProperty m_AtlasPopulationMode_prop;
+        private SerializedProperty font_atlas_prop;
+        private SerializedProperty font_material_prop;
+
+        private SerializedProperty m_AtlasRenderMode_prop;
+        private SerializedProperty m_SamplingPointSize_prop;
+        private SerializedProperty m_AtlasPadding_prop;
+        private SerializedProperty m_AtlasWidth_prop;
+        private SerializedProperty m_AtlasHeight_prop;
+
+        private SerializedProperty fontWeights_prop;
+
+        //private SerializedProperty fallbackFontAssets_prop;
+        private ReorderableList m_list;
+
+        private SerializedProperty font_normalStyle_prop;
+        private SerializedProperty font_normalSpacing_prop;
+
+        private SerializedProperty font_boldStyle_prop;
+        private SerializedProperty font_boldSpacing_prop;
+
+        private SerializedProperty font_italicStyle_prop;
+        private SerializedProperty font_tabSize_prop;
+
+        private SerializedProperty m_FaceInfo_prop;
+        private SerializedProperty m_GlyphTable_prop;
+        private SerializedProperty m_CharacterTable_prop;
+
+        private TMP_FontFeatureTable m_FontFeatureTable;
+        private SerializedProperty m_FontFeatureTable_prop;
+        private SerializedProperty m_GlyphPairAdjustmentRecords_prop;
+
+        private TMP_SerializedPropertyHolder m_SerializedPropertyHolder;
+        private SerializedProperty m_EmptyGlyphPairAdjustmentRecord_prop;
+
+        private TMP_FontAsset m_fontAsset;
+
+        private Material[] m_materialPresets;
+
+        private bool isAssetDirty = false;
+
+        private int errorCode;
+
+        private System.DateTime timeStamp;
+
+
+        public void OnEnable()
+        {
+            m_FaceInfo_prop = serializedObject.FindProperty("m_FaceInfo");
+
+            font_atlas_prop = serializedObject.FindProperty("m_AtlasTextures").GetArrayElementAtIndex(0);
+            font_material_prop = serializedObject.FindProperty("material");
+
+            m_AtlasPopulationMode_prop = serializedObject.FindProperty("m_AtlasPopulationMode");
+            m_AtlasRenderMode_prop = serializedObject.FindProperty("m_AtlasRenderMode");
+            m_SamplingPointSize_prop = m_FaceInfo_prop.FindPropertyRelative("m_PointSize");
+            m_AtlasPadding_prop = serializedObject.FindProperty("m_AtlasPadding");
+            m_AtlasWidth_prop = serializedObject.FindProperty("m_AtlasWidth");
+            m_AtlasHeight_prop = serializedObject.FindProperty("m_AtlasHeight");
+
+            fontWeights_prop = serializedObject.FindProperty("m_FontWeightTable");
+
+            m_list = new ReorderableList(serializedObject, serializedObject.FindProperty("m_FallbackFontAssetTable"), true, true, true, true);
+
+            m_list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
+            {
+                var element = m_list.serializedProperty.GetArrayElementAtIndex(index);
+                rect.y += 2;
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
+            };
+
+            m_list.drawHeaderCallback = rect =>
+            {
+                EditorGUI.LabelField(rect, "Fallback List");
+            };
+
+            // Clean up fallback list in the event if contains null elements.
+            CleanFallbackFontAssetTable();
+
+            font_normalStyle_prop = serializedObject.FindProperty("normalStyle");
+            font_normalSpacing_prop = serializedObject.FindProperty("normalSpacingOffset");
+
+            font_boldStyle_prop = serializedObject.FindProperty("boldStyle");
+            font_boldSpacing_prop = serializedObject.FindProperty("boldSpacing");
+
+            font_italicStyle_prop = serializedObject.FindProperty("italicStyle");
+            font_tabSize_prop = serializedObject.FindProperty("tabSize");
+
+            m_CharacterTable_prop = serializedObject.FindProperty("m_CharacterTable");
+            m_GlyphTable_prop = serializedObject.FindProperty("m_GlyphTable");
+
+            m_FontFeatureTable_prop = serializedObject.FindProperty("m_FontFeatureTable");
+            m_GlyphPairAdjustmentRecords_prop = m_FontFeatureTable_prop.FindPropertyRelative("m_GlyphPairAdjustmentRecords");
+
+            m_fontAsset = target as TMP_FontAsset;
+            m_FontFeatureTable = m_fontAsset.fontFeatureTable;
+
+            // Upgrade Font Feature Table if necessary
+            if (m_fontAsset.m_KerningTable != null && m_fontAsset.m_KerningTable.kerningPairs != null && m_fontAsset.m_KerningTable.kerningPairs.Count > 0)
+                m_fontAsset.ReadFontAssetDefinition();
+
+            // Create serialized object to allow us to use a serialized property of an empty kerning pair.
+            m_SerializedPropertyHolder = CreateInstance<TMP_SerializedPropertyHolder>();
+            m_SerializedPropertyHolder.fontAsset = m_fontAsset;
+            SerializedObject internalSerializedObject = new SerializedObject(m_SerializedPropertyHolder);
+            m_EmptyGlyphPairAdjustmentRecord_prop = internalSerializedObject.FindProperty("glyphPairAdjustmentRecord");
+
+            m_materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset);
+
+            m_GlyphSearchList = new List<int>();
+            m_KerningTableSearchList = new List<int>();
+        }
+
+
+        public void OnDisable()
+        {
+            // Revert changes if user closes or changes selection without having made a choice.
+            if (m_DisplayDestructiveChangeWarning)
+            {
+                m_DisplayDestructiveChangeWarning = false;
+                RestoreAtlasGenerationSettings();
+                GUIUtility.keyboardControl = 0;
+
+                serializedObject.ApplyModifiedProperties();
+            }
+        }
+
+
+        public override void OnInspectorGUI()
+        {
+            //Debug.Log("OnInspectorGUI Called.");
+
+            Event currentEvent = Event.current;
+
+            serializedObject.Update();
+
+            Rect rect = EditorGUILayout.GetControlRect(false, 24);
+            float labelWidth = EditorGUIUtility.labelWidth;
+            float fieldWidth = EditorGUIUtility.fieldWidth;
+
+            // FACE INFO PANEL
+            #region Face info
+            GUI.Label(rect, new GUIContent("<b>Face Info</b> - v" + m_fontAsset.version), TMP_UIStyleManager.sectionHeader);
+
+            rect.x += rect.width - 132f;
+            rect.y += 2;
+            rect.width = 130f;
+            rect.height = 18f;
+            if (GUI.Button(rect, new GUIContent("Update Atlas Texture")))
+            {
+                TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(target as TMP_FontAsset);
+            }
+
+            EditorGUI.indentLevel = 1;
+            GUI.enabled = false; // Lock UI
+
+            // TODO : Consider creating a property drawer for these.
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_FamilyName"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StyleName"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_PointSize"));
+
+            GUI.enabled = true;
+
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Scale"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_LineHeight"));
+
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_AscentLine"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_CapLine"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_MeanLine"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Baseline"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_DescentLine"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineOffset"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineThickness"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StrikethroughOffset"));
+            //EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("strikethroughThickness"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptOffset"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptSize"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptOffset"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptSize"));
+            EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_TabWidth"));
+            // TODO : Add clamping for some of these values.
+            //subSize_prop.floatValue = Mathf.Clamp(subSize_prop.floatValue, 0.25f, 1f);
+
+            EditorGUILayout.Space();
+            #endregion
+
+            // GENERATION SETTINGS
+            #region Generation Settings
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Generation Settings</b>"), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.generationSettingsPanel = !UI_PanelState.generationSettingsPanel;
+
+            GUI.Label(rect, (UI_PanelState.generationSettingsPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.generationSettingsPanel)
+            {
+                EditorGUI.indentLevel = 1;
+
+                EditorGUI.BeginChangeCheck();
+                Font sourceFont = (Font)EditorGUILayout.ObjectField("Source Font File", m_fontAsset.m_SourceFontFile_EditorRef, typeof(Font), false);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(sourceFont));
+                    m_fontAsset.m_SourceFontFileGUID = guid;
+                    m_fontAsset.m_SourceFontFile_EditorRef = sourceFont;
+                }
+
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_AtlasPopulationMode_prop, new GUIContent("Atlas Population Mode"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    serializedObject.ApplyModifiedProperties();
+
+                    bool isDatabaseRefreshRequired = false;
+
+                    if (m_AtlasPopulationMode_prop.intValue == 0)
+                    {
+                        m_fontAsset.sourceFontFile = null;
+
+                        // Set atlas textures to non readable.
+                        //for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++)
+                        //{
+                        //    Texture2D tex = m_fontAsset.atlasTextures[i];
+
+                        //    if (tex != null && tex.isReadable)
+                        //    {
+                        //        string texPath = AssetDatabase.GetAssetPath(tex);
+                        //        var texImporter = AssetImporter.GetAtPath(texPath) as TextureImporter;
+                        //        if (texImporter != null)
+                        //        {
+                        //            texImporter.isReadable = false;
+                        //            AssetDatabase.ImportAsset(texPath);
+                        //            isDatabaseRefreshRequired = true;
+                        //        }
+                        //    }
+                        //}
+
+                        Debug.Log("Atlas Population mode set to [Static].");
+                    }
+                    else if (m_AtlasPopulationMode_prop.intValue == 1)
+                    {
+                        if (m_fontAsset.m_SourceFontFile_EditorRef.dynamic == false)
+                        {
+                            Debug.LogWarning("Please set the [" + m_fontAsset.name + "] font to dynamic mode as this is required for Dynamic SDF support.", m_fontAsset.m_SourceFontFile_EditorRef);
+                            m_AtlasPopulationMode_prop.intValue = 0;
+
+                            serializedObject.ApplyModifiedProperties();
+                        }
+                        else
+                        {
+                            m_fontAsset.sourceFontFile = m_fontAsset.m_SourceFontFile_EditorRef;
+
+                            /*
+                            // Set atlas textures to non readable.
+                            for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++)
+                            {
+                                Texture2D tex = m_fontAsset.atlasTextures[i];
+
+                                if (tex != null && tex.isReadable == false)
+                                {
+                                    string texPath = AssetDatabase.GetAssetPath(tex.GetInstanceID());
+                                    Object[] paths = AssetDatabase.LoadAllAssetsAtPath(texPath);
+                                    var texImporter = AssetImporter.GetAtPath(texPath) as TextureImporter;
+                                    if (texImporter != null)
+                                    {
+                                        texImporter.isReadable = true;
+                                        AssetDatabase.ImportAsset(texPath);
+                                        isDatabaseRefreshRequired = true;
+                                    }
+                                }
+                            }
+                            */
+                            Debug.Log("Atlas Population mode set to [Dynamic].");
+                        }
+                    }
+
+                    if (isDatabaseRefreshRequired)
+                        AssetDatabase.Refresh();
+
+                    serializedObject.Update();
+                    isAssetDirty = true;
+                }
+
+                GUI.enabled = true;
+                // Save state of atlas settings
+                if (m_DisplayDestructiveChangeWarning == false)
+                {
+                    SavedAtlasGenerationSettings();
+                    //Undo.RegisterCompleteObjectUndo(m_fontAsset, "Font Asset Changes");
+                }
+
+                EditorGUI.BeginChangeCheck();
+                // TODO: Switch shaders depending on GlyphRenderMode.
+                EditorGUILayout.PropertyField(m_AtlasRenderMode_prop);
+                EditorGUILayout.PropertyField(m_SamplingPointSize_prop, new GUIContent("Sampling Point Size"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_DisplayDestructiveChangeWarning = true;
+                }
+
+                // Changes to these properties require updating Material Presets for this font asset.
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_AtlasPadding_prop, new GUIContent("Padding"));
+                EditorGUILayout.IntPopup(m_AtlasWidth_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Width"));
+                EditorGUILayout.IntPopup(m_AtlasHeight_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Height"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_MaterialPresetsRequireUpdate = true;
+                    m_DisplayDestructiveChangeWarning = true;
+                }
+
+                if (m_DisplayDestructiveChangeWarning)
+                {
+                    // These changes are destructive on the font asset
+                    rect = EditorGUILayout.GetControlRect(false, 60);
+                    rect.x += 15;
+                    rect.width -= 15;
+                    EditorGUI.HelpBox(rect, "Changing these settings will clear the font asset's character, glyph and texture data.", MessageType.Warning);
+
+                    if (GUI.Button(new Rect(rect.width - 140, rect.y + 36, 80, 18), new GUIContent("Apply")))
+                    {
+                        m_DisplayDestructiveChangeWarning = false;
+
+                        // Update face info is sampling point size was changed.
+                        if (m_AtlasSettings.pointSize != m_SamplingPointSize_prop.intValue)
+                        {
+                            FontEngine.LoadFontFace(m_fontAsset.sourceFontFile, m_SamplingPointSize_prop.intValue);
+                            m_fontAsset.faceInfo = FontEngine.GetFaceInfo();
+                        }
+
+                        // Update material
+                        m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue);
+                        m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue);
+                        m_fontAsset.material.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1);
+
+                        // Update material presets if any of the relevant properties have been changed.
+                        if (m_MaterialPresetsRequireUpdate)
+                        {
+                            m_MaterialPresetsRequireUpdate = false;
+
+                            Material[] materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset);
+                            for (int i = 0; i < materialPresets.Length; i++)
+                            {
+                                Material mat = materialPresets[i];
+
+                                mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue);
+                                mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue);
+                                mat.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1);
+                            }
+                        }
+
+                        m_fontAsset.ClearFontAssetData();
+                        GUIUtility.keyboardControl = 0;
+                        isAssetDirty = true;
+
+                        // Update Font Asset Creation Settings to reflect new changes.
+                        UpdateFontAssetCreationSettings();
+
+                        // TODO: Clear undo buffers.
+                        //Undo.ClearUndo(m_fontAsset);
+                    }
+
+                    if (GUI.Button(new Rect(rect.width - 56, rect.y + 36, 80, 18), new GUIContent("Revert")))
+                    {
+                        m_DisplayDestructiveChangeWarning = false;
+                        RestoreAtlasGenerationSettings();
+                        GUIUtility.keyboardControl = 0;
+
+                        // TODO: Clear undo buffers.
+                        //Undo.ClearUndo(m_fontAsset);
+                    }
+                }
+                EditorGUILayout.Space();
+            }
+            #endregion
+
+            // ATLAS & MATERIAL PANEL
+            #region Atlas & Material
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Atlas & Material</b>"), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.fontAtlasInfoPanel = !UI_PanelState.fontAtlasInfoPanel;
+
+            GUI.Label(rect, (UI_PanelState.fontAtlasInfoPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.fontAtlasInfoPanel)
+            {
+                EditorGUI.indentLevel = 1;
+
+                GUI.enabled = false;
+                EditorGUILayout.PropertyField(font_atlas_prop, new GUIContent("Font Atlas"));
+                EditorGUILayout.PropertyField(font_material_prop, new GUIContent("Font Material"));
+                GUI.enabled = true;
+                EditorGUILayout.Space();
+            }
+            #endregion
+
+            string evt_cmd = Event.current.commandName; // Get Current Event CommandName to check for Undo Events
+
+            // FONT WEIGHT PANEL
+            #region Font Weights
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Font Weights</b>", "The Font Assets that will be used for different font weights and the settings used to simulate a typeface when no asset is available."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.fontWeightPanel = !UI_PanelState.fontWeightPanel;
+
+            GUI.Label(rect, (UI_PanelState.fontWeightPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.fontWeightPanel)
+            {
+                EditorGUIUtility.labelWidth *= 0.75f;
+                EditorGUIUtility.fieldWidth *= 0.25f;
+
+                EditorGUILayout.BeginVertical();
+                EditorGUI.indentLevel = 1;
+                rect = EditorGUILayout.GetControlRect(true);
+                rect.x += EditorGUIUtility.labelWidth;
+                rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f;
+                GUI.Label(rect, "Regular Tyepface", EditorStyles.label);
+                rect.x += rect.width;
+                GUI.Label(rect, "Italic Typeface", EditorStyles.label);
+                
+                EditorGUI.indentLevel = 1;
+
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(1), new GUIContent("100 - Thin"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(2), new GUIContent("200 - Extra-Light"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(3), new GUIContent("300 - Light"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(4), new GUIContent("400 - Regular"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(5), new GUIContent("500 - Medium"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(6), new GUIContent("600 - Semi-Bold"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(7), new GUIContent("700 - Bold"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(8), new GUIContent("800 - Heavy"));
+                EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(9), new GUIContent("900 - Black"));
+
+                EditorGUILayout.EndVertical();
+
+                EditorGUILayout.Space();
+
+                EditorGUILayout.BeginVertical();
+
+                EditorGUILayout.BeginHorizontal();
+                EditorGUILayout.PropertyField(font_normalStyle_prop, new GUIContent("Normal Weight"));
+                font_normalStyle_prop.floatValue = Mathf.Clamp(font_normalStyle_prop.floatValue, -3.0f, 3.0f);
+                if (GUI.changed || evt_cmd == k_UndoRedo)
+                {
+                    GUI.changed = false;
+
+                    // Modify the material property on matching material presets.
+                    for (int i = 0; i < m_materialPresets.Length; i++)
+                        m_materialPresets[i].SetFloat("_WeightNormal", font_normalStyle_prop.floatValue);
+                }
+
+                EditorGUILayout.PropertyField(font_boldStyle_prop, new GUIContent("Bold Weight"));
+                font_boldStyle_prop.floatValue = Mathf.Clamp(font_boldStyle_prop.floatValue, -3.0f, 3.0f);
+                if (GUI.changed || evt_cmd == k_UndoRedo)
+                {
+                    GUI.changed = false;
+
+                    // Modify the material property on matching material presets.
+                    for (int i = 0; i < m_materialPresets.Length; i++)
+                        m_materialPresets[i].SetFloat("_WeightBold", font_boldStyle_prop.floatValue);
+                }
+                EditorGUILayout.EndHorizontal();
+                
+                EditorGUILayout.BeginHorizontal();
+                EditorGUILayout.PropertyField(font_normalSpacing_prop, new GUIContent("Spacing Offset"));
+                font_normalSpacing_prop.floatValue = Mathf.Clamp(font_normalSpacing_prop.floatValue, -100, 100);
+                if (GUI.changed || evt_cmd == k_UndoRedo)
+                {
+                    GUI.changed = false;
+                }
+
+                EditorGUILayout.PropertyField(font_boldSpacing_prop, new GUIContent("Bold Spacing"));
+                font_boldSpacing_prop.floatValue = Mathf.Clamp(font_boldSpacing_prop.floatValue, 0, 100);
+                if (GUI.changed || evt_cmd == k_UndoRedo)
+                {
+                    GUI.changed = false;
+                }
+                EditorGUILayout.EndHorizontal();
+                
+                EditorGUILayout.BeginHorizontal();
+                EditorGUILayout.PropertyField(font_italicStyle_prop, new GUIContent("Italic Style"));
+                font_italicStyle_prop.intValue = Mathf.Clamp(font_italicStyle_prop.intValue, 15, 60);
+                
+                EditorGUILayout.PropertyField(font_tabSize_prop, new GUIContent("Tab Multiple"));
+                EditorGUILayout.EndHorizontal();
+                EditorGUILayout.EndVertical();
+                EditorGUILayout.Space();
+            }
+
+            EditorGUIUtility.labelWidth = 0;
+            EditorGUIUtility.fieldWidth = 0;
+            #endregion
+
+            // FALLBACK FONT ASSETS
+            #region Fallback Font Asset
+            rect = EditorGUILayout.GetControlRect(false, 24);
+            EditorGUI.indentLevel = 0;
+            if (GUI.Button(rect, new GUIContent("<b>Fallback Font Assets</b>", "Select the Font Assets that will be searched and used as fallback when characters are missing from this font asset."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.fallbackFontAssetPanel = !UI_PanelState.fallbackFontAssetPanel;
+
+            GUI.Label(rect, (UI_PanelState.fallbackFontAssetPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.fallbackFontAssetPanel)
+            {
+                EditorGUIUtility.labelWidth = 120;
+                EditorGUI.indentLevel = 0;
+
+                m_list.DoLayoutList();
+                EditorGUILayout.Space();
+            }
+            #endregion
+
+            // CHARACTER TABLE TABLE
+            #region Character Table
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUIUtility.fieldWidth = fieldWidth;
+            EditorGUI.indentLevel = 0;
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Character Table</b>", "List of characters contained in this font asset."), TMP_UIStyleManager.sectionHeader)) 
+                UI_PanelState.characterTablePanel = !UI_PanelState.characterTablePanel;
+
+            GUI.Label(rect, (UI_PanelState.characterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.characterTablePanel)
+            {
+                int arraySize = m_CharacterTable_prop.arraySize;
+                int itemsPerPage = 15;
+
+                // Display Glyph Management Tools
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    // Search Bar implementation
+                    #region DISPLAY SEARCH BAR
+                    EditorGUILayout.BeginHorizontal();
+                    {
+                        EditorGUIUtility.labelWidth = 130f;
+                        EditorGUI.BeginChangeCheck();
+                        string searchPattern = EditorGUILayout.TextField("Character Search", m_CharacterSearchPattern, "SearchTextField");
+                        if (EditorGUI.EndChangeCheck() || m_isSearchDirty)
+                        {
+                            if (string.IsNullOrEmpty(searchPattern) == false)
+                            {
+                                m_CharacterSearchPattern = searchPattern;
+
+                                // Search Character Table for potential matches
+                                SearchCharacterTable (m_CharacterSearchPattern, ref m_CharacterSearchList);
+                            }
+                            else
+                                m_CharacterSearchPattern = null;
+
+                            m_isSearchDirty = false;
+                        }
+
+                        string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton";
+                        if (GUILayout.Button(GUIContent.none, styleName))
+                        {
+                            GUIUtility.keyboardControl = 0;
+                            m_CharacterSearchPattern = string.Empty;
+                        }
+                    }
+                    EditorGUILayout.EndHorizontal();
+                    #endregion
+
+                    // Display Page Navigation
+                    if (!string.IsNullOrEmpty(m_CharacterSearchPattern))
+                        arraySize = m_CharacterSearchList.Count;
+
+                    DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage);
+                }
+                EditorGUILayout.EndVertical();
+
+                // Display Character Table Elements
+                if (arraySize > 0)
+                {
+                    // Display each character entry using the CharacterPropertyDrawer.
+                    for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++)
+                    {
+                        // Define the start of the selection region of the element.
+                        Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        int elementIndex = i;
+                        if (!string.IsNullOrEmpty(m_CharacterSearchPattern))
+                            elementIndex = m_CharacterSearchList[i];
+
+                        SerializedProperty characterProperty = m_CharacterTable_prop.GetArrayElementAtIndex(elementIndex);
+
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+
+                        EditorGUI.BeginDisabledGroup(i != m_SelectedCharacterRecord);
+                        {
+                            EditorGUILayout.PropertyField(characterProperty);
+                        }
+                        EditorGUI.EndDisabledGroup();
+
+                        EditorGUILayout.EndVertical();
+
+                        // Define the end of the selection region of the element.
+                        Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        // Check for Item selection
+                        Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                        if (DoSelectionCheck(selectionArea))
+                        {
+                            if (m_SelectedCharacterRecord == i)
+                                m_SelectedCharacterRecord = -1;
+                            else
+                            {
+                                m_SelectedCharacterRecord = i;
+                                m_AddCharacterWarning.isEnabled = false;
+                                m_unicodeHexLabel = k_placeholderUnicodeHex;
+                                GUIUtility.keyboardControl = 0;
+                            }
+                        }
+
+                        // Draw Selection Highlight and Glyph Options
+                        if (m_SelectedCharacterRecord == i)
+                        {
+                            TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+
+                            // Draw Glyph management options
+                            Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f);
+                            float optionAreaWidth = controlRect.width * 0.6f;
+                            float btnWidth = optionAreaWidth / 3;
+
+                            Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height);
+
+                            // Copy Selected Glyph to Target Glyph ID
+                            GUI.enabled = !string.IsNullOrEmpty(m_dstUnicode);
+                            if (GUI.Button(position, new GUIContent("Copy to")))
+                            {
+                                GUIUtility.keyboardControl = 0;
+
+                                // Convert Hex Value to Decimal
+                                int dstGlyphID = TMP_TextUtilities.StringHexToInt(m_dstUnicode);
+
+                                //Add new glyph at target Unicode hex id.
+                                if (!AddNewCharacter(elementIndex, dstGlyphID))
+                                {
+                                    m_AddCharacterWarning.isEnabled = true;
+                                    m_AddCharacterWarning.expirationTime = EditorApplication.timeSinceStartup + 1;
+                                }
+
+                                m_dstUnicode = string.Empty;
+                                m_isSearchDirty = true;
+
+                                TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset);
+                            }
+
+                            // Target Glyph ID
+                            GUI.enabled = true;
+                            position.x += btnWidth;
+
+                            GUI.SetNextControlName("CharacterID_Input");
+                            m_dstUnicode = EditorGUI.TextField(position, m_dstUnicode);
+
+                            // Placeholder text
+                            EditorGUI.LabelField(position, new GUIContent(m_unicodeHexLabel, "The Unicode (Hex) ID of the duplicated Character"), TMP_UIStyleManager.label);
+
+                            // Only filter the input when the destination glyph ID text field has focus.
+                            if (GUI.GetNameOfFocusedControl() == "CharacterID_Input")
+                            {
+                                m_unicodeHexLabel = string.Empty;
+
+                                //Filter out unwanted characters.
+                                char chr = Event.current.character;
+                                if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F'))
+                                {
+                                    Event.current.character = '\0';
+                                }
+                            }
+                            else
+                            {
+                                m_unicodeHexLabel = k_placeholderUnicodeHex;
+                                //m_dstUnicode = string.Empty;
+                            }
+
+
+                            // Remove Glyph
+                            position.x += btnWidth;
+                            if (GUI.Button(position, "Remove"))
+                            {
+                                GUIUtility.keyboardControl = 0;
+
+                                RemoveCharacterFromList(elementIndex);
+
+                                isAssetDirty = true;
+                                m_SelectedCharacterRecord = -1;
+                                m_isSearchDirty = true;
+                                break;
+                            }
+
+                            if (m_AddCharacterWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddCharacterWarning.expirationTime)
+                            {
+                                EditorGUILayout.HelpBox("The Destination Character ID already exists", MessageType.Warning);
+                            }
+
+                        }
+                    }
+                }
+
+                DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage);
+
+                EditorGUILayout.Space();
+            }
+            #endregion
+
+            // GLYPH TABLE
+            #region Glyph Table
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUIUtility.fieldWidth = fieldWidth;
+            EditorGUI.indentLevel = 0;
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            GUIStyle glyphPanelStyle = new GUIStyle(EditorStyles.helpBox);
+
+            if (GUI.Button(rect, new GUIContent("<b>Glyph Table</b>", "List of glyphs contained in this font asset."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.glyphTablePanel = !UI_PanelState.glyphTablePanel;
+
+            GUI.Label(rect, (UI_PanelState.glyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.glyphTablePanel)
+            {
+                int arraySize = m_GlyphTable_prop.arraySize;
+                int itemsPerPage = 15;
+
+                // Display Glyph Management Tools
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    // Search Bar implementation
+                    #region DISPLAY SEARCH BAR
+                    EditorGUILayout.BeginHorizontal();
+                    {
+                        EditorGUIUtility.labelWidth = 130f;
+                        EditorGUI.BeginChangeCheck();
+                        string searchPattern = EditorGUILayout.TextField("Glyph Search", m_GlyphSearchPattern, "SearchTextField");
+                        if (EditorGUI.EndChangeCheck() || m_isSearchDirty)
+                        {
+                            if (string.IsNullOrEmpty(searchPattern) == false)
+                            {
+                                m_GlyphSearchPattern = searchPattern;
+
+                                // Search Glyph Table for potential matches
+                                SearchGlyphTable(m_GlyphSearchPattern, ref m_GlyphSearchList);
+                            }
+                            else
+                                m_GlyphSearchPattern = null;
+
+                            m_isSearchDirty = false;
+                        }
+
+                        string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton";
+                        if (GUILayout.Button(GUIContent.none, styleName))
+                        {
+                            GUIUtility.keyboardControl = 0;
+                            m_GlyphSearchPattern = string.Empty;
+                        }
+                    }
+                    EditorGUILayout.EndHorizontal();
+                    #endregion
+
+                    // Display Page Navigation
+                    if (!string.IsNullOrEmpty(m_GlyphSearchPattern))
+                        arraySize = m_GlyphSearchList.Count;
+
+                    DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage);
+                }
+                EditorGUILayout.EndVertical();
+
+                // Display Glyph Table Elements
+                
+                if (arraySize > 0)
+                {
+                    // Display each GlyphInfo entry using the GlyphInfo property drawer.
+                    for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++)
+                    {
+                        // Define the start of the selection region of the element.
+                        Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        int elementIndex = i;
+                        if (!string.IsNullOrEmpty(m_GlyphSearchPattern))
+                            elementIndex = m_GlyphSearchList[i];
+
+                        SerializedProperty glyphProperty = m_GlyphTable_prop.GetArrayElementAtIndex(elementIndex);
+
+                        EditorGUILayout.BeginVertical(glyphPanelStyle);
+
+                        using (new EditorGUI.DisabledScope(i != m_SelectedGlyphRecord))
+                        {
+                            EditorGUILayout.PropertyField(glyphProperty);
+                        }
+
+                        EditorGUILayout.EndVertical();
+
+                        // Define the end of the selection region of the element.
+                        Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        // Check for Item selection
+                        Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                        if (DoSelectionCheck(selectionArea))
+                        {
+                            if (m_SelectedGlyphRecord == i)
+                                m_SelectedGlyphRecord = -1;
+                            else
+                            {
+                                m_SelectedGlyphRecord = i;
+                                m_AddGlyphWarning.isEnabled = false;
+                                m_unicodeHexLabel = k_placeholderUnicodeHex;
+                                GUIUtility.keyboardControl = 0;
+                            }
+                        }
+
+                        // Draw Selection Highlight and Glyph Options
+                        if (m_SelectedGlyphRecord == i)
+                        {
+                            TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+
+                            // Draw Glyph management options
+                            Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f);
+                            float optionAreaWidth = controlRect.width * 0.6f;
+                            float btnWidth = optionAreaWidth / 3;
+
+                            Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height);
+
+                            // Copy Selected Glyph to Target Glyph ID
+                            GUI.enabled = !string.IsNullOrEmpty(m_dstGlyphID);
+                            if (GUI.Button(position, new GUIContent("Copy to")))
+                            {
+                                GUIUtility.keyboardControl = 0;
+                                int dstGlyphID;
+
+                                // Convert Hex Value to Decimal
+                                int.TryParse(m_dstGlyphID, out dstGlyphID);
+
+                                //Add new glyph at target Unicode hex id.
+                                if (!AddNewGlyph(elementIndex, dstGlyphID))
+                                {
+                                    m_AddGlyphWarning.isEnabled = true;
+                                    m_AddGlyphWarning.expirationTime = EditorApplication.timeSinceStartup + 1;
+                                }
+
+                                m_dstGlyphID = string.Empty;
+                                m_isSearchDirty = true;
+
+                                TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset);
+                            }
+
+                            // Target Glyph ID
+                            GUI.enabled = true;
+                            position.x += btnWidth;
+
+                            GUI.SetNextControlName("GlyphID_Input");
+                            m_dstGlyphID = EditorGUI.TextField(position, m_dstGlyphID);
+
+                            // Placeholder text
+                            EditorGUI.LabelField(position, new GUIContent(m_GlyphIDLabel, "The Glyph ID of the duplicated Glyph"), TMP_UIStyleManager.label);
+
+                            // Only filter the input when the destination glyph ID text field has focus.
+                            if (GUI.GetNameOfFocusedControl() == "GlyphID_Input")
+                            {
+                                m_GlyphIDLabel = string.Empty;
+
+                                //Filter out unwanted characters.
+                                char chr = Event.current.character;
+                                if ((chr < '0' || chr > '9'))
+                                {
+                                    Event.current.character = '\0';
+                                }
+                            }
+                            else
+                            {
+                                m_GlyphIDLabel = k_placeholderGlyphID;
+                                //m_dstGlyphID = string.Empty;
+                            }
+
+                            // Remove Glyph
+                            position.x += btnWidth;
+                            if (GUI.Button(position, "Remove"))
+                            {
+                                GUIUtility.keyboardControl = 0;
+
+                                RemoveGlyphFromList(elementIndex);
+
+                                isAssetDirty = true;
+                                m_SelectedGlyphRecord = -1;
+                                m_isSearchDirty = true;
+                                break;
+                            }
+
+                            if (m_AddGlyphWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddGlyphWarning.expirationTime)
+                            {
+                                EditorGUILayout.HelpBox("The Destination Glyph ID already exists", MessageType.Warning);
+                            }
+
+                        }
+                    }
+                }
+
+                DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage);
+
+                EditorGUILayout.Space();
+            }
+            #endregion
+
+            // FONT FEATURE TABLE
+            #region Font Feature Table
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUIUtility.fieldWidth = fieldWidth;
+            EditorGUI.indentLevel = 0;
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Glyph Adjustment Table</b>", "List of glyph adjustment / advanced kerning pairs."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.fontFeatureTablePanel = !UI_PanelState.fontFeatureTablePanel;
+
+            GUI.Label(rect, (UI_PanelState.fontFeatureTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.fontFeatureTablePanel)
+            {
+                int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize;
+                int itemsPerPage = 20;
+
+                // Display Kerning Pair Management Tools
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    // Search Bar implementation
+                    #region DISPLAY SEARCH BAR
+                    EditorGUILayout.BeginHorizontal();
+                    {
+                        EditorGUIUtility.labelWidth = 150f;
+                        EditorGUI.BeginChangeCheck();
+                        string searchPattern = EditorGUILayout.TextField("Adjustment Pair Search", m_KerningTableSearchPattern, "SearchTextField");
+                        if (EditorGUI.EndChangeCheck() || m_isSearchDirty)
+                        {
+                            if (string.IsNullOrEmpty(searchPattern) == false)
+                            {
+                                m_KerningTableSearchPattern = searchPattern;
+
+                                // Search Glyph Table for potential matches
+                                SearchKerningTable(m_KerningTableSearchPattern, ref m_KerningTableSearchList);
+                            }
+                            else
+                                m_KerningTableSearchPattern = null;
+
+                            m_isSearchDirty = false;
+                        }
+
+                        string styleName = string.IsNullOrEmpty(m_KerningTableSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton";
+                        if (GUILayout.Button(GUIContent.none, styleName))
+                        {
+                            GUIUtility.keyboardControl = 0;
+                            m_KerningTableSearchPattern = string.Empty;
+                        }
+                    }
+                    EditorGUILayout.EndHorizontal();
+                    #endregion
+
+                    // Display Page Navigation
+                    if (!string.IsNullOrEmpty(m_KerningTableSearchPattern))
+                        arraySize = m_KerningTableSearchList.Count;
+
+                    DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage);
+                }
+                EditorGUILayout.EndVertical();
+
+                if (arraySize > 0)
+                {
+                    // Display each GlyphInfo entry using the GlyphInfo property drawer.
+                    for (int i = itemsPerPage * m_CurrentKerningPage; i < arraySize && i < itemsPerPage * (m_CurrentKerningPage + 1); i++)
+                    {
+                        // Define the start of the selection region of the element.
+                        Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        int elementIndex = i;
+                        if (!string.IsNullOrEmpty(m_KerningTableSearchPattern))
+                            elementIndex = m_KerningTableSearchList[i];
+
+                        SerializedProperty pairAdjustmentRecordProperty = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(elementIndex);
+
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+
+                        using (new EditorGUI.DisabledScope(i != m_SelectedAdjustmentRecord))
+                        {
+                            EditorGUILayout.PropertyField(pairAdjustmentRecordProperty, new GUIContent("Selectable"));
+                        }
+
+                        EditorGUILayout.EndVertical();
+
+                        // Define the end of the selection region of the element.
+                        Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        // Check for Item selection
+                        Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                        if (DoSelectionCheck(selectionArea))
+                        {
+                            if (m_SelectedAdjustmentRecord == i)
+                            {
+                                m_SelectedAdjustmentRecord = -1;
+                            }
+                            else
+                            {
+                                m_SelectedAdjustmentRecord = i;
+                                GUIUtility.keyboardControl = 0;
+                            }
+                        }
+
+                        // Draw Selection Highlight and Kerning Pair Options
+                        if (m_SelectedAdjustmentRecord == i)
+                        {
+                            TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+
+                            // Draw Glyph management options
+                            Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f);
+                            float optionAreaWidth = controlRect.width;
+                            float btnWidth = optionAreaWidth / 4;
+
+                            Rect position = new Rect(controlRect.x + controlRect.width - btnWidth, controlRect.y, btnWidth, controlRect.height);
+
+                            // Remove Kerning pair
+                            GUI.enabled = true;
+                            if (GUI.Button(position, "Remove"))
+                            {
+                                GUIUtility.keyboardControl = 0;
+
+                                RemoveAdjustmentPairFromList(i);
+
+                                isAssetDirty = true;
+                                m_SelectedAdjustmentRecord = -1;
+                                m_isSearchDirty = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage);
+
+                GUILayout.Space(5);
+
+                // Add new kerning pair
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    EditorGUILayout.PropertyField(m_EmptyGlyphPairAdjustmentRecord_prop);
+                }
+                EditorGUILayout.EndVertical();
+
+                if (GUILayout.Button("Add New Glyph Adjustment Record"))
+                {
+                    SerializedProperty firstAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_FirstAdjustmentRecord");
+                    SerializedProperty secondAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_SecondAdjustmentRecord");
+
+                    uint firstGlyphIndex = (uint)firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue;
+                    uint secondGlyphIndex = (uint)secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue;
+
+                    TMP_GlyphValueRecord firstValueRecord = GetValueRecord(firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord"));
+                    TMP_GlyphValueRecord secondValueRecord = GetValueRecord(secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord"));
+
+                    errorCode = -1;
+                    long pairKey = (long)secondGlyphIndex << 32 | firstGlyphIndex;
+                    if (m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.ContainsKey(pairKey) == false)
+                    {
+                        TMP_GlyphPairAdjustmentRecord adjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(firstGlyphIndex, firstValueRecord), new TMP_GlyphAdjustmentRecord(secondGlyphIndex, secondValueRecord));
+                        m_FontFeatureTable.m_GlyphPairAdjustmentRecords.Add(adjustmentRecord);
+                        m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Add(pairKey, adjustmentRecord);
+                        errorCode = 0;
+                    }
+
+                    TMP_Character character;
+
+                    // Add glyphs and characters
+                    uint firstCharacter = m_SerializedPropertyHolder.firstCharacter;
+                    if (!m_fontAsset.characterLookupTable.ContainsKey(firstCharacter))
+                        m_fontAsset.TryAddCharacterInternal(firstCharacter, out character);
+
+                    uint secondCharacter = m_SerializedPropertyHolder.secondCharacter;
+                    if (!m_fontAsset.characterLookupTable.ContainsKey(secondCharacter))
+                        m_fontAsset.TryAddCharacterInternal(secondCharacter, out character);
+
+                    // Sort Kerning Pairs & Reload Font Asset if new kerning pair was added.
+                    if (errorCode != -1)
+                    {
+                        m_FontFeatureTable.SortGlyphPairAdjustmentRecords();
+                        serializedObject.ApplyModifiedProperties();
+                        isAssetDirty = true;
+                        m_isSearchDirty = true;
+                    }
+                    else
+                    {
+                        timeStamp = System.DateTime.Now.AddSeconds(5);
+                    }
+
+                    // Clear Add Kerning Pair Panel
+                    // TODO
+                }
+
+                if (errorCode == -1)
+                {
+                    GUILayout.BeginHorizontal();
+                    GUILayout.FlexibleSpace();
+                    GUILayout.Label("Kerning Pair already <color=#ffff00>exists!</color>", TMP_UIStyleManager.label);
+                    GUILayout.FlexibleSpace();
+                    GUILayout.EndHorizontal();
+
+                    if (System.DateTime.Now > timeStamp)
+                        errorCode = 0;
+                }
+            }
+            #endregion
+
+            if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty)
+            {
+                // Delay callback until user has decided to Apply or Revert the changes.
+                if (m_DisplayDestructiveChangeWarning == false)
+                    TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset);
+
+                if (m_fontAsset.m_IsFontAssetLookupTablesDirty || evt_cmd == k_UndoRedo)
+                    m_fontAsset.ReadFontAssetDefinition();
+
+                isAssetDirty = false;
+                EditorUtility.SetDirty(target);
+            }
+
+
+            // Clear selection if mouse event was not consumed. 
+            GUI.enabled = true;
+            if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0)
+                m_SelectedAdjustmentRecord = -1;
+
+        }
+
+        void CleanFallbackFontAssetTable()
+        {
+            SerializedProperty m_FallbackFontAsseTable = serializedObject.FindProperty("m_FallbackFontAssetTable");
+
+            bool isListDirty = false;
+
+            int elementCount = m_FallbackFontAsseTable.arraySize;
+
+            for (int i = 0; i < elementCount; i++)
+            {
+                SerializedProperty element = m_FallbackFontAsseTable.GetArrayElementAtIndex(i);
+                if (element.objectReferenceValue == null)
+                {
+                    m_FallbackFontAsseTable.DeleteArrayElementAtIndex(i);
+                    elementCount -= 1;
+                    i -= 1;
+
+                    isListDirty = true;
+                }
+            }
+
+            if (isListDirty)
+            {
+                serializedObject.ApplyModifiedProperties();
+                serializedObject.Update();
+            }
+        }
+
+        void SavedAtlasGenerationSettings()
+        {
+            m_AtlasSettings.glyphRenderMode = (GlyphRenderMode)m_AtlasRenderMode_prop.intValue;
+            m_AtlasSettings.pointSize       = m_SamplingPointSize_prop.intValue;
+            m_AtlasSettings.padding         = m_AtlasPadding_prop.intValue;
+            m_AtlasSettings.atlasWidth      = m_AtlasWidth_prop.intValue;
+            m_AtlasSettings.atlasHeight     = m_AtlasHeight_prop.intValue;
+        }
+
+        void RestoreAtlasGenerationSettings()
+        {
+            m_AtlasRenderMode_prop.intValue = (int)m_AtlasSettings.glyphRenderMode;
+            m_SamplingPointSize_prop.intValue = m_AtlasSettings.pointSize;
+            m_AtlasPadding_prop.intValue = m_AtlasSettings.padding;
+            m_AtlasWidth_prop.intValue = m_AtlasSettings.atlasWidth;
+            m_AtlasHeight_prop.intValue = m_AtlasSettings.atlasHeight;
+        }
+
+
+        void UpdateFontAssetCreationSettings()
+        {
+            m_fontAsset.m_CreationSettings.pointSize = m_SamplingPointSize_prop.intValue;
+            m_fontAsset.m_CreationSettings.renderMode = m_AtlasRenderMode_prop.intValue;
+            m_fontAsset.m_CreationSettings.padding = m_AtlasPadding_prop.intValue;
+            m_fontAsset.m_CreationSettings.atlasWidth = m_AtlasWidth_prop.intValue;
+            m_fontAsset.m_CreationSettings.atlasHeight = m_AtlasHeight_prop.intValue;
+        }
+
+
+        void UpdateCharacterData(SerializedProperty property, int index)
+        {
+            TMP_Character character = m_fontAsset.characterTable[index];
+
+            character.unicode = (uint)property.FindPropertyRelative("m_Unicode").intValue;
+            character.scale = property.FindPropertyRelative("m_Scale").floatValue;
+
+            SerializedProperty glyphProperty = property.FindPropertyRelative("m_Glyph");
+            character.glyph.index = (uint)glyphProperty.FindPropertyRelative("m_Index").intValue;
+
+            SerializedProperty glyphRectProperty = glyphProperty.FindPropertyRelative("m_GlyphRect");
+            character.glyph.glyphRect = new GlyphRect(glyphRectProperty.FindPropertyRelative("m_X").intValue, glyphRectProperty.FindPropertyRelative("m_Y").intValue, glyphRectProperty.FindPropertyRelative("m_Width").intValue, glyphRectProperty.FindPropertyRelative("m_Height").intValue);
+
+            SerializedProperty glyphMetricsProperty = glyphProperty.FindPropertyRelative("m_Metrics");
+            character.glyph.metrics = new GlyphMetrics(glyphMetricsProperty.FindPropertyRelative("m_Width").floatValue, glyphMetricsProperty.FindPropertyRelative("m_Height").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalAdvance").floatValue);
+
+            character.glyph.scale = glyphProperty.FindPropertyRelative("m_Scale").floatValue;
+
+            character.glyph.atlasIndex = glyphProperty.FindPropertyRelative("m_AtlasIndex").intValue;
+        }
+
+
+        void UpdateGlyphData(SerializedProperty property, int index)
+        {
+            Glyph glyph = m_fontAsset.glyphTable[index];
+
+            glyph.index = (uint)property.FindPropertyRelative("m_Index").intValue;
+
+            SerializedProperty glyphRect = property.FindPropertyRelative("m_GlyphRect");
+            glyph.glyphRect = new GlyphRect(glyphRect.FindPropertyRelative("m_X").intValue, glyphRect.FindPropertyRelative("m_Y").intValue, glyphRect.FindPropertyRelative("m_Width").intValue, glyphRect.FindPropertyRelative("m_Height").intValue);
+
+            SerializedProperty glyphMetrics = property.FindPropertyRelative("m_Metrics");
+            glyph.metrics = new GlyphMetrics(glyphMetrics.FindPropertyRelative("m_Width").floatValue, glyphMetrics.FindPropertyRelative("m_Height").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue);
+
+            glyph.scale = property.FindPropertyRelative("m_Scale").floatValue;
+        }
+
+
+        void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage)
+        {
+            Rect pagePos = EditorGUILayout.GetControlRect(false, 20);
+            pagePos.width /= 3;
+
+            int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward
+
+            // Previous Page
+            GUI.enabled = currentPage > 0;
+
+            if (GUI.Button(pagePos, "Previous Page"))
+                currentPage -= 1 * shiftMultiplier;
+
+
+            // Page Counter
+            GUI.enabled = true;
+            pagePos.x += pagePos.width;
+            int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f);
+            GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel);
+
+            // Next Page
+            pagePos.x += pagePos.width;
+            GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize;
+
+            if (GUI.Button(pagePos, "Next Page"))
+                currentPage += 1 * shiftMultiplier;
+
+            // Clamp page range
+            currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage);
+
+            GUI.enabled = true;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="srcGlyphID"></param>
+        /// <param name="dstGlyphID"></param>
+        bool AddNewGlyph(int srcIndex, int dstGlyphID)
+        {
+            // Make sure Destination Glyph ID doesn't already contain a Glyph
+            if (m_fontAsset.glyphLookupTable.ContainsKey((uint)dstGlyphID))
+                return false;
+
+            // Add new element to glyph list.
+            m_GlyphTable_prop.arraySize += 1;
+
+            // Get a reference to the source glyph.
+            SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(srcIndex);
+
+            int dstIndex = m_GlyphTable_prop.arraySize - 1;
+
+            // Get a reference to the target / destination glyph.
+            SerializedProperty targetGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(dstIndex);
+
+            CopyGlyphSerializedProperty(sourceGlyph, ref targetGlyph);
+
+            // Update the ID of the glyph
+            targetGlyph.FindPropertyRelative("m_Index").intValue = dstGlyphID;
+
+            serializedObject.ApplyModifiedProperties();
+
+            m_fontAsset.SortGlyphTable();
+
+            m_fontAsset.ReadFontAssetDefinition();
+
+            return true;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="glyphID"></param>
+        void RemoveGlyphFromList(int index)
+        {
+            if (index > m_GlyphTable_prop.arraySize)
+                return;
+
+            int targetGlyphIndex = m_GlyphTable_prop.GetArrayElementAtIndex(index).FindPropertyRelative("m_Index").intValue;
+
+            m_GlyphTable_prop.DeleteArrayElementAtIndex(index);
+
+            // Remove all characters referencing this glyph.
+            for (int i = 0; i < m_CharacterTable_prop.arraySize; i++)
+            {
+                int glyphIndex = m_CharacterTable_prop.GetArrayElementAtIndex(i).FindPropertyRelative("m_GlyphIndex").intValue;
+
+                if (glyphIndex == targetGlyphIndex)
+                {
+                    // Remove character
+                    m_CharacterTable_prop.DeleteArrayElementAtIndex(i);
+                }
+            }
+
+            serializedObject.ApplyModifiedProperties();
+
+            m_fontAsset.ReadFontAssetDefinition();
+        }
+
+        bool AddNewCharacter(int srcIndex, int dstGlyphID)
+        {
+            // Make sure Destination Glyph ID doesn't already contain a Glyph
+            if (m_fontAsset.characterLookupTable.ContainsKey((uint)dstGlyphID))
+                return false;
+
+            // Add new element to glyph list.
+            m_CharacterTable_prop.arraySize += 1;
+
+            // Get a reference to the source glyph.
+            SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(srcIndex);
+
+            int dstIndex = m_CharacterTable_prop.arraySize - 1;
+
+            // Get a reference to the target / destination glyph.
+            SerializedProperty targetCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(dstIndex);
+
+            CopyCharacterSerializedProperty(sourceCharacter, ref targetCharacter);
+
+            // Update the ID of the glyph
+            targetCharacter.FindPropertyRelative("m_Unicode").intValue = dstGlyphID;
+
+            serializedObject.ApplyModifiedProperties();
+
+            m_fontAsset.SortCharacterTable();
+
+            m_fontAsset.ReadFontAssetDefinition();
+
+            return true;
+        }
+
+        void RemoveCharacterFromList(int index)
+        {
+            if (index > m_CharacterTable_prop.arraySize)
+                return;
+
+            m_CharacterTable_prop.DeleteArrayElementAtIndex(index);
+
+            serializedObject.ApplyModifiedProperties();
+
+            m_fontAsset.ReadFontAssetDefinition();
+        }
+
+
+        // Check if any of the Style elements were clicked on.
+        private bool DoSelectionCheck(Rect selectionArea)
+        {
+            Event currentEvent = Event.current;
+
+            switch (currentEvent.type)
+            {
+                case EventType.MouseDown:
+                    if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0)
+                    {
+                        currentEvent.Use();
+                        return true;
+                    }
+
+                    break;
+            }
+
+            return false;
+        }
+
+        TMP_GlyphValueRecord GetValueRecord(SerializedProperty property)
+        {
+            TMP_GlyphValueRecord record = new TMP_GlyphValueRecord();
+            record.xPlacement = property.FindPropertyRelative("m_XPlacement").floatValue;
+            record.yPlacement = property.FindPropertyRelative("m_YPlacement").floatValue;
+            record.xAdvance = property.FindPropertyRelative("m_XAdvance").floatValue;
+            record.yAdvance = property.FindPropertyRelative("m_YAdvance").floatValue;
+
+            return record;
+        }
+
+        void RemoveAdjustmentPairFromList(int index)
+        {
+            if (index > m_GlyphPairAdjustmentRecords_prop.arraySize)
+                return;
+
+            m_GlyphPairAdjustmentRecords_prop.DeleteArrayElementAtIndex(index);
+
+            serializedObject.ApplyModifiedProperties();
+
+            m_fontAsset.ReadFontAssetDefinition();
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="srcGlyph"></param>
+        /// <param name="dstGlyph"></param>
+        void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph)
+        {
+            // TODO : Should make a generic function which copies each of the properties.
+            dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue;
+
+            // Glyph -> GlyphMetrics
+            SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics");
+            SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics");
+
+            dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue;
+
+            // Glyph -> GlyphRect
+            SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect");
+            SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect");
+
+            dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue;
+
+            dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue;
+            dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue;
+        }
+
+
+        void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target)
+        {
+            // TODO : Should make a generic function which copies each of the properties.
+            int unicode = source.FindPropertyRelative("m_Unicode").intValue;
+            target.FindPropertyRelative("m_Unicode").intValue = unicode;
+
+            int srcGlyphIndex = source.FindPropertyRelative("m_GlyphIndex").intValue;
+            target.FindPropertyRelative("m_GlyphIndex").intValue = srcGlyphIndex;
+
+            target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="searchPattern"></param>
+        /// <returns></returns>
+        void SearchGlyphTable (string searchPattern, ref List<int> searchResults)
+        {
+            if (searchResults == null) searchResults = new List<int>();
+
+            searchResults.Clear();
+
+            int arraySize = m_GlyphTable_prop.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(i);
+
+                int id = sourceGlyph.FindPropertyRelative("m_Index").intValue;
+
+                // Check for potential match against a character.
+                //if (searchPattern.Length == 1 && id == searchPattern[0])
+                //    searchResults.Add(i);
+
+                // Check for potential match against decimal id
+                if (id.ToString().Contains(searchPattern))
+                    searchResults.Add(i);
+
+                //if (id.ToString("x").Contains(searchPattern))
+                //    searchResults.Add(i);
+
+                //if (id.ToString("X").Contains(searchPattern))
+                //    searchResults.Add(i);
+            }
+        }
+
+
+        void SearchCharacterTable(string searchPattern, ref List<int> searchResults)
+        {
+            if (searchResults == null) searchResults = new List<int>();
+
+            searchResults.Clear();
+
+            int arraySize = m_CharacterTable_prop.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(i);
+
+                int id = sourceCharacter.FindPropertyRelative("m_Unicode").intValue;
+
+                // Check for potential match against a character.
+                if (searchPattern.Length == 1 && id == searchPattern[0])
+                    searchResults.Add(i);
+                else if (id.ToString("x").Contains(searchPattern))
+                    searchResults.Add(i);
+                else if (id.ToString("X").Contains(searchPattern))
+                    searchResults.Add(i);
+                
+                // Check for potential match against decimal id
+                //if (id.ToString().Contains(searchPattern))
+                //    searchResults.Add(i);
+            }
+        }
+
+
+        void SearchKerningTable(string searchPattern, ref List<int> searchResults)
+        {
+            if (searchResults == null) searchResults = new List<int>();
+
+            searchResults.Clear();
+
+            // Lookup glyph index of potential characters contained in the search pattern.
+            uint firstGlyphIndex = 0;
+            TMP_Character firstCharacterSearch;
+
+            if (searchPattern.Length > 0 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[0], out firstCharacterSearch))
+                firstGlyphIndex = firstCharacterSearch.glyphIndex;
+
+            uint secondGlyphIndex = 0;
+            TMP_Character secondCharacterSearch;
+
+            if (searchPattern.Length > 1 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[1], out secondCharacterSearch))
+                secondGlyphIndex = secondCharacterSearch.glyphIndex;
+
+            int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                SerializedProperty record = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(i);
+
+                SerializedProperty firstAdjustmentRecord = record.FindPropertyRelative("m_FirstAdjustmentRecord");
+                SerializedProperty secondAdjustmentRecord = record.FindPropertyRelative("m_SecondAdjustmentRecord");
+
+                int firstGlyph = firstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue;
+                int secondGlyph = secondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue;
+
+                if (firstGlyphIndex == firstGlyph && secondGlyphIndex == secondGlyph)
+                    searchResults.Add(i);
+                else if (searchPattern.Length == 1 && (firstGlyphIndex == firstGlyph || firstGlyphIndex == secondGlyph))
+                    searchResults.Add(i);
+                else if (firstGlyph.ToString().Contains(searchPattern))
+                    searchResults.Add(i);
+                else if (secondGlyph.ToString().Contains(searchPattern))
+                    searchResults.Add(i);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b26bae55b2d1c733424ee0598111d6a32a60427
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 96b44f7d98314b139324a8a87eb66067
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1e432331e9efa8c212b6cf3dca3c0f081e2269e5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs
@@ -0,0 +1,190 @@
+using UnityEngine;
+using UnityEditor;
+using System.Linq;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using TMPro;
+
+
+namespace TMPro
+{
+    public static class TMP_FontAsset_CreationMenu
+    {
+        /*
+        [MenuItem("Assets/Create/TextMeshPro/Font Asset Fallback", false, 105)]
+        public static void CreateFallbackFontAsset()
+        {
+            Object target = Selection.activeObject;
+
+            // Make sure the selection is a font file
+            if (target == null || target.GetType() != typeof(TMP_FontAsset))
+            {
+                Debug.LogWarning("A Font file must first be selected in order to create a Font Asset.");
+                return;
+            }
+
+            TMP_FontAsset sourceFontAsset = (TMP_FontAsset)target; 
+
+            string sourceFontFilePath = AssetDatabase.GetAssetPath(target);
+
+            string folderPath = Path.GetDirectoryName(sourceFontFilePath);
+            string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath);
+
+            string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Fallback.asset");
+
+            //// Create new TM Font Asset.
+            TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
+            AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName);
+
+            fontAsset.version = "1.1.0";
+
+            fontAsset.faceInfo = sourceFontAsset.faceInfo;
+
+            fontAsset.m_SourceFontFileGUID = sourceFontAsset.m_SourceFontFileGUID;
+            fontAsset.m_SourceFontFile_EditorRef = sourceFontAsset.m_SourceFontFile_EditorRef;
+            fontAsset.atlasPopulationMode = TMP_FontAsset.AtlasPopulationMode.Dynamic;
+
+            int atlasWidth = fontAsset.atlasWidth = sourceFontAsset.atlasWidth;
+            int atlasHeight = fontAsset.atlasHeight = sourceFontAsset.atlasHeight;
+            int atlasPadding = fontAsset.atlasPadding = sourceFontAsset.atlasPadding;
+            fontAsset.atlasRenderMode = sourceFontAsset.atlasRenderMode;
+
+            // Initialize array for the font atlas textures.
+            fontAsset.atlasTextures = new Texture2D[1];
+
+            // Create and add font atlas texture
+            Texture2D texture = new Texture2D(atlasWidth, atlasHeight, TextureFormat.Alpha8, false);
+            Color32[] colors = new Color32[atlasWidth * atlasHeight];
+            texture.SetPixels32(colors);
+
+            texture.name = assetName + " Atlas";
+            fontAsset.atlasTextures[0] = texture;
+            AssetDatabase.AddObjectToAsset(texture, fontAsset);
+
+            // Add free rectangle of the size of the texture.
+            int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+            fontAsset.m_FreeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) };
+            fontAsset.m_UsedGlyphRects = new List<GlyphRect>();
+
+            // Create new Material and Add it as Sub-Asset
+            Material tmp_material = new Material(sourceFontAsset.material);
+
+            tmp_material.name = texture.name + " Material";
+            tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+            tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+            tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+            tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
+
+            tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+            tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+            fontAsset.material = tmp_material;
+
+            AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+            // Add Font Asset Creation Settings
+            // TODO
+
+            // Not sure if this is still necessary in newer versions of Unity.
+            EditorUtility.SetDirty(fontAsset);
+
+            AssetDatabase.SaveAssets();
+        }
+        */
+
+        //[MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", true)]
+        //public static bool CreateFontAssetMenuValidation()
+        //{
+        //    return false;
+        //}
+
+        [MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", false, 100)]
+        public static void CreateFontAsset()
+        {
+            Object target = Selection.activeObject;
+
+            // Make sure the selection is a font file
+            if (target == null || target.GetType() != typeof(Font))
+            {
+                Debug.LogWarning("A Font file must first be selected in order to create a Font Asset.");
+                return;
+            }
+
+            Font sourceFont = (Font)target;
+
+            string sourceFontFilePath = AssetDatabase.GetAssetPath(target);
+
+            string folderPath = Path.GetDirectoryName(sourceFontFilePath);
+            string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath);
+
+            string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " SDF.asset");
+
+            //// Create new TM Font Asset.
+            TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
+            AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName);
+
+            fontAsset.version = "1.1.0";
+
+            // Set face information
+            FontEngine.InitializeFontEngine();
+            FontEngine.LoadFontFace(sourceFont, 90);
+            fontAsset.faceInfo = FontEngine.GetFaceInfo();
+
+            // Set font reference and GUID
+            fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(sourceFontFilePath);
+            fontAsset.m_SourceFontFile_EditorRef = sourceFont;
+            fontAsset.atlasPopulationMode = AtlasPopulationMode.Dynamic;
+
+            // Default atlas resolution is 1024 x 1024.
+            int atlasWidth = fontAsset.atlasWidth = 1024;
+            int atlasHeight = fontAsset.atlasHeight = 1024;
+            int atlasPadding = fontAsset.atlasPadding = 9;
+            fontAsset.atlasRenderMode = GlyphRenderMode.SDFAA;
+
+            // Initialize array for the font atlas textures.
+            fontAsset.atlasTextures = new Texture2D[1];
+
+            // Create atlas texture of size zero.
+            Texture2D texture = new Texture2D(0, 0, TextureFormat.Alpha8, false);
+
+            texture.name = assetName + " Atlas";
+            fontAsset.atlasTextures[0] = texture;
+            AssetDatabase.AddObjectToAsset(texture, fontAsset);
+
+            // Add free rectangle of the size of the texture.
+            int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+            fontAsset.freeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) };
+            fontAsset.usedGlyphRects = new List<GlyphRect>();
+
+            // Create new Material and Add it as Sub-Asset
+            Shader default_Shader = Shader.Find("TextMeshPro/Distance Field");
+            Material tmp_material = new Material(default_Shader);
+
+            tmp_material.name = texture.name + " Material";
+            tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+            tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+            tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+            tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
+
+            tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+            tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+            fontAsset.material = tmp_material;
+
+            AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+            // Add Font Asset Creation Settings
+            fontAsset.creationSettings = new FontAssetCreationSettings(fontAsset.m_SourceFontFileGUID, fontAsset.faceInfo.pointSize, 0, atlasPadding, 0, 1024, 1024, 7, string.Empty, (int)GlyphRenderMode.SDFAA);
+
+            // Not sure if this is still necessary in newer versions of Unity.
+            EditorUtility.SetDirty(fontAsset);
+
+            AssetDatabase.SaveAssets();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..57a3fceaed423dfd13d04cca49b58fa8fef53d23
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7496af95dfe67cf429ac65edaaf99106
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fd4eb3ea8cf4722e6296929ffa9b8372cc4f41a7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs
@@ -0,0 +1,384 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using UnityEditor;
+using System.Collections;
+using System.Text.RegularExpressions;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_GlyphPairAdjustmentRecord))]
+    public class TMP_GlyphPairAdjustmentRecordPropertyDrawer : PropertyDrawer
+    {
+        private bool isEditingEnabled = false;
+        private bool isSelectable = false;
+
+        private string m_FirstCharacter = string.Empty;
+        private string m_SecondCharacter = string.Empty;
+        private string m_PreviousInput;
+
+        static GUIContent s_CharacterTextFieldLabel = new GUIContent("Char:", "Enter the character or its UTF16 or UTF32 Unicode character escape sequence. For UTF16 use \"\\uFF00\" and for UTF32 use \"\\UFF00FF00\" representation.");
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_FirstAdjustmentRecord = property.FindPropertyRelative("m_FirstAdjustmentRecord");
+            SerializedProperty prop_SecondAdjustmentRecord = property.FindPropertyRelative("m_SecondAdjustmentRecord");
+
+            SerializedProperty prop_FirstGlyphIndex = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex");
+            SerializedProperty prop_FirstGlyphValueRecord = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord");
+
+            SerializedProperty prop_SecondGlyphIndex = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex");
+            SerializedProperty prop_SecondGlyphValueRecord = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord");
+
+            SerializedProperty prop_FontFeatureLookupFlags = property.FindPropertyRelative("m_FeatureLookupFlags");
+
+            position.yMin += 2;
+
+            float width = position.width / 2;
+            float padding = 5.0f;
+
+            Rect rect;
+
+            isEditingEnabled = GUI.enabled;
+            isSelectable = label.text == "Selectable" ? true : false;
+
+            if (isSelectable)
+                GUILayoutUtility.GetRect(position.width, 75);
+            else
+                GUILayoutUtility.GetRect(position.width, 55);
+
+            GUIStyle style = new GUIStyle(EditorStyles.label);
+            style.richText = true;
+
+            // First Glyph
+            GUI.enabled = isEditingEnabled;
+            if (isSelectable)
+            {
+                rect = new Rect(position.x + 70, position.y, position.width, 49);
+
+                float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_FirstGlyphIndex.intValue)).x;
+                EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: <color=#FFFF80>" + prop_FirstGlyphIndex.intValue + "</color>"), style);
+
+                GUI.enabled = isEditingEnabled;
+                EditorGUIUtility.labelWidth = 30f;
+
+                rect = new Rect(position.x + 70, position.y + 10, (width - 70) - padding, 18);
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:"));
+
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:"));
+
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:"));
+
+                //rect.y += 20;
+                //EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YAdvance"), new GUIContent("AY:"));
+
+                DrawGlyph((uint)prop_FirstGlyphIndex.intValue, new Rect(position.x, position.y, position.width, position.height), property);
+            }
+            else
+            {
+                rect = new Rect(position.x, position.y, width / 2 * 0.8f - padding, 18);
+                EditorGUIUtility.labelWidth = 40f;
+
+                // First Character Lookup
+                GUI.SetNextControlName("FirstCharacterField");
+                EditorGUI.BeginChangeCheck();
+                string firstCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_FirstCharacter);
+
+                if (GUI.GetNameOfFocusedControl() == "FirstCharacterField")
+                {
+                    if (ValidateInput(firstCharacter))
+                    {
+                        //Debug.Log("1st Unicode value: [" + firstCharacter + "]");
+
+                        uint unicode = GetUnicodeCharacter(firstCharacter);
+
+                        // Lookup glyph index
+                        TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder;
+                        TMP_FontAsset fontAsset = propertyHolder.fontAsset;
+                        if (fontAsset != null)
+                        {
+                            prop_FirstGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode);
+                            propertyHolder.firstCharacter = unicode;
+                        }
+                    }
+                }
+
+                if (EditorGUI.EndChangeCheck())
+                    m_FirstCharacter = firstCharacter;
+
+                // First Glyph Index
+                rect.x += width / 2 * 0.8f;
+
+                EditorGUIUtility.labelWidth = 25f;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.PropertyField(rect, prop_FirstGlyphIndex, new GUIContent("ID:"));
+                if (EditorGUI.EndChangeCheck())
+                {
+
+                }
+
+                GUI.enabled = isEditingEnabled;
+                EditorGUIUtility.labelWidth = 25f;
+
+                rect = new Rect(position.x, position.y + 20, width * 0.5f - padding, 18);
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX"));
+
+                rect.x += width * 0.5f;
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY"));
+
+                rect.x = position.x;
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX"));
+
+                //rect.x += width * 0.5f;
+                //EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY"));
+
+            }
+
+
+            // Second Glyph
+            GUI.enabled = isEditingEnabled;
+            if (isSelectable)
+            {
+                float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_SecondGlyphIndex.intValue)).x;
+                EditorGUI.LabelField(new Rect(position.width / 2 + 20 + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: <color=#FFFF80>" + prop_SecondGlyphIndex.intValue + "</color>"), style);
+
+                GUI.enabled = isEditingEnabled;
+                EditorGUIUtility.labelWidth = 30f;
+
+                rect = new Rect(position.width / 2 + 20 + 70, position.y + 10, (width - 70) - padding, 18);
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:"));
+
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:"));
+
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:"));
+
+                //rect.y += 20;
+                //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY"));
+
+                DrawGlyph((uint)prop_SecondGlyphIndex.intValue, new Rect(position.width / 2 + 20, position.y, position.width, position.height), property);
+            }
+            else
+            {
+                rect = new Rect(position.width / 2 + 20, position.y, width / 2 * 0.8f - padding, 18);
+                EditorGUIUtility.labelWidth = 40f;
+
+                // Second Character Lookup
+                GUI.SetNextControlName("SecondCharacterField");
+                EditorGUI.BeginChangeCheck();
+                string secondCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_SecondCharacter);
+
+                if (GUI.GetNameOfFocusedControl() == "SecondCharacterField")
+                {
+                    if (ValidateInput(secondCharacter))
+                    {
+                        //Debug.Log("2nd Unicode value: [" + secondCharacter + "]");
+
+                        uint unicode = GetUnicodeCharacter(secondCharacter);
+
+                        // Lookup glyph index
+                        TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder;
+                        TMP_FontAsset fontAsset = propertyHolder.fontAsset;
+                        if (fontAsset != null)
+                        {
+                            prop_SecondGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode);
+                            propertyHolder.secondCharacter = unicode;
+                        }
+                    }
+                }
+
+                if (EditorGUI.EndChangeCheck())
+                    m_SecondCharacter = secondCharacter;
+
+                // Second Glyph Index
+                rect.x += width / 2 * 0.8f;
+
+                EditorGUIUtility.labelWidth = 25f;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.PropertyField(rect, prop_SecondGlyphIndex, new GUIContent("ID:"));
+                if (EditorGUI.EndChangeCheck())
+                {
+
+                }
+
+                GUI.enabled = isEditingEnabled;
+                EditorGUIUtility.labelWidth = 25f;
+
+                rect = new Rect(position.width / 2 + 20, position.y + 20, width * 0.5f - padding, 18);
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX"));
+
+                rect.x += width * 0.5f;
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY"));
+
+                rect.x = position.width / 2 + 20;
+                rect.y += 20;
+                EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX"));
+
+                //rect.x += width * 0.5f;
+                //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY"));
+            }
+
+            // Font Feature Lookup Flags
+            if (isSelectable)
+            {
+                EditorGUIUtility.labelWidth = 55f;
+
+                rect.x = position.width - 255;
+                rect.y += 23;
+                rect.width = 270; // width - 70 - padding;
+
+                FontFeatureLookupFlags flags = (FontFeatureLookupFlags)prop_FontFeatureLookupFlags.intValue;
+
+                EditorGUI.BeginChangeCheck();
+                flags = (FontFeatureLookupFlags)EditorGUI.EnumFlagsField(rect, new GUIContent("Options:"), flags);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    prop_FontFeatureLookupFlags.intValue = (int)flags;
+                }
+            }
+
+        }
+
+        bool ValidateInput(string source)
+        {
+            int length = string.IsNullOrEmpty(source) ? 0 : source.Length;
+
+            ////Filter out unwanted characters.
+            Event evt = Event.current;
+
+            char c = evt.character;
+
+            if (c != '\0')
+            {
+                switch (length)
+                {
+                    case 0:
+                        break;
+                    case 1:
+                        if (source != m_PreviousInput)
+                            return true;
+
+                        if ((source[0] == '\\' && (c == 'u' || c == 'U')) == false)
+                            evt.character = '\0';
+
+                        break;
+                    case 2:
+                    case 3:
+                    case 4:
+                    case 5:
+                        if ((c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F'))
+                            evt.character = '\0';
+                        break;
+                    case 6:
+                    case 7:
+                    case 8:
+                    case 9:
+                        if (source[1] == 'u' || (c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F'))
+                            evt.character = '\0';
+
+                        // Validate input
+                        if (length == 6 && source[1] == 'u' && source != m_PreviousInput)
+                            return true;
+                        break;
+                    case 10:
+                        if (source != m_PreviousInput)
+                            return true;
+
+                        evt.character = '\0';
+                        break;
+                }
+            }
+
+            m_PreviousInput = source;
+
+            return false;
+        }
+
+        uint GetUnicodeCharacter (string source)
+        {
+            uint unicode;
+
+            if (source.Length == 1)
+                unicode = source[0];
+            else if (source.Length == 6)
+                unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\u", ""));
+            else
+                unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\U", ""));
+
+            return unicode;
+        }
+
+        void DrawGlyph(uint glyphIndex, Rect position, SerializedProperty property)
+        {
+            // Get a reference to the sprite texture
+            TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset;
+
+            if (fontAsset == null)
+                return;
+
+            Glyph glyph;
+
+            // Check if glyph currently exists in the atlas texture.
+            if (!fontAsset.glyphLookupTable.TryGetValue(glyphIndex, out glyph))
+                return;
+
+            // Get reference to atlas texture.
+            int atlasIndex = fontAsset.m_AtlasTextureIndex;
+            Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null;
+
+            if (atlasTexture == null)
+                return;
+
+            Material mat;
+            if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                mat = TMP_FontAssetEditor.internalBitmapMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+            }
+            else
+            {
+                mat = TMP_FontAssetEditor.internalSDFMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+                mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1);
+            }
+
+            // Draw glyph from atlas texture.
+            Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 60);
+
+            GlyphRect glyphRect = glyph.glyphRect;
+
+            float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine;
+            float scale = glyphDrawPosition.width / normalizedHeight;
+
+            // Compute the normalized texture coordinates
+            Rect texCoords = new Rect((float)glyphRect.x / atlasTexture.width, (float)glyphRect.y / atlasTexture.height, (float)glyphRect.width / atlasTexture.width, (float)glyphRect.height / atlasTexture.height);
+
+            if (Event.current.type == EventType.Repaint)
+            {
+                glyphDrawPosition.x += (glyphDrawPosition.width - glyphRect.width * scale) / 2;
+                glyphDrawPosition.y += (glyphDrawPosition.height - glyphRect.height * scale) / 2;
+                glyphDrawPosition.width = glyphRect.width * scale;
+                glyphDrawPosition.height = glyphRect.height * scale;
+
+                // Could switch to using the default material of the font asset which would require passing scale to the shader.
+                Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat);
+            }
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b95203f5b931f9103fc6d070758a717079cec009
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d256fa541faf5d4409992c631adb98a1
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b92dfd66f50c9fc39f1e7aa5325cd71bf9067a2d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs
@@ -0,0 +1,118 @@
+ using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(Glyph))]
+    public class TMP_GlyphPropertyDrawer : PropertyDrawer
+    {
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index");
+            SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics");
+            SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect");
+            SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale");
+            SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex");
+
+            GUIStyle style = new GUIStyle(EditorStyles.label);
+            style.richText = true;
+
+            Rect rect = new Rect(position.x + 70, position.y, position.width, 49);
+
+            float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x;
+            EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 85, 64f, 18f), new GUIContent("ID: <color=#FFFF80>" + prop_GlyphIndex.intValue + "</color>"), style);
+            //EditorGUIUtility.labelWidth = 22f;
+            //EditorGUI.DelayedIntField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 89, 58f, 18f), prop_GlyphIndex, new GUIContent("ID:"));
+
+            // We get Rect since a valid position may not be provided by the caller.
+            EditorGUI.PropertyField(new Rect(rect.x, rect.y, position.width, 49), prop_GlyphRect);
+
+            rect.y += 45;
+            EditorGUI.PropertyField(rect, prop_GlyphMetrics);
+
+            EditorGUIUtility.labelWidth = 40f;
+            EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:")); // new GUIContent("Scale: <color=#FFFF80>" + prop_Scale.floatValue + "</color>"), style);
+
+            EditorGUIUtility.labelWidth = 74f;
+            EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:")); //  new GUIContent("Atlas Index: <color=#FFFF80>" + prop_AtlasIndex.intValue + "</color>"), style);
+
+            DrawGlyph(position, property);
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 130f;
+        }
+
+        void DrawGlyph(Rect position, SerializedProperty property)
+        {
+            // Get a reference to the sprite texture
+            TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset;
+
+            if (fontAsset == null)
+                return;
+
+            // Get reference to atlas texture.
+            int atlasIndex = property.FindPropertyRelative("m_AtlasIndex").intValue;
+            Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null;
+
+            if (atlasTexture == null)
+                return;
+
+            Material mat;
+            if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                mat = TMP_FontAssetEditor.internalBitmapMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+                mat.SetColor("_Color", Color.white);
+            }
+            else
+            {
+                mat = TMP_FontAssetEditor.internalSDFMaterial;
+
+                if (mat == null)
+                    return;
+
+                mat.mainTexture = atlasTexture;
+                mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1);
+            }
+
+            // Draw glyph from atlas texture.
+            Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 80);
+
+            SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect");
+
+            int glyphOriginX = prop_GlyphRect.FindPropertyRelative("m_X").intValue;
+            int glyphOriginY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue;
+            int glyphWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue;
+            int glyphHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue;
+
+            float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine;
+            float scale = glyphDrawPosition.width / normalizedHeight;
+
+            // Compute the normalized texture coordinates
+            Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height);
+
+            if (Event.current.type == EventType.Repaint)
+            {
+                glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2;
+                glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2;
+                glyphDrawPosition.width = glyphWidth * scale;
+                glyphDrawPosition.height = glyphHeight * scale;
+
+                // Could switch to using the default material of the font asset which would require passing scale to the shader.
+                Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat);
+            }
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ce08447f90e879b599e8a4f0dc8ea87a79f50e0c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c4777500b5da6094e956c3d4f04de4db
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d50dc585bb172158cac111073457d56a551c2e3a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs
@@ -0,0 +1,283 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEditor;
+using UnityEditor.UI;
+using UnityEditor.AnimatedValues;
+
+
+namespace TMPro.EditorUtilities
+{
+    [CanEditMultipleObjects]
+    [CustomEditor(typeof(TMP_InputField), true)]
+    public class TMP_InputFieldEditor : SelectableEditor
+    {
+        private struct m_foldout
+        { // Track Inspector foldout panel states, globally.
+            public static bool textInput = true;
+            public static bool fontSettings = true;
+            public static bool extraSettings = true;
+            //public static bool shadowSetting = false;
+            //public static bool materialEditor = true;
+        }
+
+        SerializedProperty m_TextViewport;
+        SerializedProperty m_TextComponent;
+        SerializedProperty m_Text;
+        SerializedProperty m_ContentType;
+        SerializedProperty m_LineType;
+        SerializedProperty m_LineLimit;
+        SerializedProperty m_InputType;
+        SerializedProperty m_CharacterValidation;
+        SerializedProperty m_InputValidator;
+        SerializedProperty m_RegexValue;
+        SerializedProperty m_KeyboardType;
+        SerializedProperty m_CharacterLimit;
+        SerializedProperty m_CaretBlinkRate;
+        SerializedProperty m_CaretWidth;
+        SerializedProperty m_CaretColor;
+        SerializedProperty m_CustomCaretColor;
+        SerializedProperty m_SelectionColor;
+        SerializedProperty m_HideMobileKeyboard;
+        SerializedProperty m_HideMobileInput;
+        SerializedProperty m_Placeholder;
+        SerializedProperty m_VerticalScrollbar;
+        SerializedProperty m_ScrollbarScrollSensitivity;
+        SerializedProperty m_OnValueChanged;
+        SerializedProperty m_OnEndEdit;
+        SerializedProperty m_OnSelect;
+        SerializedProperty m_OnDeselect;
+        SerializedProperty m_ReadOnly;
+        SerializedProperty m_RichText;
+        SerializedProperty m_RichTextEditingAllowed;
+        SerializedProperty m_ResetOnDeActivation;
+        SerializedProperty m_RestoreOriginalTextOnEscape;
+
+        SerializedProperty m_OnFocusSelectAll;
+        SerializedProperty m_GlobalPointSize;
+        SerializedProperty m_GlobalFontAsset;
+
+        AnimBool m_CustomColor;
+
+        //TMP_InputValidator m_ValidationScript;
+
+        protected override void OnEnable()
+        {
+            base.OnEnable();
+
+            m_TextViewport = serializedObject.FindProperty("m_TextViewport");
+            m_TextComponent = serializedObject.FindProperty("m_TextComponent");
+            m_Text = serializedObject.FindProperty("m_Text");
+            m_ContentType = serializedObject.FindProperty("m_ContentType");
+            m_LineType = serializedObject.FindProperty("m_LineType");
+            m_LineLimit = serializedObject.FindProperty("m_LineLimit");
+            m_InputType = serializedObject.FindProperty("m_InputType");
+            m_CharacterValidation = serializedObject.FindProperty("m_CharacterValidation");
+            m_InputValidator = serializedObject.FindProperty("m_InputValidator");
+            m_RegexValue = serializedObject.FindProperty("m_RegexValue");
+            m_KeyboardType = serializedObject.FindProperty("m_KeyboardType");
+            m_CharacterLimit = serializedObject.FindProperty("m_CharacterLimit");
+            m_CaretBlinkRate = serializedObject.FindProperty("m_CaretBlinkRate");
+            m_CaretWidth = serializedObject.FindProperty("m_CaretWidth");
+            m_CaretColor = serializedObject.FindProperty("m_CaretColor");
+            m_CustomCaretColor = serializedObject.FindProperty("m_CustomCaretColor");
+            m_SelectionColor = serializedObject.FindProperty("m_SelectionColor");
+
+            m_HideMobileKeyboard = serializedObject.FindProperty("m_HideSoftKeyboard");
+            m_HideMobileInput = serializedObject.FindProperty("m_HideMobileInput");
+
+            m_Placeholder = serializedObject.FindProperty("m_Placeholder");
+            m_VerticalScrollbar = serializedObject.FindProperty("m_VerticalScrollbar");
+            m_ScrollbarScrollSensitivity = serializedObject.FindProperty("m_ScrollSensitivity");
+
+            m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
+            m_OnEndEdit = serializedObject.FindProperty("m_OnEndEdit");
+            m_OnSelect = serializedObject.FindProperty("m_OnSelect");
+            m_OnDeselect = serializedObject.FindProperty("m_OnDeselect");
+            m_ReadOnly = serializedObject.FindProperty("m_ReadOnly");
+            m_RichText = serializedObject.FindProperty("m_RichText");
+            m_RichTextEditingAllowed = serializedObject.FindProperty("m_isRichTextEditingAllowed");
+            m_ResetOnDeActivation = serializedObject.FindProperty("m_ResetOnDeActivation");
+            m_RestoreOriginalTextOnEscape = serializedObject.FindProperty("m_RestoreOriginalTextOnEscape");
+
+            m_OnFocusSelectAll = serializedObject.FindProperty("m_OnFocusSelectAll");
+            m_GlobalPointSize = serializedObject.FindProperty("m_GlobalPointSize");
+            m_GlobalFontAsset = serializedObject.FindProperty("m_GlobalFontAsset");
+
+            m_CustomColor = new AnimBool(m_CustomCaretColor.boolValue);
+            m_CustomColor.valueChanged.AddListener(Repaint);
+        }
+
+        protected override void OnDisable()
+        {
+            base.OnDisable();
+            m_CustomColor.valueChanged.RemoveListener(Repaint);
+        }
+
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+
+            base.OnInspectorGUI();
+
+            EditorGUILayout.Space();
+
+            EditorGUILayout.PropertyField(m_TextViewport);
+
+            EditorGUILayout.PropertyField(m_TextComponent);
+
+            TextMeshProUGUI text = null;
+            if (m_TextComponent != null && m_TextComponent.objectReferenceValue != null)
+            {
+                text = m_TextComponent.objectReferenceValue as TextMeshProUGUI;
+                //if (text.supportRichText)
+                //{
+                //    EditorGUILayout.HelpBox("Using Rich Text with input is unsupported.", MessageType.Warning);
+                //}
+            }
+
+            EditorGUI.BeginDisabledGroup(m_TextComponent == null || m_TextComponent.objectReferenceValue == null);
+
+            // TEXT INPUT BOX
+            EditorGUILayout.PropertyField(m_Text);
+
+            // INPUT FIELD SETTINGS
+            #region INPUT FIELD SETTINGS
+
+            m_foldout.fontSettings = EditorGUILayout.Foldout(m_foldout.fontSettings, "Input Field Settings", true, TMP_UIStyleManager.boldFoldout);
+
+            if (m_foldout.fontSettings)
+            {
+                EditorGUI.indentLevel++;
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_GlobalFontAsset, new GUIContent("Font Asset", "Set the Font Asset for both Placeholder and Input Field text object."));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    TMP_InputField inputField = target as TMP_InputField;
+                    inputField.SetGlobalFontAsset(m_GlobalFontAsset.objectReferenceValue as TMP_FontAsset);
+                }
+
+
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_GlobalPointSize, new GUIContent("Point Size", "Set the point size of both Placeholder and Input Field text object."));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    TMP_InputField inputField = target as TMP_InputField;
+                    inputField.SetGlobalPointSize(m_GlobalPointSize.floatValue);
+                }
+
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PropertyField(m_CharacterLimit);
+
+                EditorGUILayout.Space();
+
+                EditorGUILayout.PropertyField(m_ContentType);
+                if (!m_ContentType.hasMultipleDifferentValues)
+                {
+                    EditorGUI.indentLevel++;
+
+                    if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Standard ||
+                        m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Autocorrected ||
+                        m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom)
+                    {
+                        EditorGUI.BeginChangeCheck();
+                        EditorGUILayout.PropertyField(m_LineType);
+                        if (EditorGUI.EndChangeCheck())
+                        {
+                            if (text != null)
+                            {
+                                if (m_LineType.enumValueIndex == (int)TMP_InputField.LineType.SingleLine)
+                                    text.enableWordWrapping = false;
+                                else
+                                {
+                                    text.enableWordWrapping = true;
+                                }
+                            }
+                        }
+
+                        if (m_LineType.enumValueIndex != (int)TMP_InputField.LineType.SingleLine)
+                        {
+                            EditorGUILayout.PropertyField(m_LineLimit);
+                        }
+                    }
+
+                    if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom)
+                    {
+                        EditorGUILayout.PropertyField(m_InputType);
+                        EditorGUILayout.PropertyField(m_KeyboardType);
+                        EditorGUILayout.PropertyField(m_CharacterValidation);
+                        if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.Regex)
+                        {
+                            EditorGUILayout.PropertyField(m_RegexValue);
+                        }
+                        else if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.CustomValidator)
+                        {
+                            EditorGUILayout.PropertyField(m_InputValidator);
+                        }
+                    }
+
+                    EditorGUI.indentLevel--;
+                }
+
+                EditorGUILayout.Space();
+
+                EditorGUILayout.PropertyField(m_Placeholder);
+                EditorGUILayout.PropertyField(m_VerticalScrollbar);
+
+                if (m_VerticalScrollbar.objectReferenceValue != null)
+                    EditorGUILayout.PropertyField(m_ScrollbarScrollSensitivity);
+
+                EditorGUILayout.PropertyField(m_CaretBlinkRate);
+                EditorGUILayout.PropertyField(m_CaretWidth);
+
+                EditorGUILayout.PropertyField(m_CustomCaretColor);
+
+                m_CustomColor.target = m_CustomCaretColor.boolValue;
+
+                if (EditorGUILayout.BeginFadeGroup(m_CustomColor.faded))
+                {
+                    EditorGUILayout.PropertyField(m_CaretColor);
+                }
+                EditorGUILayout.EndFadeGroup();
+
+                EditorGUILayout.PropertyField(m_SelectionColor);
+                
+                EditorGUI.indentLevel--;
+            }
+            #endregion
+
+
+            // CONTROL SETTINGS
+            #region CONTROL SETTINGS
+            m_foldout.extraSettings = EditorGUILayout.Foldout(m_foldout.extraSettings, "Control Settings", true, TMP_UIStyleManager.boldFoldout);
+
+            if (m_foldout.extraSettings)
+            {
+                EditorGUI.indentLevel++;
+
+                EditorGUILayout.PropertyField(m_OnFocusSelectAll, new GUIContent("OnFocus - Select All", "Should all the text be selected when the Input Field is selected."));
+                EditorGUILayout.PropertyField(m_ResetOnDeActivation, new GUIContent("Reset On DeActivation", "Should the Text and Caret position be reset when Input Field is DeActivated."));
+                EditorGUILayout.PropertyField(m_RestoreOriginalTextOnEscape, new GUIContent("Restore On ESC Key", "Should the original text be restored when pressing ESC."));
+                EditorGUILayout.PropertyField(m_HideMobileKeyboard, new GUIContent("Hide Soft Keyboard", "Controls the visibility of the mobile virtual keyboard."));
+                EditorGUILayout.PropertyField(m_HideMobileInput, new GUIContent("Hide Mobile Input", "Controls the visibility of the editable text field above the mobile virtual keyboard. Not supported on all mobile platforms."));
+                EditorGUILayout.PropertyField(m_ReadOnly);
+                EditorGUILayout.PropertyField(m_RichText);
+                EditorGUILayout.PropertyField(m_RichTextEditingAllowed, new GUIContent("Allow Rich Text Editing"));
+                
+                EditorGUI.indentLevel--;
+            }
+            #endregion
+
+
+            EditorGUILayout.Space();
+
+            EditorGUILayout.PropertyField(m_OnValueChanged);
+            EditorGUILayout.PropertyField(m_OnEndEdit);
+            EditorGUILayout.PropertyField(m_OnSelect);
+            EditorGUILayout.PropertyField(m_OnDeselect);
+
+            EditorGUI.EndDisabledGroup();
+
+            serializedObject.ApplyModifiedProperties();
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eeb62d8c1808c9b813526274f0056d12d2600021
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: aa160f27c3fe4052a5850e21108811b6
+timeCreated: 1457861621
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..83d19f8c8c6e60eec63e610e33fecd4efd58339b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs
@@ -0,0 +1,76 @@
+// When enabled, allows setting the material by dropping a material onto the MeshRenderer inspector component. 
+// The drawback is that the MeshRenderer inspector will not have properties for light probes, so if you need light probe support, do not enable this.
+//#define ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+    // Disabled for compatibility reason as lightprobe setup isn't supported due to inability to inherit from MeshRendererEditor class
+#if ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP
+    [CanEditMultipleObjects]
+    [CustomEditor(typeof(MeshRenderer))]
+    public class TMP_MeshRendererEditor : Editor
+    {
+        private SerializedProperty m_Materials;
+
+        void OnEnable()
+        {
+            m_Materials = serializedObject.FindProperty("m_Materials");
+        }
+
+
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+
+            // Get a reference to the current material.
+            SerializedProperty material_prop = m_Materials.GetArrayElementAtIndex(0);
+            Material currentMaterial = material_prop.objectReferenceValue as Material;
+
+            EditorGUI.BeginChangeCheck();
+            base.OnInspectorGUI();
+            if (EditorGUI.EndChangeCheck())
+            {
+                material_prop = m_Materials.GetArrayElementAtIndex(0);
+
+                TMP_FontAsset newFontAsset = null;
+                Material newMaterial = null;
+
+                if (material_prop != null)
+                    newMaterial = material_prop.objectReferenceValue as Material;
+
+                // Check if the new material is referencing a different font atlas texture.
+                if (newMaterial != null && currentMaterial.GetInstanceID() != newMaterial.GetInstanceID())
+                {
+                    // Search for the Font Asset matching the new font atlas texture.
+                    newFontAsset = TMP_EditorUtility.FindMatchingFontAsset(newMaterial);
+                }
+
+
+                GameObject[] objects = Selection.gameObjects;
+
+                for (int i = 0; i < objects.Length; i++)
+                {
+                    // Assign new font asset
+                    if (newFontAsset != null)
+                    {
+                        TMP_Text textComponent = objects[i].GetComponent<TMP_Text>();
+
+                        if (textComponent != null)
+                        {
+                            Undo.RecordObject(textComponent, "Font Asset Change");
+                            textComponent.font = newFontAsset;
+                        }
+                    }
+
+                    TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(objects[i], currentMaterial, newMaterial);
+                }
+            }
+        }
+    }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d6b133fd967b6c072bde40b29150070c59557179
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6d437b997e074079b4b2f6e395394f4b
+timeCreated: 1462864011
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..364c4e72ef11c450d65cc4482e6b08909d52966e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs
@@ -0,0 +1,919 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using TMPro.EditorUtilities;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Data structure containing the target and replacement fileIDs and GUIDs which will require remapping from previous version of TextMesh Pro to the new TextMesh Pro UPM package.
+    /// </summary>
+    [System.Serializable]
+    struct AssetConversionRecord
+    {
+        public string referencedResource;
+        public string target;
+        public string replacement;
+    }
+
+
+    /// <summary>
+    /// Data structure containing a list of target and replacement fileID and GUID requiring remapping from previous versions of TextMesh Pro to the new TextMesh Pro UPM package.
+    /// This data structure is populated with the data contained in the PackageConversionData.json file included in the package.
+    /// </summary>
+    [System.Serializable]
+    class AssetConversionData
+    {
+        public List<AssetConversionRecord> assetRecords;
+    }
+
+
+    public class TMP_ProjectConversionUtility : EditorWindow
+    {
+        // Create Sprite Asset Editor Window
+        [MenuItem("Window/TextMeshPro/Project Files GUID Remapping Tool", false, 2100)]
+        static void ShowConverterWindow()
+        {
+            var window = GetWindow<TMP_ProjectConversionUtility>();
+            window.titleContent = new GUIContent("Conversion Tool");
+            window.Focus();
+        }
+
+        private static HashSet<Type> m_IgnoreAssetTypes = new HashSet<Type>()
+        {
+            typeof(AnimatorOverrideController),
+            typeof(AudioClip),
+            typeof(AvatarMask),
+            typeof(ComputeShader),
+            typeof(Cubemap),
+            typeof(DefaultAsset),
+            typeof(Flare),
+            typeof(Font),
+            typeof(GUISkin),
+            typeof(HumanTemplate),
+            typeof(LightingDataAsset),
+            typeof(Mesh),
+            typeof(MonoScript),
+            typeof(PhysicMaterial),
+            typeof(PhysicsMaterial2D),
+            typeof(RenderTexture),
+            typeof(Shader),
+            typeof(TerrainData),
+            typeof(TextAsset),
+            typeof(Texture2D),
+            typeof(Texture2DArray),
+            typeof(Texture3D),
+            typeof(UnityEditor.Animations.AnimatorController),
+            typeof(UnityEditorInternal.AssemblyDefinitionAsset),
+            typeof(UnityEngine.AI.NavMeshData),
+            typeof(UnityEngine.Tilemaps.Tile),
+            typeof(UnityEngine.U2D.SpriteAtlas),
+            typeof(UnityEngine.Video.VideoClip),
+        };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        struct AssetModificationRecord
+        {
+            public string assetFilePath;
+            public string assetDataFile;
+        }
+
+        struct AssetFileRecord
+        {
+            public string assetFilePath;
+            public string assetMetaFilePath;
+
+            public AssetFileRecord(string filePath, string metaFilePath)
+            {
+                this.assetFilePath = filePath;
+                this.assetMetaFilePath = metaFilePath;
+            }
+        }
+
+        private static string m_ProjectPath;
+        private static string m_ProjectFolderToScan;
+        private static bool m_IsAlreadyScanningProject;
+        private static bool m_CancelScanProcess;
+        private static string k_ProjectScanReportDefaultText = "<color=#FFFF80><b>Project Scan Results</b></color>\n";
+        private static string k_ProjectScanLabelPrefix = "Scanning: ";
+        private static string m_ProjectScanResults = string.Empty;
+        private static Vector2 m_ProjectScanResultScrollPosition;
+        private static float m_ProgressPercentage = 0;
+
+        private static int m_ScanningTotalFiles;
+        private static int m_RemainingFilesToScan;
+        private static int m_ScanningCurrentFileIndex;
+        private static string m_ScanningCurrentFileName;
+
+        private static AssetConversionData m_ConversionData;
+
+        private static List<AssetModificationRecord> m_ModifiedAssetList = new List<AssetModificationRecord>();
+
+
+        void OnEnable()
+        {
+            // Set Editor Window Size
+            SetEditorWindowSize();
+
+            m_ProjectScanResults = k_ProjectScanReportDefaultText;
+        }
+
+
+        void OnGUI()
+        {
+            GUILayout.BeginVertical();
+            {
+                // Scan project files and resources
+                GUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    GUILayout.Label("Scan Project Files", EditorStyles.boldLabel);
+                    GUILayout.Label("Press the <i>Scan Project Files</i> button to begin scanning your project for files & resources that were created with a previous version of TextMesh Pro.", TMP_UIStyleManager.label);
+                    GUILayout.Space(10f);
+                    GUILayout.Label("Project folder to be scanned. Example \"Assets/TextMesh Pro\"");
+                    m_ProjectFolderToScan = EditorGUILayout.TextField("Folder Path:      Assets/", m_ProjectFolderToScan);
+                    GUILayout.Space(5f);
+
+                    GUI.enabled = m_IsAlreadyScanningProject == false ? true : false;
+                    if (GUILayout.Button("Scan Project Files"))
+                    {
+                        m_CancelScanProcess = false;
+
+                        // Make sure Asset Serialization mode is set to ForceText and Version Control mode to Visible Meta Files.
+                        if (CheckProjectSerializationAndSourceControlModes() == true)
+                        {
+                            m_ProjectPath = Path.GetFullPath("Assets/..");
+                            TMP_EditorCoroutine.StartCoroutine(ScanProjectFiles());
+                        }
+                        else
+                        {
+                            EditorUtility.DisplayDialog("Project Settings Change Required", "In menu options \"Edit - Project Settings - Editor\", please change Asset Serialization Mode to ForceText and Source Control Mode to Visible Meta Files.", "OK", string.Empty);
+                        }
+                    }
+                    GUI.enabled = true;
+
+                    // Display progress bar
+                    Rect rect = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true));
+                    EditorGUI.ProgressBar(rect, m_ProgressPercentage, "Scan Progress (" + m_ScanningCurrentFileIndex + "/" + m_ScanningTotalFiles + ")");
+
+                    // Display cancel button and name of file currently being scanned.
+                    if (m_IsAlreadyScanningProject)
+                    {
+                        Rect cancelRect = new Rect(rect.width - 20, rect.y + 2, 20, 16);
+                        if (GUI.Button(cancelRect, "X"))
+                        {
+                            m_CancelScanProcess = true;
+                        }
+                        GUILayout.Label(k_ProjectScanLabelPrefix + m_ScanningCurrentFileName, TMP_UIStyleManager.label);
+                    }
+                    else
+                        GUILayout.Label(string.Empty);
+
+                    GUILayout.Space(5);
+
+                    // Creation Feedback
+                    GUILayout.BeginVertical(TMP_UIStyleManager.textAreaBoxWindow, GUILayout.ExpandHeight(true));
+                    {
+                        m_ProjectScanResultScrollPosition = EditorGUILayout.BeginScrollView(m_ProjectScanResultScrollPosition, GUILayout.ExpandHeight(true));
+                        EditorGUILayout.LabelField(m_ProjectScanResults, TMP_UIStyleManager.label);
+                        EditorGUILayout.EndScrollView();
+                    }
+                    GUILayout.EndVertical();
+                    GUILayout.Space(5f);
+                }
+                GUILayout.EndVertical();
+
+                // Scan project files and resources
+                GUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    GUILayout.Label("Save Modified Project Files", EditorStyles.boldLabel);
+                    GUILayout.Label("Pressing the <i>Save Modified Project Files</i> button will update the files in the <i>Project Scan Results</i> listed above. <color=#FFFF80>Please make sure that you have created a backup of your project first</color> as these file modifications are permanent and cannot be undone.", TMP_UIStyleManager.label);
+                    GUILayout.Space(5f);
+
+                    GUI.enabled = m_IsAlreadyScanningProject == false && m_ModifiedAssetList.Count > 0 ? true : false;
+                    if (GUILayout.Button("Save Modified Project Files"))
+                    {
+                        UpdateProjectFiles();
+                    }
+                    GUILayout.Space(10f);
+                }
+                GUILayout.EndVertical();
+
+            }
+            GUILayout.EndVertical();
+            GUILayout.Space(5f);
+        }
+
+        void OnInspectorUpdate()
+        {
+            Repaint();
+        }
+
+
+        /// <summary>
+        /// Limits the minimum size of the editor window.
+        /// </summary>
+        void SetEditorWindowSize()
+        {
+            EditorWindow editorWindow = this;
+
+            Vector2 currentWindowSize = editorWindow.minSize;
+
+            editorWindow.minSize = new Vector2(Mathf.Max(640, currentWindowSize.x), Mathf.Max(420, currentWindowSize.y));
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="filePath"></param>
+        /// <returns></returns>
+        private static bool ShouldIgnoreFile(string filePath)
+        {
+            string fileExtension = Path.GetExtension(filePath);
+            Type fileType = AssetDatabase.GetMainAssetTypeAtPath(filePath);
+
+            if (m_IgnoreAssetTypes.Contains(fileType))
+                return true;
+
+            // Exclude FBX
+            if (fileType == typeof(GameObject) && fileExtension.ToLower() == ".fbx") { return true; }
+            return false;
+        }
+
+
+        private IEnumerator ScanProjectFiles()
+        {
+            m_IsAlreadyScanningProject = true;
+            string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath;
+
+            // List containing assets that have been modified.
+            m_ProjectScanResults = k_ProjectScanReportDefaultText;
+            m_ModifiedAssetList.Clear();
+            m_ProgressPercentage = 0;
+
+            // Read Conversion Data from Json file.
+            if (m_ConversionData == null)
+                m_ConversionData = JsonUtility.FromJson<AssetConversionData>(File.ReadAllText(packageFullPath + "/PackageConversionData.json"));
+
+            // Get list of GUIDs for assets that might contain references to previous GUIDs that require updating.
+            string searchFolder = string.IsNullOrEmpty(m_ProjectFolderToScan) ? "Assets" : ("Assets/" + m_ProjectFolderToScan);
+            string[] guids = AssetDatabase.FindAssets("t:Object", new string[] { searchFolder }).Distinct().ToArray();
+
+            k_ProjectScanLabelPrefix = "<b>Phase 1 - Filtering:</b> ";
+            m_ScanningTotalFiles = guids.Length;
+            m_ScanningCurrentFileIndex = 0;
+
+            List<AssetFileRecord> projectFilesToScan = new List<AssetFileRecord>();
+
+            foreach (var guid in guids)
+            {
+                if (m_CancelScanProcess)
+                    break;
+
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+
+                m_ScanningCurrentFileIndex += 1;
+                m_ScanningCurrentFileName = assetFilePath;
+                m_ProgressPercentage = (float)m_ScanningCurrentFileIndex / m_ScanningTotalFiles;
+
+                // Filter out file types we have no interest in searching
+                if (ShouldIgnoreFile(assetFilePath))
+                    continue;
+
+                string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath);
+
+                projectFilesToScan.Add(new AssetFileRecord(assetFilePath, assetMetaFilePath));
+
+                yield return null;
+            }
+
+            m_RemainingFilesToScan = m_ScanningTotalFiles = projectFilesToScan.Count;
+
+            k_ProjectScanLabelPrefix = "<b>Phase 2 - Scanning:</b> ";
+
+            for (int i = 0; i < m_ScanningTotalFiles; i++)
+            {
+                if (m_CancelScanProcess)
+                    break;
+
+                AssetFileRecord fileRecord = projectFilesToScan[i];
+
+                ThreadPool.QueueUserWorkItem(Task =>
+                {
+                    ScanProjectFileAsync(fileRecord);
+
+                    m_ScanningCurrentFileName = fileRecord.assetFilePath;
+
+                    int completedScans = m_ScanningTotalFiles - Interlocked.Decrement(ref m_RemainingFilesToScan);
+
+                    m_ScanningCurrentFileIndex = completedScans;
+                    m_ProgressPercentage = (float)completedScans / m_ScanningTotalFiles;
+                });
+
+                if (i % 64 == 0)
+                    yield return new WaitForSeconds(2.0f);
+
+            }
+
+            while (m_RemainingFilesToScan > 0 && !m_CancelScanProcess)
+                yield return null;
+
+            m_IsAlreadyScanningProject = false;
+            m_ScanningCurrentFileName = string.Empty;
+        }
+
+
+        static void ScanProjectFileAsync(AssetFileRecord fileRecord)
+        {
+            if (m_CancelScanProcess)
+                return;
+
+            // Read the asset data file
+            string assetDataFile = string.Empty;
+            bool hasFileChanged = false;
+
+            try
+            {
+                assetDataFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetFilePath);
+            }
+            catch
+            {
+                // Continue to the next asset if we can't read the current one.
+                return;
+            }
+
+            // Read the asset meta data file
+            string assetMetaFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetMetaFilePath);
+            bool hasMetaFileChanges = false;
+
+            foreach (AssetConversionRecord record in m_ConversionData.assetRecords)
+            {
+                if (assetDataFile.Contains(record.target))
+                {
+                    hasFileChanged = true;
+
+                    assetDataFile = assetDataFile.Replace(record.target, record.replacement);
+                }
+
+                //// Check meta file
+                if (assetMetaFile.Contains(record.target))
+                {
+                    hasMetaFileChanges = true;
+
+                    assetMetaFile = assetMetaFile.Replace(record.target, record.replacement);
+                }
+            }
+
+            if (hasFileChanged)
+            {
+                AssetModificationRecord modifiedAsset;
+                modifiedAsset.assetFilePath = fileRecord.assetFilePath;
+                modifiedAsset.assetDataFile = assetDataFile;
+
+                m_ModifiedAssetList.Add(modifiedAsset);
+
+                m_ProjectScanResults += fileRecord.assetFilePath + "\n";
+            }
+
+            if (hasMetaFileChanges)
+            {
+                AssetModificationRecord modifiedAsset;
+                modifiedAsset.assetFilePath = fileRecord.assetMetaFilePath;
+                modifiedAsset.assetDataFile = assetMetaFile;
+
+                m_ModifiedAssetList.Add(modifiedAsset);
+
+                m_ProjectScanResults += fileRecord.assetMetaFilePath + "\n";
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void ResetScanProcess()
+        {
+            m_IsAlreadyScanningProject = false;
+            m_ScanningCurrentFileName = string.Empty;
+            m_ProgressPercentage = 0;
+            m_ScanningCurrentFileIndex = 0;
+            m_ScanningTotalFiles = 0;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void UpdateProjectFiles()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            CheckProjectSerializationAndSourceControlModes();
+
+            string projectPath = Path.GetFullPath("Assets/..");
+
+            // Display dialogue to show user a list of project files that will be modified upon their consent.
+            if (EditorUtility.DisplayDialog("Save Modified Asset(s)?", "Are you sure you want to save all modified assets?", "YES", "NO"))
+            {
+                for (int i = 0; i < m_ModifiedAssetList.Count; i++)
+                {
+                    // Make sure all file streams that might have been opened by Unity are closed.
+                    //AssetDatabase.ReleaseCachedFileHandles();
+
+                    //Debug.Log("Writing asset file [" + m_ModifiedAssetList[i].assetFilePath + "].");
+
+                    File.WriteAllText(projectPath + "/" + m_ModifiedAssetList[i].assetFilePath, m_ModifiedAssetList[i].assetDataFile);
+                }
+            }
+
+            AssetDatabase.Refresh();
+
+            m_ProgressPercentage = 0;
+            m_ProjectScanResults = k_ProjectScanReportDefaultText;
+        }
+
+
+        /// <summary>
+        /// Check project Asset Serialization and Source Control modes
+        /// </summary>
+        private static bool CheckProjectSerializationAndSourceControlModes()
+        {
+            // Check Project Asset Serialization and Visible Meta Files mode.
+            if (EditorSettings.serializationMode != SerializationMode.ForceText || EditorSettings.externalVersionControl != "Visible Meta Files")
+            {
+                return false;
+            }
+
+            return true;
+        }
+    }
+
+
+
+    public class TMP_PackageUtilities : Editor
+    {
+
+        enum SaveAssetDialogueOptions { Unset = 0, Save = 1, SaveAll = 2, DoNotSave = 3 };
+
+        private static SerializationMode m_ProjectAssetSerializationMode;
+        private static string m_ProjectExternalVersionControl;
+
+        struct AssetRemappingRecord
+        {
+            public string oldGuid;
+            public string newGuid;
+            public string assetPath;
+        }
+
+        struct AssetModificationRecord
+        {
+            public string assetFilePath;
+            public string assetDataFile;
+        }
+
+        // Create Sprite Asset Editor Window
+        //[MenuItem("Window/TextMeshPro/Generate New Package GUIDs", false, 1500)]
+        public static void GenerateNewPackageGUIDs_Menu()
+        {
+            GenerateNewPackageGUIDs();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [MenuItem("Window/TextMeshPro/Import TMP Essential Resources", false, 2050)]
+        public static void ImportProjectResourcesMenu()
+        {
+            ImportProjectResources();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [MenuItem("Window/TextMeshPro/Import TMP Examples and Extras", false, 2051)]
+        public static void ImportExamplesContentMenu()
+        {
+            ImportExtraContent();
+        }
+
+
+        // Create Sprite Asset Editor Window
+        //[MenuItem("Window/TextMeshPro/Convert TMP Project Files to UPM", false, 1510)]
+        public static void ConvertProjectGUIDsMenu()
+        {
+            ConvertProjectGUIDsToUPM();
+
+            //GetVersionInfo();
+        }
+
+
+        // Create Sprite Asset Editor Window
+        //[MenuItem("Window/TextMeshPro/Convert GUID (Source to DLL)", false, 2010)]
+        public static void ConvertGUIDFromSourceToDLLMenu()
+        {
+            //ConvertGUIDFromSourceToDLL();
+
+            //GetVersionInfo();
+        }
+
+
+        // Create Sprite Asset Editor Window
+        //[MenuItem("Window/TextMeshPro/Convert GUID (DLL to Source)", false, 2020)]
+        public static void ConvertGUIDFromDllToSourceMenu()
+        {
+            //ConvertGUIDFromDLLToSource();
+
+            //GetVersionInfo();
+        }
+
+
+        // Create Sprite Asset Editor Window
+        //[MenuItem("Window/TextMeshPro/Extract Package GUIDs", false, 1530)]
+        public static void ExtractPackageGUIDMenu()
+        {
+            ExtractPackageGUIDs();
+        }
+
+
+        private static void GetVersionInfo()
+        {
+            string version = TMP_Settings.version;
+            Debug.Log("The version of this TextMesh Pro UPM package is (" + version + ").");
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void ImportExtraContent()
+        {
+            string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath;
+
+            AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Examples & Extras.unitypackage", true);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void ImportProjectResources()
+        {
+            string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath;
+
+            AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Essential Resources.unitypackage", true);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void GenerateNewPackageGUIDs()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            SetProjectSerializationAndSourceControlModes();
+
+            string projectPath = Path.GetFullPath("Assets/..");
+
+            // Clear existing dictionary of AssetRecords
+            List<AssetRemappingRecord> assetRecords = new List<AssetRemappingRecord>();
+
+            // Get full list of GUIDs used in the package which including folders.
+            string[] packageGUIDs = AssetDatabase.FindAssets("t:Object", new string[] { "Assets/Packages/com.unity.TextMeshPro" });
+
+            for (int i = 0; i < packageGUIDs.Length; i++)
+            {
+                // Could add a progress bar for this process (if needed)
+
+                string guid = packageGUIDs[i];
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+                string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath);
+                //System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath);
+
+                AssetRemappingRecord assetRecord;
+                assetRecord.oldGuid = guid;
+                assetRecord.assetPath = assetFilePath;
+
+                string newGUID = GenerateUniqueGUID();
+
+                assetRecord.newGuid = newGUID;
+
+                if (assetRecords.FindIndex(item => item.oldGuid == guid) != -1)
+                    continue;
+
+                assetRecords.Add(assetRecord);
+
+                // Read the meta file for the given asset.
+                string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath);
+
+                assetMetaFile = assetMetaFile.Replace("guid: " + guid, "guid: " + newGUID);
+
+                File.WriteAllText(projectPath + "/" + assetMetaFilePath, assetMetaFile);
+
+                //Debug.Log("Asset: [" + assetFilePath + "]   Type: " + assetType + "   Current GUID: [" + guid + "]   New GUID: [" + newGUID + "]");
+            }
+
+            AssetDatabase.Refresh();
+
+            // Get list of GUIDs for assets that might need references to previous GUIDs which need to be updated.
+            packageGUIDs = AssetDatabase.FindAssets("t:Object"); //  ("t:Object", new string[] { "Assets/Asset Importer" });
+
+            for (int i = 0; i < packageGUIDs.Length; i++)
+            {
+                // Could add a progress bar for this process
+
+                string guid = packageGUIDs[i];
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+                System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath);
+
+                // Filter out file types we are not interested in
+                if (assetType == typeof(DefaultAsset) || assetType == typeof(MonoScript) || assetType == typeof(Texture2D) || assetType == typeof(TextAsset) || assetType == typeof(Shader))
+                    continue;
+
+                // Read the asset data file
+                string assetDataFile = File.ReadAllText(projectPath + "/" + assetFilePath);
+
+                //Debug.Log("Searching Asset: [" + assetFilePath + "] of type: " + assetType);
+
+                bool hasFileChanged = false;
+
+                foreach (AssetRemappingRecord record in assetRecords)
+                {
+                    if (assetDataFile.Contains(record.oldGuid))
+                    {
+                        hasFileChanged = true;
+
+                        assetDataFile = assetDataFile.Replace(record.oldGuid, record.newGuid);
+
+                        Debug.Log("Replacing old GUID: [" + record.oldGuid + "] by new GUID: [" + record.newGuid + "] in asset file: [" + assetFilePath + "].");
+                    }
+                }
+
+                if (hasFileChanged)
+                {
+                    // Add file to list of changed files
+                    File.WriteAllText(projectPath + "/" + assetFilePath, assetDataFile);
+                }
+
+            }
+
+            AssetDatabase.Refresh();
+
+            // Restore project Asset Serialization and Source Control modes.
+            RestoreProjectSerializationAndSourceControlModes();
+        }
+
+
+        private static void ExtractPackageGUIDs()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            SetProjectSerializationAndSourceControlModes();
+
+            string projectPath = Path.GetFullPath("Assets/..");
+
+            // Create new instance of AssetConversionData file
+            AssetConversionData data = new AssetConversionData();
+            data.assetRecords = new List<AssetConversionRecord>();
+
+            // Get full list of GUIDs used in the package which including folders.
+            string[] packageGUIDs = AssetDatabase.FindAssets("t:Object", new string[] { "Assets/Packages/com.unity.TextMeshPro" });
+
+            for (int i = 0; i < packageGUIDs.Length; i++)
+            {
+                // Could add a progress bar for this process (if needed)
+
+                string guid = packageGUIDs[i];
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+                //string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath);
+
+                //ObjectIdentifier[] localIdentifider = BundleBuildInterface.GetPlayerObjectIdentifiersInAsset(new GUID(guid), BuildTarget.NoTarget);
+                //System.Type[] types = BundleBuildInterface.GetTypeForObjects(localIdentifider);
+
+                System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath);
+
+                // Filter out file types we are not interested in
+                if (assetType == typeof(DefaultAsset))
+                    continue;
+
+                string newGuid = GenerateUniqueGUID();
+
+                AssetConversionRecord record;
+                record.referencedResource = Path.GetFileName(assetFilePath);
+                record.target = "fileID: 2108210716, guid: " + newGuid;
+
+                record.replacement = "fileID: 11500000, guid: " + guid;
+
+                //if (m_AssetRecords.FindIndex(item => item.oldGuid == guid) != -1)
+                //    continue;
+
+                data.assetRecords.Add(record);
+
+                // Read the meta file for the given asset.
+                //string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath);
+
+                //assetMetaFile = assetMetaFile.Replace("guid: " + guid, "guid: " + newGUID);
+
+                //File.WriteAllText(projectPath + "/" + assetMetaFilePath, assetMetaFile);
+
+                Debug.Log("Asset: [" + Path.GetFileName(assetFilePath) + "]   Type: " + assetType + "   Current GUID: [" + guid + "]   New GUID: [" + newGuid + "]");
+            }
+
+            // Write new information into JSON file
+            string dataFile = JsonUtility.ToJson(data, true);
+
+            File.WriteAllText(projectPath + "/Assets/Packages/com.unity.TextMeshPro/PackageConversionData.json", dataFile);
+
+            // Restore project Asset Serialization and Source Control modes.
+            RestoreProjectSerializationAndSourceControlModes();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private static void ConvertProjectGUIDsToUPM()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            SetProjectSerializationAndSourceControlModes();
+
+            string projectPath = Path.GetFullPath("Assets/..");
+            string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath;
+
+            // List containing assets that have been modified.
+            List<AssetModificationRecord> modifiedAssetList = new List<AssetModificationRecord>();
+
+            // Read Conversion Data from Json file.
+            AssetConversionData conversionData = JsonUtility.FromJson<AssetConversionData>(File.ReadAllText(packageFullPath + "/PackageConversionData.json"));
+
+            // Get list of GUIDs for assets that might contain references to previous GUIDs that require updating.
+            string[] projectGUIDs = AssetDatabase.FindAssets("t:Object");
+
+            for (int i = 0; i < projectGUIDs.Length; i++)
+            {
+                // Could add a progress bar for this process
+
+                string guid = projectGUIDs[i];
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+                System.Type assetType = AssetDatabase.GetMainAssetTypeAtPath(assetFilePath);
+
+                // Filter out file types we are not interested in
+                if (assetType == typeof(DefaultAsset) || assetType == typeof(MonoScript) || assetType == typeof(Texture2D) || assetType == typeof(TextAsset) || assetType == typeof(Shader))
+                    continue;
+
+                // Read the asset data file
+                string assetDataFile = File.ReadAllText(projectPath + "/" + assetFilePath);
+
+                //Debug.Log("Searching Asset: [" + assetFilePath + "] of type: " + assetType);
+
+                bool hasFileChanged = false;
+
+                foreach (AssetConversionRecord record in conversionData.assetRecords)
+                {
+                    if (assetDataFile.Contains(record.target))
+                    {
+                        hasFileChanged = true;
+
+                        assetDataFile = assetDataFile.Replace(record.target, record.replacement);
+
+                        Debug.Log("Replacing Reference to [" + record.referencedResource + "] using [" + record.target + "] with [" + record.replacement + "] in asset file: [" + assetFilePath + "].");
+                    }
+                }
+
+                if (hasFileChanged)
+                {
+                    Debug.Log("Adding [" + assetFilePath + "] to list of assets to be modified.");
+
+                    AssetModificationRecord modifiedAsset;
+                    modifiedAsset.assetFilePath = assetFilePath;
+                    modifiedAsset.assetDataFile = assetDataFile;
+
+                    modifiedAssetList.Add(modifiedAsset);
+                }
+
+            }
+
+            // Scan project meta files to update GUIDs of assets whose GUID has changed.
+            projectGUIDs = AssetDatabase.FindAssets("t:Object");
+
+            for (int i = 0; i < projectGUIDs.Length; i++)
+            {
+                string guid = projectGUIDs[i];
+                string assetFilePath = AssetDatabase.GUIDToAssetPath(guid);
+                string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath);
+
+                // Read the asset meta data file
+                string assetMetaFile = File.ReadAllText(projectPath + "/" + assetMetaFilePath);
+
+                bool hasFileChanged = false;
+
+                foreach (AssetConversionRecord record in conversionData.assetRecords)
+                {
+                    if (assetMetaFile.Contains(record.target))
+                    {
+                        hasFileChanged = true;
+
+                        assetMetaFile = assetMetaFile.Replace(record.target, record.replacement);
+
+                        Debug.Log("Replacing Reference to [" + record.referencedResource + "] using [" + record.target + "] with [" + record.replacement + "] in asset file: [" + assetMetaFilePath + "].");
+                    }
+                }
+
+                if (hasFileChanged)
+                {
+                    Debug.Log("Adding [" + assetMetaFilePath + "] to list of meta files to be modified.");
+
+                    AssetModificationRecord modifiedAsset;
+                    modifiedAsset.assetFilePath = assetMetaFilePath;
+                    modifiedAsset.assetDataFile = assetMetaFile;
+
+                    modifiedAssetList.Add(modifiedAsset);
+                }
+            }
+
+            // Display dialogue to show user a list of project files that will be modified upon their consent.
+            if (EditorUtility.DisplayDialog("Save Modified Asset(s)?", "Are you sure you want to save all modified assets?", "YES", "NO"))
+            {
+                for (int i = 0; i < modifiedAssetList.Count; i++)
+                {
+                    // Make sure all file streams that might have been opened by Unity are closed.
+                    //AssetDatabase.ReleaseCachedFileHandles();
+
+                    Debug.Log("Writing asset file [" + modifiedAssetList[i].assetFilePath + "].");
+
+                    //File.WriteAllText(projectPath + "/" + modifiedAssetList[i].assetFilePath, modifiedAssetList[i].assetDataFile);
+                }
+
+            }
+
+            AssetDatabase.Refresh();
+
+            // Restore project Asset Serialization and Source Control modes.
+            RestoreProjectSerializationAndSourceControlModes();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        private static string GenerateUniqueGUID()
+        {
+            string monoGuid = System.Guid.NewGuid().ToString();
+
+            char[] charGuid = new char[32];
+            int index = 0;
+            for (int i = 0; i < monoGuid.Length; i++)
+            {
+                if (monoGuid[i] != '-')
+                    charGuid[index++] = monoGuid[i];
+            }
+
+            string guid = new string(charGuid);
+
+            // Make sure new GUID is not already used by some other asset.
+            if (AssetDatabase.GUIDToAssetPath(guid) != string.Empty)
+                guid = GenerateUniqueGUID();
+
+            return guid;
+        }
+
+
+        /// <summary>
+        /// Change project asset serialization mode to ForceText (if necessary)
+        /// </summary>
+        private static void SetProjectSerializationAndSourceControlModes()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            m_ProjectAssetSerializationMode = EditorSettings.serializationMode;
+            if (m_ProjectAssetSerializationMode != SerializationMode.ForceText)
+                UnityEditor.EditorSettings.serializationMode = SerializationMode.ForceText;
+
+            m_ProjectExternalVersionControl = EditorSettings.externalVersionControl;
+            if (m_ProjectExternalVersionControl != "Visible Meta Files")
+                UnityEditor.EditorSettings.externalVersionControl = "Visible Meta Files";
+        }
+
+
+        /// <summary>
+        /// Revert potential change to asset serialization mode (if necessary)
+        /// </summary>
+        private static void RestoreProjectSerializationAndSourceControlModes()
+        {
+            // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files.
+            if (m_ProjectAssetSerializationMode != EditorSettings.serializationMode)
+                EditorSettings.serializationMode = m_ProjectAssetSerializationMode;
+
+            if (m_ProjectExternalVersionControl != EditorSettings.externalVersionControl)
+                EditorSettings.externalVersionControl = m_ProjectExternalVersionControl;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e03778ccaf81840f8deaef1b29ec32b4572a7371
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PackageUtilities.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 68eedd4e5b33b37429c02c4add0036fe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a8b800ac50ff1c9022f427507a0bef345d8f6d15
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs
@@ -0,0 +1,63 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.Callbacks;
+using System.IO;
+
+
+namespace TMPro
+{
+    public class TMP_PostBuildProcessHandler
+    {
+        [PostProcessBuildAttribute(10000)]
+        public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
+        {
+            // Check if TMP Essential Resource are present in user project.
+            if (target == BuildTarget.iOS && File.Exists(GetEssentialProjectResourcesPath() + "/Resources/TMP Settings.asset") && TMP_Settings.enableEmojiSupport)
+            {
+                string file = Path.Combine(pathToBuiltProject, "Classes/UI/Keyboard.mm");
+                string content = File.ReadAllText(file);
+                content = content.Replace("FILTER_EMOJIS_IOS_KEYBOARD 1", "FILTER_EMOJIS_IOS_KEYBOARD 0");
+                File.WriteAllText(file, content);
+            }
+        }
+
+
+        private static string GetEssentialProjectResourcesPath()
+        {
+            // Find the potential location of the TextMesh Pro folder in the user project.
+            string projectPath = Path.GetFullPath("Assets/..");
+            if (Directory.Exists(projectPath))
+            {
+                // Search for default location of TMP Essential Resources
+                if (Directory.Exists(projectPath + "/Assets/TextMesh Pro/Resources"))
+                {
+                    return "Assets/TextMesh Pro";
+                }
+
+                // Search for potential alternative locations in the user project
+                string[] matchingPaths = Directory.GetDirectories(projectPath, "TextMesh Pro", SearchOption.AllDirectories);
+                projectPath = ValidateLocation(matchingPaths, projectPath);
+                if (projectPath != null) return projectPath;
+            }
+
+            return null;
+        }
+
+
+        private static string ValidateLocation(string[] paths, string projectPath)
+        {
+            for (int i = 0; i < paths.Length; i++)
+            {
+                // Check if any of the matching directories contain a GUISkins directory.
+                if (Directory.Exists(paths[i] + "/Resources"))
+                {
+                    string folderPath = paths[i].Replace(projectPath, "");
+                    folderPath = folderPath.TrimStart('\\', '/');
+                    return folderPath;
+                }
+            }
+
+            return null;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..af212b86231e110dc160e217619ed36fa23b6251
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6fdea2af3daa40fe8f88e5e9cfc17abb
+timeCreated: 1479886230
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b8695be2f09d2f72aae956ed51e99f06ebce7a4a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs
@@ -0,0 +1,43 @@
+#if !UNITY_2018_3_OR_NEWER
+using UnityEditor;
+
+namespace TMPro
+{
+
+    public static class TMP_ProjectTextSettings
+    {
+        // Open Project Text Settings
+        [MenuItem("Edit/Project Settings/TextMeshPro Settings", false, 309)]
+        public static void SelectProjectTextSettings()
+        {
+            TMP_Settings textSettings = TMP_Settings.instance;
+
+            if (textSettings)
+            {
+                Selection.activeObject = textSettings;
+
+                // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector
+                EditorUtility.FocusProjectWindow();
+                EditorGUIUtility.PingObject(textSettings);
+            }
+            else
+                TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED);
+        }
+
+
+        // Event received when TMP resources have been loaded.
+        static void ON_RESOURCES_LOADED()
+        {
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+
+            TMP_Settings textSettings = TMP_Settings.instance;
+
+            Selection.activeObject = textSettings;
+
+            // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector
+            EditorUtility.FocusProjectWindow();
+            EditorGUIUtility.PingObject(textSettings);
+        }
+    }
+}
+#endif
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6d194543082906d812c0acc61b684fb92cd61e88
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0e751e877ed14d71a6b8e63ac54949cf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs
new file mode 100644
index 0000000000000000000000000000000000000000..090bd7747c7cdc281c36fa2994e83997800e8336
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs
@@ -0,0 +1,68 @@
+using UnityEditor;
+using UnityEngine;
+using System.Collections;
+
+namespace TMPro.EditorUtilities
+{
+
+    //[InitializeOnLoad]
+    class TMP_ResourcesLoader
+    {
+
+        /// <summary>
+        /// Function to pre-load the TMP Resources
+        /// </summary>
+        public static void LoadTextMeshProResources()
+        {
+            //TMP_Settings.LoadDefaultSettings();
+            //TMP_StyleSheet.LoadDefaultStyleSheet();
+        }
+
+
+        static TMP_ResourcesLoader()
+        {
+            //Debug.Log("Loading TMP Resources...");
+
+            // Get current targetted platform
+
+
+            //string Settings = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
+            //TMPro.TMP_Settings.LoadDefaultSettings();
+            //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet();
+        }
+
+
+
+        //[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
+        //static void OnBeforeSceneLoaded()
+        //{
+            //Debug.Log("Before scene is loaded.");
+
+            //    //TMPro.TMP_Settings.LoadDefaultSettings();
+            //    //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet();
+
+            //    //ShaderVariantCollection collection = new ShaderVariantCollection();
+            //    //Shader s0 = Shader.Find("TextMeshPro/Mobile/Distance Field");
+            //    //ShaderVariantCollection.ShaderVariant tmp_Variant = new ShaderVariantCollection.ShaderVariant(s0, UnityEngine.Rendering.PassType.Normal, string.Empty);
+
+            //    //collection.Add(tmp_Variant);
+            //    //collection.WarmUp();
+        //}
+
+    }
+
+    //static class TMP_ProjectSettings
+    //{
+    //    [InitializeOnLoadMethod]
+    //    static void SetProjectDefineSymbols()
+    //    {
+    //        string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
+
+    //        //Check for and inject TMP_INSTALLED
+    //        if (!currentBuildSettings.Contains("TMP_PRESENT"))
+    //        {
+    //            PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings + ";TMP_PRESENT");
+    //        }
+    //    }
+    //}
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8b322e2fb1dc75e92f4134dd2566fc5176976889
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 7241c7dc25374fc1a6ab3ef9da79c363
+timeCreated: 1465441092
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2728f26f2c75601b960b379dcf2e8dc554b623db
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs
@@ -0,0 +1,442 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+    public class TMP_SDFShaderGUI : TMP_BaseShaderGUI
+    {
+        static ShaderFeature s_OutlineFeature, s_UnderlayFeature, s_BevelFeature, s_GlowFeature, s_MaskFeature;
+
+        static bool s_Face = true, s_Outline = true, s_Underlay, s_Lighting, s_Glow, s_Bevel, s_Light, s_Bump, s_Env;
+
+        static string[]
+            s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" },
+            s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" };
+
+        static TMP_SDFShaderGUI()
+        {
+            s_OutlineFeature = new ShaderFeature()
+            {
+                undoLabel = "Outline",
+                keywords = new[] { "OUTLINE_ON" }
+            };
+
+            s_UnderlayFeature = new ShaderFeature()
+            {
+                undoLabel = "Underlay",
+                keywords = new[] { "UNDERLAY_ON", "UNDERLAY_INNER" },
+                label = new GUIContent("Underlay Type"),
+                keywordLabels = new[]
+                {
+                    new GUIContent("None"), new GUIContent("Normal"), new GUIContent("Inner")
+                }
+            };
+
+            s_BevelFeature = new ShaderFeature()
+            {
+                undoLabel = "Bevel",
+                keywords = new[] { "BEVEL_ON" }
+            };
+
+            s_GlowFeature = new ShaderFeature()
+            {
+                undoLabel = "Glow",
+                keywords = new[] { "GLOW_ON" }
+            };
+
+            s_MaskFeature = new ShaderFeature()
+            {
+                undoLabel = "Mask",
+                keywords = new[] { "MASK_HARD", "MASK_SOFT" },
+                label = new GUIContent("Mask"),
+                keywordLabels = new[]
+                {
+                    new GUIContent("Mask Off"), new GUIContent("Mask Hard"), new GUIContent("Mask Soft")
+                }
+            };
+        }
+
+        protected override void DoGUI()
+        {
+            s_Face = BeginPanel("Face", s_Face);
+            if (s_Face)
+            {
+                DoFacePanel();
+            }
+
+            EndPanel();
+
+            s_Outline = m_Material.HasProperty(ShaderUtilities.ID_OutlineTex) ? BeginPanel("Outline", s_Outline) : BeginPanel("Outline", s_OutlineFeature, s_Outline);
+            if (s_Outline)
+            {
+                DoOutlinePanel();
+            }
+
+            EndPanel();
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_UnderlayColor))
+            {
+                s_Underlay = BeginPanel("Underlay", s_UnderlayFeature, s_Underlay);
+                if (s_Underlay)
+                {
+                    DoUnderlayPanel();
+                }
+
+                EndPanel();
+            }
+
+            if (m_Material.HasProperty("_SpecularColor"))
+            {
+                s_Lighting = BeginPanel("Lighting", s_BevelFeature, s_Lighting);
+                if (s_Lighting)
+                {
+                    s_Bevel = BeginPanel("Bevel", s_Bevel);
+                    if (s_Bevel)
+                    {
+                        DoBevelPanel();
+                    }
+
+                    EndPanel();
+
+                    s_Light = BeginPanel("Local Lighting", s_Light);
+                    if (s_Light)
+                    {
+                        DoLocalLightingPanel();
+                    }
+
+                    EndPanel();
+
+                    s_Bump = BeginPanel("Bump Map", s_Bump);
+                    if (s_Bump)
+                    {
+                        DoBumpMapPanel();
+                    }
+
+                    EndPanel();
+
+                    s_Env = BeginPanel("Environment Map", s_Env);
+                    if (s_Env)
+                    {
+                        DoEnvMapPanel();
+                    }
+
+                    EndPanel();
+                }
+
+                EndPanel();
+            }
+            else if (m_Material.HasProperty("_SpecColor"))
+            {
+                s_Bevel = BeginPanel("Bevel", s_Bevel);
+                if (s_Bevel)
+                {
+                    DoBevelPanel();
+                }
+
+                EndPanel();
+
+                s_Light = BeginPanel("Surface Lighting", s_Light);
+                if (s_Light)
+                {
+                    DoSurfaceLightingPanel();
+                }
+
+                EndPanel();
+
+                s_Bump = BeginPanel("Bump Map", s_Bump);
+                if (s_Bump)
+                {
+                    DoBumpMapPanel();
+                }
+
+                EndPanel();
+
+                s_Env = BeginPanel("Environment Map", s_Env);
+                if (s_Env)
+                {
+                    DoEnvMapPanel();
+                }
+
+                EndPanel();
+            }
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_GlowColor))
+            {
+                s_Glow = BeginPanel("Glow", s_GlowFeature, s_Glow);
+                if (s_Glow)
+                {
+                    DoGlowPanel();
+                }
+
+                EndPanel();
+            }
+
+            s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended);
+            if (s_DebugExtended)
+            {
+                DoDebugPanel();
+            }
+
+            EndPanel();
+        }
+
+        void DoFacePanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoColor("_FaceColor", "Color");
+            if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex))
+            {
+                if (m_Material.HasProperty("_FaceUVSpeedX"))
+                {
+                    DoTexture2D("_FaceTex", "Texture", true, s_FaceUvSpeedNames);
+                }
+                else
+                {
+                    DoTexture2D("_FaceTex", "Texture", true);
+                }
+            }
+
+            DoSlider("_OutlineSoftness", "Softness");
+            DoSlider("_FaceDilate", "Dilate");
+            if (m_Material.HasProperty(ShaderUtilities.ID_Shininess))
+            {
+                DoSlider("_FaceShininess", "Gloss");
+            }
+
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoOutlinePanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoColor("_OutlineColor", "Color");
+            if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex))
+            {
+                if (m_Material.HasProperty("_OutlineUVSpeedX"))
+                {
+                    DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames);
+                }
+                else
+                {
+                    DoTexture2D("_OutlineTex", "Texture", true);
+                }
+            }
+
+            DoSlider("_OutlineWidth", "Thickness");
+            if (m_Material.HasProperty("_OutlineShininess"))
+            {
+                DoSlider("_OutlineShininess", "Gloss");
+            }
+
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoUnderlayPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            s_UnderlayFeature.DoPopup(m_Editor, m_Material);
+            DoColor("_UnderlayColor", "Color");
+            DoSlider("_UnderlayOffsetX", "Offset X");
+            DoSlider("_UnderlayOffsetY", "Offset Y");
+            DoSlider("_UnderlayDilate", "Dilate");
+            DoSlider("_UnderlaySoftness", "Softness");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        static GUIContent[] s_BevelTypeLabels =
+        {
+            new GUIContent("Outer Bevel"),
+            new GUIContent("Inner Bevel")
+        };
+
+        void DoBevelPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoPopup("_ShaderFlags", "Type", s_BevelTypeLabels);
+            DoSlider("_Bevel", "Amount");
+            DoSlider("_BevelOffset", "Offset");
+            DoSlider("_BevelWidth", "Width");
+            DoSlider("_BevelRoundness", "Roundness");
+            DoSlider("_BevelClamp", "Clamp");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoLocalLightingPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoSlider("_LightAngle", "Light Angle");
+            DoColor("_SpecularColor", "Specular Color");
+            DoSlider("_SpecularPower", "Specular Power");
+            DoSlider("_Reflectivity", "Reflectivity Power");
+            DoSlider("_Diffuse", "Diffuse Shadow");
+            DoSlider("_Ambient", "Ambient Shadow");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoSurfaceLightingPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoColor("_SpecColor", "Specular Color");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoBumpMapPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoTexture2D("_BumpMap", "Texture");
+            DoSlider("_BumpFace", "Face");
+            DoSlider("_BumpOutline", "Outline");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoEnvMapPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoColor("_ReflectFaceColor", "Face Color");
+            DoColor("_ReflectOutlineColor", "Outline Color");
+            DoCubeMap("_Cube", "Texture");
+            DoVector3("_EnvMatrixRotation", "Rotation");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoGlowPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoColor("_GlowColor", "Color");
+            DoSlider("_GlowOffset", "Offset");
+            DoSlider("_GlowInner", "Inner");
+            DoSlider("_GlowOuter", "Outer");
+            DoSlider("_GlowPower", "Power");
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoDebugPanel()
+        {
+            EditorGUI.indentLevel += 1;
+            DoTexture2D("_MainTex", "Font Atlas");
+            DoFloat("_GradientScale", "Gradient Scale");
+            DoFloat("_TextureWidth", "Texture Width");
+            DoFloat("_TextureHeight", "Texture Height");
+            EditorGUILayout.Space();
+            DoFloat("_ScaleX", "Scale X");
+            DoFloat("_ScaleY", "Scale Y");
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_Sharpness))
+                DoSlider("_Sharpness", "Sharpness");
+
+            DoSlider("_PerspectiveFilter", "Perspective Filter");
+            EditorGUILayout.Space();
+            DoFloat("_VertexOffsetX", "Offset X");
+            DoFloat("_VertexOffsetY", "Offset Y");
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_MaskCoord))
+            {
+                EditorGUILayout.Space();
+                s_MaskFeature.ReadState(m_Material);
+                s_MaskFeature.DoPopup(m_Editor, m_Material);
+                if (s_MaskFeature.Active)
+                {
+                    DoMaskSubgroup();
+                }
+
+                EditorGUILayout.Space();
+                DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels);
+            }
+            else if (m_Material.HasProperty("_MaskTex"))
+            {
+                DoMaskTexSubgroup();
+            }
+            else if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX))
+            {
+                EditorGUILayout.Space();
+                DoFloat("_MaskSoftnessX", "Softness X");
+                DoFloat("_MaskSoftnessY", "Softness Y");
+                DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels);
+            }
+
+            if (m_Material.HasProperty(ShaderUtilities.ID_StencilID))
+            {
+                EditorGUILayout.Space();
+                DoFloat("_Stencil", "Stencil ID");
+                DoFloat("_StencilComp", "Stencil Comp");
+            }
+
+            EditorGUILayout.Space();
+
+            EditorGUI.BeginChangeCheck();
+            bool useRatios = EditorGUILayout.Toggle("Use Ratios", !m_Material.IsKeywordEnabled("RATIOS_OFF"));
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_Editor.RegisterPropertyChangeUndo("Use Ratios");
+                if (useRatios)
+                {
+                    m_Material.DisableKeyword("RATIOS_OFF");
+                }
+                else
+                {
+                    m_Material.EnableKeyword("RATIOS_OFF");
+                }
+            }
+
+            EditorGUI.BeginDisabledGroup(true);
+            DoFloat("_ScaleRatioA", "Scale Ratio A");
+            DoFloat("_ScaleRatioB", "Scale Ratio B");
+            DoFloat("_ScaleRatioC", "Scale Ratio C");
+            EditorGUI.EndDisabledGroup();
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.Space();
+        }
+
+        void DoMaskSubgroup()
+        {
+            DoVector("_MaskCoord", "Mask Bounds", s_XywhVectorLabels);
+            if (Selection.activeGameObject != null)
+            {
+                Renderer renderer = Selection.activeGameObject.GetComponent<Renderer>();
+                if (renderer != null)
+                {
+                    Rect rect = EditorGUILayout.GetControlRect();
+                    rect.x += EditorGUIUtility.labelWidth;
+                    rect.width -= EditorGUIUtility.labelWidth;
+                    if (GUI.Button(rect, "Match Renderer Bounds"))
+                    {
+                        FindProperty("_MaskCoord", m_Properties).vectorValue = new Vector4(
+                            0,
+                            0,
+                            Mathf.Round(renderer.bounds.extents.x * 1000) / 1000,
+                            Mathf.Round(renderer.bounds.extents.y * 1000) / 1000
+                        );
+                    }
+                }
+            }
+
+            if (s_MaskFeature.State == 1)
+            {
+                DoFloat("_MaskSoftnessX", "Softness X");
+                DoFloat("_MaskSoftnessY", "Softness Y");
+            }
+        }
+
+        void DoMaskTexSubgroup()
+        {
+            EditorGUILayout.Space();
+            DoTexture2D("_MaskTex", "Mask Texture");
+            DoToggle("_MaskInverse", "Inverse Mask");
+            DoColor("_MaskEdgeColor", "Edge Color");
+            DoSlider("_MaskEdgeSoftness", "Edge Softness");
+            DoSlider("_MaskWipeControl", "Wipe Position");
+            DoFloat("_MaskSoftnessX", "Softness X");
+            DoFloat("_MaskSoftnessY", "Softness Y");
+            DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c643afa13989210f6c0ea7a6eb21d6ccc607b362
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 8413ca0e506d42a1a4bd9769f204ad16
+timeCreated: 1469844718
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2ba34d69cd04130d0a2318837db00117067f9aa8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro
+{
+    class TMP_SerializedPropertyHolder : ScriptableObject
+    {
+        public TMP_FontAsset fontAsset;
+        public uint firstCharacter;
+        public uint secondCharacter;
+
+        public TMP_GlyphPairAdjustmentRecord glyphPairAdjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(), new TMP_GlyphAdjustmentRecord());
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cde31db91833cfaaf90f6debf68649cb424fc44f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9c4a050f089abb04ebd4125e419f4548
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..571c9cd3414004d52cbd7266ed7a76fb4d0d4945
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs
@@ -0,0 +1,341 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEditorInternal;
+
+#pragma warning disable 0414 // Disabled a few warnings for not yet implemented features.
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TMP_Settings))]
+    public class TMP_SettingsEditor : Editor
+    {
+        internal class Styles
+        {
+            public static readonly GUIContent defaultFontAssetLabel = new GUIContent("Default Font Asset", "The Font Asset that will be assigned by default to newly created text objects when no Font Asset is specified.");
+            public static readonly GUIContent defaultFontAssetPathLabel = new GUIContent("Path:        Resources/", "The relative path to a Resources folder where the Font Assets and Material Presets are located.\nExample \"Fonts & Materials/\"");
+
+            public static readonly GUIContent fallbackFontAssetsLabel = new GUIContent("Fallback Font Assets", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset.");
+            public static readonly GUIContent fallbackFontAssetsListLabel = new GUIContent("Fallback Font Assets List", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset.");
+
+            public static readonly GUIContent fallbackMaterialSettingsLabel = new GUIContent("Fallback Material Settings");
+            public static readonly GUIContent matchMaterialPresetLabel = new GUIContent("Match Material Presets");
+
+            public static readonly GUIContent containerDefaultSettingsLabel = new GUIContent("Text Container Default Settings");
+
+            public static readonly GUIContent textMeshProLabel = new GUIContent("TextMeshPro");
+            public static readonly GUIContent textMeshProUiLabel = new GUIContent("TextMeshPro UI");
+            public static readonly GUIContent enableRaycastTarget = new GUIContent("Enable Raycast Target");
+            public static readonly GUIContent autoSizeContainerLabel = new GUIContent("Auto Size Text Container", "Set the size of the text container to match the text.");
+
+            public static readonly GUIContent textComponentDefaultSettingsLabel = new GUIContent("Text Component Default Settings");
+            public static readonly GUIContent defaultFontSize = new GUIContent("Default Font Size");
+            public static readonly GUIContent autoSizeRatioLabel = new GUIContent("Text Auto Size Ratios");
+            public static readonly GUIContent minLabel = new GUIContent("Min");
+            public static readonly GUIContent maxLabel = new GUIContent("Max");
+
+            public static readonly GUIContent wordWrappingLabel = new GUIContent("Word Wrapping");
+            public static readonly GUIContent kerningLabel = new GUIContent("Kerning");
+            public static readonly GUIContent extraPaddingLabel = new GUIContent("Extra Padding");
+            public static readonly GUIContent tintAllSpritesLabel = new GUIContent("Tint All Sprites");
+            public static readonly GUIContent parseEscapeCharactersLabel = new GUIContent("Parse Escape Sequence");
+
+            public static readonly GUIContent dynamicFontSystemSettingsLabel = new GUIContent("Dynamic Font System Settings");
+            public static readonly GUIContent getFontFeaturesAtRuntime = new GUIContent("Get Font Features at Runtime", "Determines if Glyph Adjustment Data will be retrieved from font files at runtime when new characters and glyphs are added to font assets.");
+
+            public static readonly GUIContent missingGlyphLabel = new GUIContent("Replacement Character", "The character to be displayed when the requested character is not found in any font asset or fallbacks.");
+            public static readonly GUIContent disableWarningsLabel = new GUIContent("Disable warnings", "Disable warning messages in the Console.");
+
+            public static readonly GUIContent defaultSpriteAssetLabel = new GUIContent("Default Sprite Asset", "The Sprite Asset that will be assigned by default when using the <sprite> tag when no Sprite Asset is specified.");
+            public static readonly GUIContent enableEmojiSupportLabel = new GUIContent("iOS Emoji Support", "Enables Emoji support for Touch Screen Keyboards on target devices.");
+            public static readonly GUIContent spriteAssetsPathLabel = new GUIContent("Path:        Resources/", "The relative path to a Resources folder where the Sprite Assets are located.\nExample \"Sprite Assets/\"");
+
+            public static readonly GUIContent defaultStyleSheetLabel = new GUIContent("Default Style Sheet", "The Style Sheet that will be used for all text objects in this project.");
+
+            public static readonly GUIContent colorGradientPresetsLabel = new GUIContent("Color Gradient Presets", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\"");
+            public static readonly GUIContent colorGradientsPathLabel = new GUIContent("Path:        Resources/", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\"");
+
+            public static readonly GUIContent lineBreakingLabel = new GUIContent("Line Breaking for Asian languages", "The text assets that contain the Leading and Following characters which define the rules for line breaking with Asian languages.");
+        }
+
+        SerializedProperty m_PropFontAsset;
+        SerializedProperty m_PropDefaultFontAssetPath;
+        SerializedProperty m_PropDefaultFontSize;
+        SerializedProperty m_PropDefaultAutoSizeMinRatio;
+        SerializedProperty m_PropDefaultAutoSizeMaxRatio;
+        SerializedProperty m_PropDefaultTextMeshProTextContainerSize;
+        SerializedProperty m_PropDefaultTextMeshProUITextContainerSize;
+        SerializedProperty m_PropAutoSizeTextContainer;
+        SerializedProperty m_PropEnableRaycastTarget;
+
+        SerializedProperty m_PropSpriteAsset;
+        SerializedProperty m_PropSpriteAssetPath;
+        SerializedProperty m_PropEnableEmojiSupport;
+        SerializedProperty m_PropStyleSheet;
+        ReorderableList m_List;
+
+        SerializedProperty m_PropColorGradientPresetsPath;
+
+        SerializedProperty m_PropMatchMaterialPreset;
+        SerializedProperty m_PropWordWrapping;
+        SerializedProperty m_PropKerning;
+        SerializedProperty m_PropExtraPadding;
+        SerializedProperty m_PropTintAllSprites;
+        SerializedProperty m_PropParseEscapeCharacters;
+        SerializedProperty m_PropMissingGlyphCharacter;
+
+        SerializedProperty m_GetFontFeaturesAtRuntime;
+
+        SerializedProperty m_PropWarningsDisabled;
+
+        SerializedProperty m_PropLeadingCharacters;
+        SerializedProperty m_PropFollowingCharacters;
+
+        public void OnEnable()
+        {
+            if (target == null)
+                return;
+
+            m_PropFontAsset = serializedObject.FindProperty("m_defaultFontAsset");
+            m_PropDefaultFontAssetPath = serializedObject.FindProperty("m_defaultFontAssetPath");
+            m_PropDefaultFontSize = serializedObject.FindProperty("m_defaultFontSize");
+            m_PropDefaultAutoSizeMinRatio = serializedObject.FindProperty("m_defaultAutoSizeMinRatio");
+            m_PropDefaultAutoSizeMaxRatio = serializedObject.FindProperty("m_defaultAutoSizeMaxRatio");
+            m_PropDefaultTextMeshProTextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProTextContainerSize");
+            m_PropDefaultTextMeshProUITextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProUITextContainerSize");
+            m_PropAutoSizeTextContainer = serializedObject.FindProperty("m_autoSizeTextContainer");
+            m_PropEnableRaycastTarget = serializedObject.FindProperty("m_EnableRaycastTarget");
+
+            m_PropSpriteAsset = serializedObject.FindProperty("m_defaultSpriteAsset");
+            m_PropSpriteAssetPath = serializedObject.FindProperty("m_defaultSpriteAssetPath");
+            m_PropEnableEmojiSupport = serializedObject.FindProperty("m_enableEmojiSupport");
+            m_PropStyleSheet = serializedObject.FindProperty("m_defaultStyleSheet");
+            m_PropColorGradientPresetsPath = serializedObject.FindProperty("m_defaultColorGradientPresetsPath");
+
+            m_List = new ReorderableList(serializedObject, serializedObject.FindProperty("m_fallbackFontAssets"), true, true, true, true);
+
+            m_List.drawElementCallback = (rect, index, isActive, isFocused) =>
+            {
+                var element = m_List.serializedProperty.GetArrayElementAtIndex(index);
+                rect.y += 2;
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
+            };
+
+            m_List.drawHeaderCallback = rect =>
+            {
+                EditorGUI.LabelField(rect, Styles.fallbackFontAssetsListLabel);
+            };
+
+            m_PropMatchMaterialPreset = serializedObject.FindProperty("m_matchMaterialPreset");
+
+            m_PropWordWrapping = serializedObject.FindProperty("m_enableWordWrapping");
+            m_PropKerning = serializedObject.FindProperty("m_enableKerning");
+            m_PropExtraPadding = serializedObject.FindProperty("m_enableExtraPadding");
+            m_PropTintAllSprites = serializedObject.FindProperty("m_enableTintAllSprites");
+            m_PropParseEscapeCharacters = serializedObject.FindProperty("m_enableParseEscapeCharacters");
+            m_PropMissingGlyphCharacter = serializedObject.FindProperty("m_missingGlyphCharacter");
+
+            m_PropWarningsDisabled = serializedObject.FindProperty("m_warningsDisabled");
+
+            m_GetFontFeaturesAtRuntime = serializedObject.FindProperty("m_GetFontFeaturesAtRuntime");
+
+            m_PropLeadingCharacters = serializedObject.FindProperty("m_leadingCharacters");
+            m_PropFollowingCharacters = serializedObject.FindProperty("m_followingCharacters");
+        }
+
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+
+            float labelWidth = EditorGUIUtility.labelWidth;
+            float fieldWidth = EditorGUIUtility.fieldWidth;
+
+            // TextMeshPro Font Info Panel
+            EditorGUI.indentLevel = 0;
+
+            // FONT ASSET
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.defaultFontAssetLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropFontAsset, Styles.defaultFontAssetLabel);
+            EditorGUILayout.PropertyField(m_PropDefaultFontAssetPath, Styles.defaultFontAssetPathLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // FALLBACK FONT ASSETs
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.fallbackFontAssetsLabel, EditorStyles.boldLabel);
+            m_List.DoLayoutList();
+
+            GUILayout.Label(Styles.fallbackMaterialSettingsLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropMatchMaterialPreset, Styles.matchMaterialPresetLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // MISSING GLYPHS
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.dynamicFontSystemSettingsLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_GetFontFeaturesAtRuntime, Styles.getFontFeaturesAtRuntime);
+            EditorGUILayout.PropertyField(m_PropMissingGlyphCharacter, Styles.missingGlyphLabel);
+            EditorGUILayout.PropertyField(m_PropWarningsDisabled, Styles.disableWarningsLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // TEXT OBJECT DEFAULT PROPERTIES
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.containerDefaultSettingsLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+
+            EditorGUILayout.PropertyField(m_PropDefaultTextMeshProTextContainerSize, Styles.textMeshProLabel);
+            EditorGUILayout.PropertyField(m_PropDefaultTextMeshProUITextContainerSize, Styles.textMeshProUiLabel);
+            EditorGUILayout.PropertyField(m_PropEnableRaycastTarget, Styles.enableRaycastTarget);
+            EditorGUILayout.PropertyField(m_PropAutoSizeTextContainer, Styles.autoSizeContainerLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+
+            GUILayout.Label(Styles.textComponentDefaultSettingsLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropDefaultFontSize, Styles.defaultFontSize);
+
+            EditorGUILayout.BeginHorizontal();
+            {
+                EditorGUILayout.PrefixLabel(Styles.autoSizeRatioLabel);
+                EditorGUIUtility.labelWidth = 32;
+                EditorGUIUtility.fieldWidth = 10;
+
+                EditorGUI.indentLevel = 0;
+                EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMinRatio, Styles.minLabel);
+                EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMaxRatio, Styles.maxLabel);
+                EditorGUI.indentLevel = 1;
+            }
+            EditorGUILayout.EndHorizontal();
+
+            EditorGUIUtility.labelWidth = labelWidth;
+            EditorGUIUtility.fieldWidth = fieldWidth;
+
+            EditorGUILayout.PropertyField(m_PropWordWrapping, Styles.wordWrappingLabel);
+            EditorGUILayout.PropertyField(m_PropKerning, Styles.kerningLabel);
+
+            EditorGUILayout.PropertyField(m_PropExtraPadding, Styles.extraPaddingLabel);
+            EditorGUILayout.PropertyField(m_PropTintAllSprites, Styles.tintAllSpritesLabel);
+
+            EditorGUILayout.PropertyField(m_PropParseEscapeCharacters, Styles.parseEscapeCharactersLabel);
+
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // SPRITE ASSET
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.defaultSpriteAssetLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropSpriteAsset, Styles.defaultSpriteAssetLabel);
+            EditorGUILayout.PropertyField(m_PropEnableEmojiSupport, Styles.enableEmojiSupportLabel);
+            EditorGUILayout.PropertyField(m_PropSpriteAssetPath, Styles.spriteAssetsPathLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // STYLE SHEET
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.defaultStyleSheetLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_PropStyleSheet, Styles.defaultStyleSheetLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                serializedObject.ApplyModifiedProperties();
+                TMP_StyleSheet.UpdateStyleSheet();
+            }
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // COLOR GRADIENT PRESETS
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.colorGradientPresetsLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropColorGradientPresetsPath, Styles.colorGradientsPathLabel);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            // LINE BREAKING RULE
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+            GUILayout.Label(Styles.lineBreakingLabel, EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            EditorGUILayout.PropertyField(m_PropLeadingCharacters);
+            EditorGUILayout.PropertyField(m_PropFollowingCharacters);
+            EditorGUI.indentLevel = 0;
+
+            EditorGUILayout.Space();
+            EditorGUILayout.EndVertical();
+
+            if (serializedObject.ApplyModifiedProperties())
+            {
+                EditorUtility.SetDirty(target);
+                TMPro_EventManager.ON_TMP_SETTINGS_CHANGED();
+            }
+        }
+    }
+
+#if UNITY_2018_3_OR_NEWER
+    class TMP_ResourceImporterProvider : SettingsProvider
+    {
+        TMP_PackageResourceImporter m_ResourceImporter;
+
+        public TMP_ResourceImporterProvider()
+            : base("Project/TextMesh Pro", SettingsScope.Project)
+        {
+        }
+
+        public override void OnGUI(string searchContext)
+        {
+            // Lazy creation that supports domain reload
+            if (m_ResourceImporter == null)
+                m_ResourceImporter = new TMP_PackageResourceImporter();
+
+            m_ResourceImporter.OnGUI();
+        }
+
+        public override void OnDeactivate()
+        {
+            if (m_ResourceImporter != null)
+                m_ResourceImporter.OnDestroy();
+        }
+
+        static UnityEngine.Object GetTMPSettings()
+        {
+            return Resources.Load<TMP_Settings>("TMP Settings");
+        }
+
+        [SettingsProviderGroup]
+        static SettingsProvider[] CreateTMPSettingsProvider()
+        {
+            var providers = new List<SettingsProvider> { new TMP_ResourceImporterProvider() };
+
+            if (GetTMPSettings() != null)
+            {
+                var provider = new AssetSettingsProvider("Project/TextMesh Pro/Settings", GetTMPSettings);
+                provider.PopulateSearchKeywordsFromGUIContentProperties<TMP_SettingsEditor.Styles>();
+                providers.Add(provider);
+            }
+
+            return providers.ToArray();
+        }
+    }
+#endif
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a719ae77400d8625a06aedefbfd4f5cb54c987da
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SettingsEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0386b6eb838c47138cd51d1c1b879a35
+timeCreated: 1436658550
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4df588ef7769980f1d252bf6f21a4ad5ba7bb78b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs
@@ -0,0 +1,896 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using UnityEditorInternal;
+using System.Collections.Generic;
+
+
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomEditor(typeof(TMP_SpriteAsset))]
+    public class TMP_SpriteAssetEditor : Editor
+    {
+        struct UI_PanelState
+        {
+            public static bool spriteAssetInfoPanel = true;
+            public static bool fallbackSpriteAssetPanel = true;
+            public static bool spriteCharacterTablePanel;
+            public static bool spriteGlyphTablePanel;
+        }
+
+        private static string[] s_UiStateLabel = new string[] { "<i>(Click to collapse)</i> ", "<i>(Click to expand)</i> " };
+
+        int m_moveToIndex;
+        int m_selectedElement = -1;
+        int m_CurrentCharacterPage;
+        int m_CurrentGlyphPage;
+
+        const string k_UndoRedo = "UndoRedoPerformed";
+
+        string m_CharacterSearchPattern;
+        List<int> m_CharacterSearchList;
+        bool m_IsCharacterSearchDirty;
+
+        string m_GlyphSearchPattern;
+        List<int> m_GlyphSearchList;
+        bool m_IsGlyphSearchDirty;
+
+        SerializedProperty m_spriteAtlas_prop;
+        SerializedProperty m_material_prop;
+        SerializedProperty m_SpriteCharacterTableProperty;
+        SerializedProperty m_SpriteGlyphTableProperty;
+        ReorderableList m_fallbackSpriteAssetList;
+
+        TMP_SpriteAsset m_SpriteAsset;
+
+        bool isAssetDirty;
+
+        float m_xOffset;
+        float m_yOffset;
+        float m_xAdvance;
+        float m_scale;
+
+        public void OnEnable()
+        {
+            m_SpriteAsset = target as TMP_SpriteAsset;
+
+            m_spriteAtlas_prop = serializedObject.FindProperty("spriteSheet");
+            m_material_prop = serializedObject.FindProperty("material");
+            m_SpriteCharacterTableProperty = serializedObject.FindProperty("m_SpriteCharacterTable");
+            m_SpriteGlyphTableProperty = serializedObject.FindProperty("m_SpriteGlyphTable");
+
+            // Fallback TMP Sprite Asset list
+            m_fallbackSpriteAssetList = new ReorderableList(serializedObject, serializedObject.FindProperty("fallbackSpriteAssets"), true, true, true, true);
+
+            m_fallbackSpriteAssetList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
+            {
+                var element = m_fallbackSpriteAssetList.serializedProperty.GetArrayElementAtIndex(index);
+                rect.y += 2;
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
+            };
+
+            m_fallbackSpriteAssetList.drawHeaderCallback = rect =>
+            {
+                EditorGUI.LabelField(rect, new GUIContent("Fallback Sprite Asset List", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset."));
+            };
+        }
+
+
+        public override void OnInspectorGUI()
+        {
+
+            //Debug.Log("OnInspectorGUI Called.");
+            Event currentEvent = Event.current;
+            string evt_cmd = currentEvent.commandName; // Get Current Event CommandName to check for Undo Events
+
+            serializedObject.Update();
+
+            Rect rect;
+
+            // TEXTMESHPRO SPRITE INFO PANEL
+            GUILayout.Label("Sprite Info", EditorStyles.boldLabel);
+            EditorGUI.indentLevel = 1;
+            
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_spriteAtlas_prop , new GUIContent("Sprite Atlas"));
+            if (EditorGUI.EndChangeCheck())
+            {
+                // Assign the new sprite atlas texture to the current material
+                Texture2D tex = m_spriteAtlas_prop.objectReferenceValue as Texture2D;
+                if (tex != null)
+                {
+                    Material mat = m_material_prop.objectReferenceValue as Material;
+                    if (mat != null)
+                        mat.mainTexture = tex;
+                }
+            }
+
+            EditorGUILayout.PropertyField(m_material_prop, new GUIContent("Default Material"));
+             
+            EditorGUILayout.Space();
+
+            // FALLBACK SPRITE ASSETS
+            EditorGUI.indentLevel = 0;
+            UI_PanelState.fallbackSpriteAssetPanel = EditorGUILayout.Foldout(UI_PanelState.fallbackSpriteAssetPanel, new GUIContent("Fallback Sprite Assets", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset."), true, TMP_UIStyleManager.boldFoldout);
+            
+            if (UI_PanelState.fallbackSpriteAssetPanel)
+            {
+                m_fallbackSpriteAssetList.DoLayoutList();
+            }
+
+            // SPRITE CHARACTER TABLE
+            #region Display Sprite Character Table
+            EditorGUI.indentLevel = 0;
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Sprite Character Table</b>", "List of sprite characters contained in this sprite asset."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.spriteCharacterTablePanel = !UI_PanelState.spriteCharacterTablePanel;
+
+            GUI.Label(rect, (UI_PanelState.spriteCharacterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.spriteCharacterTablePanel)
+            {
+                int arraySize = m_SpriteCharacterTableProperty.arraySize;
+                int itemsPerPage = 10;
+
+                // Display Glyph Management Tools
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true));
+                {
+                    // Search Bar implementation
+                    #region DISPLAY SEARCH BAR
+                    EditorGUILayout.BeginHorizontal();
+                    {
+                        EditorGUIUtility.labelWidth = 110f;
+                        EditorGUI.BeginChangeCheck();
+                        string searchPattern = EditorGUILayout.TextField("Sprite Search", m_CharacterSearchPattern, "SearchTextField");
+                        if (EditorGUI.EndChangeCheck() || m_IsCharacterSearchDirty)
+                        {
+                            if (string.IsNullOrEmpty(searchPattern) == false)
+                            {
+                                //GUIUtility.keyboardControl = 0;
+                                m_CharacterSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim();
+
+                                // Search Glyph Table for potential matches
+                                SearchCharacterTable(m_CharacterSearchPattern, ref m_CharacterSearchList);
+                            }
+                            else
+                                m_CharacterSearchPattern = null;
+
+                            m_IsCharacterSearchDirty = false;
+                        }
+
+                        string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton";
+                        if (GUILayout.Button(GUIContent.none, styleName))
+                        {
+                            GUIUtility.keyboardControl = 0;
+                            m_CharacterSearchPattern = string.Empty;
+                        }
+                    }
+                    EditorGUILayout.EndHorizontal();
+                    #endregion
+
+                    // Display Page Navigation
+                    if (!string.IsNullOrEmpty(m_CharacterSearchPattern))
+                        arraySize = m_CharacterSearchList.Count;
+
+                    // Display Page Navigation
+                    DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage);
+                }
+                EditorGUILayout.EndVertical();
+
+                if (arraySize > 0)
+                {
+                    // Display each SpriteInfo entry using the SpriteInfo property drawer.
+                    for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++)
+                    {
+                        // Define the start of the selection region of the element.
+                        Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        int elementIndex = i;
+                        if (!string.IsNullOrEmpty(m_CharacterSearchPattern))
+                            elementIndex = m_CharacterSearchList[i];
+
+                        SerializedProperty spriteCharacterProperty = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex);
+
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                        {
+                            EditorGUI.BeginDisabledGroup(i != m_selectedElement);
+                            {
+                                EditorGUILayout.PropertyField(spriteCharacterProperty);
+                            }
+                            EditorGUI.EndDisabledGroup();
+                        }
+                        EditorGUILayout.EndVertical();
+
+                        // Define the end of the selection region of the element.
+                        Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        // Check for Item selection
+                        Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                        if (DoSelectionCheck(selectionArea))
+                        {
+                            if (m_selectedElement == i)
+                            {
+                                m_selectedElement = -1;
+                            }
+                            else
+                            {
+                                m_selectedElement = i;
+                                GUIUtility.keyboardControl = 0;
+                            }
+                        }
+
+                        // Draw & Handle Section Area
+                        if (m_selectedElement == i)
+                        {
+                            // Draw selection highlight
+                            TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+
+                            // Draw options to MoveUp, MoveDown, Add or Remove Sprites
+                            Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f);
+                            controlRect.width /= 8;
+
+                            // Move sprite up.
+                            bool guiEnabled = GUI.enabled;
+                            if (i == 0) { GUI.enabled = false; }
+                            if (GUI.Button(controlRect, "Up"))
+                            {
+                                SwapCharacterElements(i, i - 1);
+                            }
+                            GUI.enabled = guiEnabled;
+
+                            // Move sprite down.
+                            controlRect.x += controlRect.width;
+                            if (i == arraySize - 1) { GUI.enabled = false; }
+                            if (GUI.Button(controlRect, "Down"))
+                            {
+                                SwapCharacterElements(i, i + 1);
+                            }
+                            GUI.enabled = guiEnabled;
+
+                            // Move sprite to new index
+                            controlRect.x += controlRect.width * 2;
+                            //if (i == arraySize - 1) { GUI.enabled = false; }
+                            m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex);
+                            controlRect.x -= controlRect.width;
+                            if (GUI.Button(controlRect, "Goto"))
+                            {
+                                MoveCharacterToIndex(i, m_moveToIndex);
+                            }
+                            //controlRect.x += controlRect.width;
+                            GUI.enabled = guiEnabled;
+
+                            // Add new Sprite
+                            controlRect.x += controlRect.width * 4;
+                            if (GUI.Button(controlRect, "+"))
+                            {
+                                m_SpriteCharacterTableProperty.arraySize += 1;
+
+                                int index = m_SpriteCharacterTableProperty.arraySize - 1;
+
+                                SerializedProperty spriteInfo_prop = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(index);
+
+                                // Copy properties of the selected element
+                                CopyCharacterSerializedProperty(m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex), ref spriteInfo_prop);
+
+                                //spriteInfo_prop.FindPropertyRelative("m_Index").intValue = index;
+                                serializedObject.ApplyModifiedProperties();
+
+                                m_IsCharacterSearchDirty = true;
+                            }
+
+                            // Delete selected Sprite
+                            controlRect.x += controlRect.width;
+                            if (m_selectedElement == -1) GUI.enabled = false;
+                            if (GUI.Button(controlRect, "-"))
+                            {
+                                m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(elementIndex);
+
+                                m_selectedElement = -1;
+                                serializedObject.ApplyModifiedProperties();
+
+                                m_IsCharacterSearchDirty = true;
+
+                                return;
+                            }
+
+
+                        }
+                    }
+                }
+
+                DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage);
+
+                EditorGUIUtility.labelWidth = 40f;
+                EditorGUIUtility.fieldWidth = 20f;
+
+                GUILayout.Space(5f);
+
+                // GLOBAL TOOLS
+                #region Global Tools
+                /*
+                GUI.enabled = true;
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                rect = EditorGUILayout.GetControlRect(false, 40);
+               
+                float width = (rect.width - 75f) / 4;
+                EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel);
+                
+                
+                rect.x += 70;
+                bool old_ChangedState = GUI.changed;
+
+                GUI.changed = false;
+                m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset);
+                
+                m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset);
+                
+                m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance);
+                
+                m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale);
+                if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale);
+
+                EditorGUILayout.EndVertical();
+                
+                GUI.changed = old_ChangedState;
+                */
+                #endregion
+ 
+            }
+            #endregion
+
+
+            // SPRITE GLYPH TABLE
+            #region Display Sprite Glyph Table
+            EditorGUI.indentLevel = 0;
+            rect = EditorGUILayout.GetControlRect(false, 24);
+
+            if (GUI.Button(rect, new GUIContent("<b>Sprite Glyph Table</b>", "A list of the SpriteGlyphs contained in this sprite asset."), TMP_UIStyleManager.sectionHeader))
+                UI_PanelState.spriteGlyphTablePanel = !UI_PanelState.spriteGlyphTablePanel;
+
+            GUI.Label(rect, (UI_PanelState.spriteGlyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel);
+
+            if (UI_PanelState.spriteGlyphTablePanel)
+            {
+                int arraySize = m_SpriteGlyphTableProperty.arraySize;
+                int itemsPerPage = 10;
+
+                // Display Glyph Management Tools
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true));
+                {
+                    // Search Bar implementation
+                    #region DISPLAY SEARCH BAR
+                    EditorGUILayout.BeginHorizontal();
+                    {
+                        EditorGUIUtility.labelWidth = 110f;
+                        EditorGUI.BeginChangeCheck();
+                        string searchPattern = EditorGUILayout.TextField("Sprite Search", m_GlyphSearchPattern, "SearchTextField");
+                        if (EditorGUI.EndChangeCheck() || m_IsGlyphSearchDirty)
+                        {
+                            if (string.IsNullOrEmpty(searchPattern) == false)
+                            {
+                                //GUIUtility.keyboardControl = 0;
+                                m_GlyphSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim();
+
+                                // Search Glyph Table for potential matches
+                                SearchCharacterTable(m_GlyphSearchPattern, ref m_GlyphSearchList);
+                            }
+                            else
+                                m_GlyphSearchPattern = null;
+
+                            m_IsGlyphSearchDirty = false;
+                        }
+
+                        string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton";
+                        if (GUILayout.Button(GUIContent.none, styleName))
+                        {
+                            GUIUtility.keyboardControl = 0;
+                            m_GlyphSearchPattern = string.Empty;
+                        }
+                    }
+                    EditorGUILayout.EndHorizontal();
+                    #endregion
+
+                    // Display Page Navigation
+                    if (!string.IsNullOrEmpty(m_GlyphSearchPattern))
+                        arraySize = m_GlyphSearchList.Count;
+
+                    // Display Page Navigation
+                    DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage);
+                }
+                EditorGUILayout.EndVertical();
+
+                if (arraySize > 0)
+                {
+                    // Display each SpriteInfo entry using the SpriteInfo property drawer.
+                    for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++)
+                    {
+                        // Define the start of the selection region of the element.
+                        Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        int elementIndex = i;
+                        if (!string.IsNullOrEmpty(m_GlyphSearchPattern))
+                            elementIndex = m_GlyphSearchList[i];
+
+                        SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex);
+
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                        {
+                            EditorGUI.BeginDisabledGroup(i != m_selectedElement);
+                            {
+                                EditorGUILayout.PropertyField(spriteGlyphProperty);
+                            }
+                            EditorGUI.EndDisabledGroup();
+                        }
+                        EditorGUILayout.EndVertical();
+
+                        // Define the end of the selection region of the element.
+                        Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                        // Check for Item selection
+                        Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                        if (DoSelectionCheck(selectionArea))
+                        {
+                            if (m_selectedElement == i)
+                            {
+                                m_selectedElement = -1;
+                            }
+                            else
+                            {
+                                m_selectedElement = i;
+                                GUIUtility.keyboardControl = 0;
+                            }
+                        }
+
+                        // Draw & Handle Section Area
+                        if (m_selectedElement == i)
+                        {
+                            // Draw selection highlight
+                            TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+
+                            // Draw options to MoveUp, MoveDown, Add or Remove Sprites
+                            Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f);
+                            controlRect.width /= 8;
+
+                            // Move sprite up.
+                            bool guiEnabled = GUI.enabled;
+                            if (i == 0) { GUI.enabled = false; }
+                            if (GUI.Button(controlRect, "Up"))
+                            {
+                                SwapGlyphElements(i, i - 1);
+                            }
+                            GUI.enabled = guiEnabled;
+
+                            // Move sprite down.
+                            controlRect.x += controlRect.width;
+                            if (i == arraySize - 1) { GUI.enabled = false; }
+                            if (GUI.Button(controlRect, "Down"))
+                            {
+                                SwapGlyphElements(i, i + 1);
+                            }
+                            GUI.enabled = guiEnabled;
+
+                            // Move sprite to new index
+                            controlRect.x += controlRect.width * 2;
+                            //if (i == arraySize - 1) { GUI.enabled = false; }
+                            m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex);
+                            controlRect.x -= controlRect.width;
+                            if (GUI.Button(controlRect, "Goto"))
+                            {
+                                MoveGlyphToIndex(i, m_moveToIndex);
+                            }
+                            //controlRect.x += controlRect.width;
+                            GUI.enabled = guiEnabled;
+
+                            // Add new Sprite
+                            controlRect.x += controlRect.width * 4;
+                            if (GUI.Button(controlRect, "+"))
+                            {
+                                m_SpriteGlyphTableProperty.arraySize += 1;
+
+                                int index = m_SpriteGlyphTableProperty.arraySize - 1;
+
+                                SerializedProperty newSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(index);
+
+                                // Copy properties of the selected element
+                                CopyGlyphSerializedProperty(m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex), ref newSpriteGlyphProperty);
+
+                                newSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue = index;
+
+                                serializedObject.ApplyModifiedProperties();
+
+                                m_IsGlyphSearchDirty = true;
+                                
+                                //m_SpriteAsset.UpdateLookupTables();
+                            }
+
+                            // Delete selected Sprite
+                            controlRect.x += controlRect.width;
+                            if (m_selectedElement == -1) GUI.enabled = false;
+                            if (GUI.Button(controlRect, "-"))
+                            {
+                                SerializedProperty selectedSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex);
+
+                                int selectedGlyphIndex = selectedSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue;
+
+                                m_SpriteGlyphTableProperty.DeleteArrayElementAtIndex(elementIndex);
+
+                                // Remove all Sprite Characters referencing this glyph.
+                                for (int j = 0; j < m_SpriteCharacterTableProperty.arraySize; j++)
+                                {
+                                    int glyphIndex = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(j).FindPropertyRelative("m_GlyphIndex").intValue;
+
+                                    if (glyphIndex == selectedGlyphIndex)
+                                    {
+                                        // Remove character
+                                        m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(j);
+                                    }
+                                }
+
+                                m_selectedElement = -1;
+                                serializedObject.ApplyModifiedProperties();
+
+                                m_IsGlyphSearchDirty = true;
+
+                                //m_SpriteAsset.UpdateLookupTables();
+
+                                return;
+                            }
+
+
+                        }
+                    }
+                }
+
+                DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage);
+
+                EditorGUIUtility.labelWidth = 40f;
+                EditorGUIUtility.fieldWidth = 20f;
+
+                GUILayout.Space(5f);
+
+                // GLOBAL TOOLS
+                #region Global Tools
+                GUI.enabled = true;
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                rect = EditorGUILayout.GetControlRect(false, 40);
+
+                float width = (rect.width - 75f) / 4;
+                EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel);
+
+
+                rect.x += 70;
+                bool old_ChangedState = GUI.changed;
+
+                GUI.changed = false;
+                m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset);
+
+                m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset);
+
+                m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance);
+                if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance);
+
+                m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale);
+                if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale);
+
+                EditorGUILayout.EndVertical();
+                #endregion
+
+                GUI.changed = old_ChangedState;
+
+            }
+            #endregion
+
+
+            if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty)
+            {
+                if (m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty || evt_cmd == k_UndoRedo)
+                    m_SpriteAsset.UpdateLookupTables();
+
+                TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, m_SpriteAsset);
+
+                isAssetDirty = false;
+                EditorUtility.SetDirty(target);
+            }
+
+            // Clear selection if mouse event was not consumed. 
+            GUI.enabled = true;
+            if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0)
+                m_selectedElement = -1;
+
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="arraySize"></param>
+        /// <param name="itemsPerPage"></param>
+        void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage)
+        {
+            Rect pagePos = EditorGUILayout.GetControlRect(false, 20);
+            pagePos.width /= 3;
+
+            int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward
+
+            // Previous Page
+            GUI.enabled = currentPage > 0;
+
+            if (GUI.Button(pagePos, "Previous Page"))
+            {
+                currentPage -= 1 * shiftMultiplier;
+                //m_isNewPage = true;
+            }
+
+            // Page Counter
+            GUI.enabled = true;
+            pagePos.x += pagePos.width;
+            int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f);
+            GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel);
+
+            // Next Page
+            pagePos.x += pagePos.width;
+            GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize;
+
+            if (GUI.Button(pagePos, "Next Page"))
+            {
+                currentPage += 1 * shiftMultiplier;
+                //m_isNewPage = true;
+            }
+
+            // Clamp page range
+            currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage);
+
+            GUI.enabled = true;
+        }
+
+
+        /// <summary>
+        /// Method to update the properties of all sprites
+        /// </summary>
+        /// <param name="property"></param>
+        /// <param name="value"></param>
+        void UpdateGlobalProperty(string property, float value)
+        {
+            int arraySize = m_SpriteGlyphTableProperty.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                // Get a reference to the sprite glyph.
+                SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i);
+
+                if (property == "m_Scale")
+                {
+                    spriteGlyphProperty.FindPropertyRelative(property).floatValue = value;
+                }
+                else
+                {
+                    SerializedProperty glyphMetricsProperty = spriteGlyphProperty.FindPropertyRelative("m_Metrics");
+                    glyphMetricsProperty.FindPropertyRelative(property).floatValue = value;
+                }
+            }
+
+            GUI.changed = false;
+        }
+
+        // Check if any of the Style elements were clicked on.
+        private bool DoSelectionCheck(Rect selectionArea)
+        {
+            Event currentEvent = Event.current;
+
+            switch (currentEvent.type)
+            {
+                case EventType.MouseDown:
+                    if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0)
+                    {
+                        currentEvent.Use();
+                        return true;
+                    }
+                    break;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Swap the sprite item at the currently selected array index to another index.
+        /// </summary>
+        /// <param name="selectedIndex">Selected index.</param>
+        /// <param name="newIndex">New index.</param>
+        void SwapCharacterElements(int selectedIndex, int newIndex)
+        {
+            m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex);
+            m_selectedElement = newIndex;
+            m_IsCharacterSearchDirty = true;
+            m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+        }
+
+        /// <summary>
+        /// Move Sprite Element at selected index to another index and reorder sprite list.
+        /// </summary>
+        /// <param name="selectedIndex"></param>
+        /// <param name="newIndex"></param>
+        void MoveCharacterToIndex(int selectedIndex, int newIndex)
+        {
+            int arraySize = m_SpriteCharacterTableProperty.arraySize;
+
+            if (newIndex >= arraySize)
+                newIndex = arraySize - 1;
+
+            m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex);
+
+            m_selectedElement = newIndex;
+            m_IsCharacterSearchDirty = true;
+            m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+
+            // TODO: Need to handle switching pages if the character or glyph is moved to a different page.
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="selectedIndex"></param>
+        /// <param name="newIndex"></param>
+        void SwapGlyphElements(int selectedIndex, int newIndex)
+        {
+            m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex);
+            m_selectedElement = newIndex;
+            m_IsGlyphSearchDirty = true;
+            m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+        }
+
+        /// <summary>
+        /// Move Sprite Element at selected index to another index and reorder sprite list.
+        /// </summary>
+        /// <param name="selectedIndex"></param>
+        /// <param name="newIndex"></param>
+        void MoveGlyphToIndex(int selectedIndex, int newIndex)
+        {
+            int arraySize = m_SpriteGlyphTableProperty.arraySize;
+
+            if (newIndex >= arraySize)
+                newIndex = arraySize - 1;
+
+            m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex);
+
+            m_selectedElement = newIndex;
+            m_IsGlyphSearchDirty = true;
+            m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+
+            // TODO: Need to handle switching pages if the character or glyph is moved to a different page.
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="source"></param>
+        /// <param name="target"></param>
+        void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target)
+        {
+            target.FindPropertyRelative("m_Name").stringValue = source.FindPropertyRelative("m_Name").stringValue;
+            target.FindPropertyRelative("m_HashCode").intValue = source.FindPropertyRelative("m_HashCode").intValue;
+            target.FindPropertyRelative("m_Unicode").intValue = source.FindPropertyRelative("m_Unicode").intValue;
+            target.FindPropertyRelative("m_GlyphIndex").intValue = source.FindPropertyRelative("m_GlyphIndex").intValue;
+            target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue;
+        }
+
+        void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph)
+        {
+            // TODO : Should make a generic function which copies each of the properties.
+
+            // Index
+            dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue;
+
+            // GlyphMetrics
+            SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics");
+            SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics");
+
+            dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue;
+            dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue;
+
+            // GlyphRect
+            SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect");
+            SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect");
+
+            dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue;
+            dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue;
+
+            dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue;
+            dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="searchPattern"></param>
+        /// <returns></returns>
+        void SearchCharacterTable(string searchPattern, ref List<int> searchResults)
+        {
+            if (searchResults == null) searchResults = new List<int>();
+            searchResults.Clear();
+
+            int arraySize = m_SpriteCharacterTableProperty.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                SerializedProperty sourceSprite = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(i);
+
+                // Check for potential match against array index
+                if (i.ToString().Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+
+                // Check for potential match against decimal id
+                int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue;
+                if (id.ToString().Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+
+                // Check for potential match against name
+                string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim();
+                if (name.Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+            }
+        }
+
+        void SearchGlyphTable(string searchPattern, ref List<int> searchResults)
+        {
+            if (searchResults == null) searchResults = new List<int>();
+            searchResults.Clear();
+
+            int arraySize = m_SpriteGlyphTableProperty.arraySize;
+
+            for (int i = 0; i < arraySize; i++)
+            {
+                SerializedProperty sourceSprite = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i);
+
+                // Check for potential match against array index
+                if (i.ToString().Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+
+                // Check for potential match against decimal id
+                int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue;
+                if (id.ToString().Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+
+                // Check for potential match against name
+                string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim();
+                if (name.Contains(searchPattern))
+                {
+                    searchResults.Add(i);
+                    continue;
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9fcede3317cbd9b427931f4a145d018bc2f7c067
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b09be1f217d34247af54863a2f5587e1
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dc4f09323f11c1e3ed1e5d307aacff71346404b4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs
@@ -0,0 +1,232 @@
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Collections.Generic;
+using TMPro.EditorUtilities;
+using TMPro.SpriteAssetUtilities;
+
+namespace TMPro
+{
+    public class TMP_SpriteAssetImporter : EditorWindow
+    {
+        // Create Sprite Asset Editor Window
+        [MenuItem("Window/TextMeshPro/Sprite Importer", false, 2026)]
+        public static void ShowFontAtlasCreatorWindow()
+        {
+            var window = GetWindow<TMP_SpriteAssetImporter>();
+            window.titleContent = new GUIContent("Sprite Importer");
+            window.Focus();
+        }
+
+        Texture2D m_SpriteAtlas;
+        SpriteAssetImportFormats m_SpriteDataFormat = SpriteAssetImportFormats.TexturePacker;
+        TextAsset m_JsonFile;
+
+        string m_CreationFeedback;
+
+        TMP_SpriteAsset m_SpriteAsset;
+        List<TMP_Sprite> m_SpriteInfoList = new List<TMP_Sprite>();
+
+
+        void OnEnable()
+        {
+            // Set Editor Window Size
+            SetEditorWindowSize();
+        }
+
+        public void OnGUI()
+        {
+            DrawEditorPanel();
+        }
+
+
+        void DrawEditorPanel()
+        {
+            // label
+            GUILayout.Label("Import Settings", EditorStyles.boldLabel);
+
+            EditorGUI.BeginChangeCheck();
+
+            // Sprite Texture Selection
+            m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset;
+
+            m_SpriteDataFormat = (SpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat);
+                    
+            // Sprite Texture Selection
+            m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D;
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                m_CreationFeedback = string.Empty;
+            }
+
+            GUILayout.Space(10);
+
+            GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker;
+
+            // Create Sprite Asset
+            if (GUILayout.Button("Create Sprite Asset"))
+            {
+                m_CreationFeedback = string.Empty;
+
+                // Read json data file
+                if (m_JsonFile != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker)
+                {
+                    TexturePacker.SpriteDataObject sprites = JsonUtility.FromJson<TexturePacker.SpriteDataObject>(m_JsonFile.text);
+
+                    if (sprites != null && sprites.frames != null && sprites.frames.Count > 0)
+                    {
+                        int spriteCount = sprites.frames.Count;
+
+                        // Update import results
+                        m_CreationFeedback = "<b>Import Results</b>\n--------------------\n";
+                        m_CreationFeedback += "<color=#C0ffff><b>" + spriteCount + "</b></color> Sprites were imported from file.";
+
+                        // Create sprite info list
+                        m_SpriteInfoList = CreateSpriteInfoList(sprites);
+                    }
+                }
+
+            }
+
+            GUI.enabled = true;
+
+            // Creation Feedback
+            GUILayout.Space(5);
+            GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60));
+            {
+                EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.label);
+            }
+            GUILayout.EndVertical();
+
+            GUILayout.Space(5);
+            GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteInfoList.Count > 0;    // Enable Save Button if font_Atlas is not Null.
+            if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null)
+            {
+                string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset");
+
+                if (filePath.Length == 0)
+                    return;
+
+                SaveSpriteAsset(filePath);
+            }
+            GUI.enabled = true;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        List<TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
+        {
+            List<TexturePacker.SpriteData> importedSprites = spriteDataObject.frames;
+
+            List<TMP_Sprite> spriteInfoList = new List<TMP_Sprite>();
+
+            for (int i = 0; i < importedSprites.Count; i++)
+            {
+                TMP_Sprite sprite = new TMP_Sprite();
+
+                sprite.id = i;
+                sprite.name = Path.GetFileNameWithoutExtension(importedSprites[i].filename) ?? "";
+                sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name);
+
+                // Attempt to extract Unicode value from name
+                int unicode;
+                int indexOfSeperator = sprite.name.IndexOf('-');
+                if (indexOfSeperator != -1)
+                    unicode = TMP_TextUtilities.StringHexToInt(sprite.name.Substring(indexOfSeperator + 1));
+                else
+                    unicode = TMP_TextUtilities.StringHexToInt(sprite.name);
+
+                sprite.unicode = unicode;
+
+                sprite.x = importedSprites[i].frame.x;
+                sprite.y = m_SpriteAtlas.height - (importedSprites[i].frame.y + importedSprites[i].frame.h);
+                sprite.width = importedSprites[i].frame.w;
+                sprite.height = importedSprites[i].frame.h;
+
+                //Calculate sprite pivot position
+                sprite.pivot = importedSprites[i].pivot;
+
+                // Properties the can be modified
+                sprite.xAdvance = sprite.width;
+                sprite.scale = 1.0f;
+                sprite.xOffset = 0 - (sprite.width * sprite.pivot.x);
+                sprite.yOffset = sprite.height - (sprite.height * sprite.pivot.y);
+
+                spriteInfoList.Add(sprite);
+            }
+
+            return spriteInfoList;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="filePath"></param>
+        void SaveSpriteAsset(string filePath)
+        {
+            filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath.
+
+            string dataPath = Application.dataPath;
+
+            if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1)
+            {
+                Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\"");
+                return;
+            }
+
+            string relativeAssetPath = filePath.Substring(dataPath.Length - 6);
+            string dirName = Path.GetDirectoryName(relativeAssetPath);
+            string fileName = Path.GetFileNameWithoutExtension(relativeAssetPath);
+            string pathNoExt = dirName + "/" + fileName;
+
+
+            // Create new Sprite Asset using this texture
+            m_SpriteAsset = CreateInstance<TMP_SpriteAsset>();
+            AssetDatabase.CreateAsset(m_SpriteAsset, pathNoExt + ".asset");
+
+            // Compute the hash code for the sprite asset.
+            m_SpriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(m_SpriteAsset.name);
+
+            // Assign new Sprite Sheet texture to the Sprite Asset.
+            m_SpriteAsset.spriteSheet = m_SpriteAtlas;
+            m_SpriteAsset.spriteInfoList = m_SpriteInfoList;
+
+            // Add new default material for sprite asset.
+            AddDefaultMaterial(m_SpriteAsset);
+        }
+
+
+        /// <summary>
+        /// Create and add new default material to sprite asset.
+        /// </summary>
+        /// <param name="spriteAsset"></param>
+        static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset)
+        {
+            Shader shader = Shader.Find("TextMeshPro/Sprite");
+            Material material = new Material(shader);
+            material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet);
+
+            spriteAsset.material = material;
+            material.hideFlags = HideFlags.HideInHierarchy;
+            AssetDatabase.AddObjectToAsset(material, spriteAsset);
+        }
+
+
+        /// <summary>
+        /// Limits the minimum size of the editor window.
+        /// </summary>
+        void SetEditorWindowSize()
+        {
+            EditorWindow editorWindow = this;
+
+            Vector2 currentWindowSize = editorWindow.minSize;
+
+            editorWindow.minSize = new Vector2(Mathf.Max(230, currentWindowSize.x), Mathf.Max(300, currentWindowSize.y));
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d60763a5477775138e93fca88b85068714a4cf35
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f1ea944dcf8849ebab391e461b99ccb7
+timeCreated: 1480023525
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5155e1a1305db424101b032fb8dcc5a00bfde643
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs
@@ -0,0 +1,329 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using System.Linq;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class TMP_SpriteAssetMenu
+    {
+        // Add a Context Menu to the Sprite Asset Editor Panel to Create and Add a Default Material.
+        [MenuItem("CONTEXT/TMP_SpriteAsset/Add Default Material", false, 2200)]
+        static void CopyTexture(MenuCommand command)
+        {
+            TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context;
+
+            // Make sure the sprite asset already contains a default material
+            if (spriteAsset != null && spriteAsset.material == null)
+            {
+                // Add new default material for sprite asset.
+                AddDefaultMaterial(spriteAsset);
+            }
+        }
+
+        // Add a Context Menu to the Sprite Asset Editor Panel to update existing sprite assets.
+        [MenuItem("CONTEXT/TMP_SpriteAsset/Update Sprite Asset", false, 2100)]
+        static void UpdateSpriteAsset(MenuCommand command)
+        {
+            TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context;
+
+            if (spriteAsset == null)
+                return;
+
+            // Get a list of all the sprites contained in the texture referenced by the sprite asset.
+            // This only works if the texture is set to sprite mode.
+            string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet);
+
+            if (string.IsNullOrEmpty(filePath))
+                return;
+
+            // Get all the Sprites sorted Left to Right / Top to Bottom
+            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();
+
+            List<TMP_SpriteGlyph> spriteGlyphTable = spriteAsset.spriteGlyphTable;
+
+            // Finding available glyph indexes to insert new glyphs into.
+            var tempGlyphTable = spriteGlyphTable.OrderBy(glyph => glyph.index).ToList();
+            List<uint> availableGlyphIndexes = new List<uint>();
+
+            int elementIndex = 0;
+            for (uint i = 0; i < tempGlyphTable[tempGlyphTable.Count - 1].index; i++)
+            {
+                uint currentElementIndex = tempGlyphTable[elementIndex].index;
+
+                if (i == currentElementIndex)
+                    elementIndex += 1;
+                else
+                    availableGlyphIndexes.Add(i);
+            }
+
+            // Iterate over each of the sprites in the texture to try to match them to existing sprites in the sprite asset.
+            for (int i = 0; i < sprites.Length; i++)
+            {
+                int id = sprites[i].GetInstanceID();
+
+                int glyphIndex = spriteGlyphTable.FindIndex(item => item.sprite.GetInstanceID() == id);
+
+                if (glyphIndex == -1)
+                {
+                    // Add new Sprite Glyph to the table
+                    Sprite sprite = sprites[i];
+
+                    TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph();
+
+                    // Get available glyph index
+                    if (availableGlyphIndexes.Count > 0)
+                    {
+                        spriteGlyph.index = availableGlyphIndexes[0];
+                        availableGlyphIndexes.RemoveAt(0);
+                    }
+                    else
+                        spriteGlyph.index = (uint)spriteGlyphTable.Count;
+
+                    spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width);
+                    spriteGlyph.glyphRect = new GlyphRect(sprite.rect);
+                    spriteGlyph.scale = 1.0f;
+                    spriteGlyph.sprite = sprite;
+
+                    spriteGlyphTable.Add(spriteGlyph);
+
+                    TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0, spriteGlyph);
+                    spriteCharacter.name = sprite.name;
+                    spriteCharacter.scale = 1.0f;
+
+                    spriteAsset.spriteCharacterTable.Add(spriteCharacter);
+                }
+                else
+                {
+                    // Look for changes in existing Sprite Glyph
+                    Sprite sprite = sprites[i];
+
+                    TMP_SpriteGlyph spriteGlyph = spriteGlyphTable[glyphIndex];
+
+                    // We only update changes to the sprite position / glyph rect.
+                    if (spriteGlyph.glyphRect.x != sprite.rect.x || spriteGlyph.glyphRect.y != sprite.rect.y || spriteGlyph.glyphRect.width != sprite.rect.width || spriteGlyph.glyphRect.height != sprite.rect.height)
+                        spriteGlyph.glyphRect = new GlyphRect(sprite.rect);
+                }
+            }
+
+            // Sort glyph table by glyph index
+            spriteAsset.SortGlyphTable();
+            spriteAsset.UpdateLookupTables();
+            TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, spriteAsset);
+        }
+
+
+        [MenuItem("Assets/Create/TextMeshPro/Sprite Asset", false, 110)]
+        public static void CreateSpriteAsset()
+        {
+            Object target = Selection.activeObject;
+
+            // Make sure the selection is a texture.
+            if (target == null || target.GetType() != typeof(Texture2D))
+            {
+                Debug.LogWarning("A texture which contains sprites must first be selected in order to create a TextMesh Pro Sprite Asset.");
+                return;
+            }
+
+            Texture2D sourceTex = target as Texture2D;
+
+            // Get the path to the selected texture.
+            string filePathWithName = AssetDatabase.GetAssetPath(sourceTex);
+            string fileNameWithExtension = Path.GetFileName(filePathWithName);
+            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePathWithName);
+            string filePath = filePathWithName.Replace(fileNameWithExtension, "");
+             
+            // Check if Sprite Asset already exists
+            TMP_SpriteAsset spriteAsset = AssetDatabase.LoadAssetAtPath(filePath + fileNameWithoutExtension + ".asset", typeof(TMP_SpriteAsset)) as TMP_SpriteAsset;
+            bool isNewAsset = spriteAsset == null ? true : false;
+
+            if (isNewAsset)
+            {
+                // Create new Sprite Asset using this texture
+                spriteAsset = ScriptableObject.CreateInstance<TMP_SpriteAsset>();
+                AssetDatabase.CreateAsset(spriteAsset, filePath + fileNameWithoutExtension + ".asset");
+
+                spriteAsset.version = "1.1.0";
+
+                // Compute the hash code for the sprite asset.
+                spriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteAsset.name);
+
+                // Assign new Sprite Sheet texture to the Sprite Asset.
+                spriteAsset.spriteSheet = sourceTex;
+
+                List<TMP_SpriteGlyph> spriteGlyphTable = new List<TMP_SpriteGlyph>();
+                List<TMP_SpriteCharacter> spriteCharacterTable = new List<TMP_SpriteCharacter>();
+
+                PopulateSpriteTables(sourceTex, ref spriteCharacterTable, ref spriteGlyphTable);
+
+                spriteAsset.spriteCharacterTable = spriteCharacterTable;
+                spriteAsset.spriteGlyphTable = spriteGlyphTable;
+
+                // Add new default material for sprite asset.
+                AddDefaultMaterial(spriteAsset);
+            }
+            //else
+            //{
+            //    spriteAsset.spriteInfoList = UpdateSpriteInfo(spriteAsset);
+
+            //    // Make sure the sprite asset already contains a default material
+            //    if (spriteAsset.material == null)
+            //    {
+            //        // Add new default material for sprite asset.
+            //        AddDefaultMaterial(spriteAsset);
+            //    }
+
+            //}
+
+            // Update Lookup tables.
+            spriteAsset.UpdateLookupTables();
+
+            // Get the Sprites contained in the Sprite Sheet
+            EditorUtility.SetDirty(spriteAsset);
+            
+            //spriteAsset.sprites = sprites;
+
+            // Set source texture back to Not Readable.
+            //texImporter.isReadable = false;
+
+
+            AssetDatabase.SaveAssets();
+
+            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(spriteAsset));  // Re-import font asset to get the new updated version.
+
+            //AssetDatabase.Refresh();
+        }
+
+
+        private static void PopulateSpriteTables(Texture source, ref List<TMP_SpriteCharacter> spriteCharacterTable, ref List<TMP_SpriteGlyph> spriteGlyphTable)
+        {
+            //Debug.Log("Creating new Sprite Asset.");
+            
+            string filePath = AssetDatabase.GetAssetPath(source);
+
+            // Get all the Sprites sorted by Index
+            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();
+            
+            for (int i = 0; i < sprites.Length; i++)
+            {
+                Sprite sprite = sprites[i];
+
+                TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph();
+                spriteGlyph.index = (uint)i;
+                spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width);
+                spriteGlyph.glyphRect = new GlyphRect(sprite.rect);
+                spriteGlyph.scale = 1.0f;
+                spriteGlyph.sprite = sprite;
+
+                spriteGlyphTable.Add(spriteGlyph);
+
+                TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0, spriteGlyph);
+                spriteCharacter.name = sprite.name;
+                spriteCharacter.scale = 1.0f;
+
+                spriteCharacterTable.Add(spriteCharacter);
+            }
+        }
+
+
+        /// <summary>
+        /// Create and add new default material to sprite asset.
+        /// </summary>
+        /// <param name="spriteAsset"></param>
+        private static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset)
+        {
+            Shader shader = Shader.Find("TextMeshPro/Sprite");
+            Material material = new Material(shader);
+            material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet);
+
+            spriteAsset.material = material;
+            material.hideFlags = HideFlags.HideInHierarchy;
+            AssetDatabase.AddObjectToAsset(material, spriteAsset);
+        }
+
+
+        // Update existing SpriteInfo
+        private static List<TMP_Sprite> UpdateSpriteInfo(TMP_SpriteAsset spriteAsset)
+        {
+            //Debug.Log("Updating Sprite Asset.");
+
+            string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet);
+
+            // Get all the Sprites sorted Left to Right / Top to Bottom
+            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();
+
+            for (int i = 0; i < sprites.Length; i++)
+            {
+                Sprite sprite = sprites[i];
+
+                // Check if the sprite is already contained in the SpriteInfoList
+                int index = -1;
+                if (spriteAsset.spriteInfoList.Count > i && spriteAsset.spriteInfoList[i].sprite != null)
+                    index = spriteAsset.spriteInfoList.FindIndex(item => item.sprite.GetInstanceID() == sprite.GetInstanceID());
+
+                // Use existing SpriteInfo if it already exists
+                TMP_Sprite spriteInfo = index == -1 ? new TMP_Sprite() : spriteAsset.spriteInfoList[index];
+
+                Rect spriteRect = sprite.rect;
+                spriteInfo.x = spriteRect.x;
+                spriteInfo.y = spriteRect.y;
+                spriteInfo.width = spriteRect.width;
+                spriteInfo.height = spriteRect.height;
+
+                // Get Sprite Pivot
+                Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2));
+
+                // The position of the pivot influences the Offset position.
+                spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height);
+
+                if (index == -1)
+                {
+                    // Find the next available index for this Sprite
+                    int[] ids = spriteAsset.spriteInfoList.Select(item => item.id).ToArray();
+
+                    int id = 0;
+                    for (int j = 0; j < ids.Length; j++ )
+                    {
+                        if (ids[0] != 0) break;
+ 
+                        if (j > 0 && (ids[j] - ids[j - 1]) > 1)
+                        {
+                            id = ids[j - 1] + 1;
+                            break;
+                        }
+
+                        id = j + 1;
+                    }
+
+                    spriteInfo.sprite = sprite;
+                    spriteInfo.name = sprite.name;
+                    spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name);
+                    spriteInfo.id = id;
+                    spriteInfo.xAdvance = spriteRect.width;
+                    spriteInfo.scale = 1.0f;
+
+                    spriteInfo.xOffset = spriteInfo.pivot.x;
+                    spriteInfo.yOffset = spriteInfo.pivot.y;
+
+                    spriteAsset.spriteInfoList.Add(spriteInfo);
+
+                    // Sort the Sprites by ID
+                    spriteAsset.spriteInfoList = spriteAsset.spriteInfoList.OrderBy(s => s.id).ToList();
+                }
+                else
+                {
+                    spriteAsset.spriteInfoList[index] = spriteInfo;
+                }
+            }
+
+            return spriteAsset.spriteInfoList;
+        }
+
+       
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..850ab1f227c4f7d505ba4719580a466d5328cad4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 1048a87135154606808bf2030da32d18
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..855fcd1e2a741042cc581ecb35b69bd0d172dcd7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs
@@ -0,0 +1,228 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_SpriteCharacter))]
+    public class TMP_SpriteCharacterPropertyDrawer : PropertyDrawer
+    {
+        int m_GlyphSelectedForEditing = -1;
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_SpriteName = property.FindPropertyRelative("m_Name");
+            SerializedProperty prop_SpriteNameHashCode = property.FindPropertyRelative("m_HashCode");
+            SerializedProperty prop_SpriteUnicode = property.FindPropertyRelative("m_Unicode");
+            SerializedProperty prop_SpriteGlyphIndex = property.FindPropertyRelative("m_GlyphIndex");
+            SerializedProperty prop_SpriteScale = property.FindPropertyRelative("m_Scale");
+
+
+            GUIStyle style = new GUIStyle(EditorStyles.label);
+            style.richText = true;
+
+            EditorGUIUtility.labelWidth = 40f;
+            EditorGUIUtility.fieldWidth = 50;
+
+            Rect rect = new Rect(position.x + 60, position.y, position.width, 49);
+
+            // Display non-editable fields
+            if (GUI.enabled == false)
+            {
+                int spriteCharacterIndex;
+
+                // Sprite Character Index
+                int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex);
+                EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: <color=#FFFF80>" + spriteCharacterIndex + "</color>"), style);
+
+                EditorGUI.LabelField(new Rect(rect.x + 75f, rect.y, 120f, 18), new GUIContent("Unicode: <color=#FFFF80>0x" + prop_SpriteUnicode.intValue.ToString("X") + "</color>"), style);
+                EditorGUI.LabelField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), new GUIContent("Name: <color=#FFFF80>" + prop_SpriteName.stringValue + "</color>"), style);
+
+                EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: <color=#FFFF80>" + prop_SpriteGlyphIndex.intValue + "</color>"), style);
+
+                // Draw Sprite Glyph (if exists)
+                DrawSpriteGlyph(position, property);
+
+                EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: <color=#FFFF80>" + prop_SpriteScale.floatValue + "</color>"), style);
+            }
+            else // Display editable fields
+            {
+                // Get a reference to the underlying Sprite Asset
+                TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset;
+                int spriteCharacterIndex;
+
+                // Sprite Character Index
+                int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex);
+
+                EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: <color=#FFFF80>" + spriteCharacterIndex + "</color>"), style);
+
+                EditorGUIUtility.labelWidth = 55f;
+                GUI.SetNextControlName("Unicode Input");
+                EditorGUI.BeginChangeCheck();
+                string unicode = EditorGUI.DelayedTextField(new Rect(rect.x + 75f, rect.y, 120, 18), "Unicode:", prop_SpriteUnicode.intValue.ToString("X"));
+
+                if (GUI.GetNameOfFocusedControl() == "Unicode Input")
+                {
+                    //Filter out unwanted characters.
+                    char chr = Event.current.character;
+                    if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F'))
+                    {
+                        Event.current.character = '\0';
+                    }
+                }
+
+                if (EditorGUI.EndChangeCheck())
+                {
+                    // Update Unicode value
+                    prop_SpriteUnicode.intValue = TMP_TextUtilities.StringHexToInt(unicode);
+                    spriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+                }
+
+                EditorGUIUtility.labelWidth = 41f;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.DelayedTextField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), prop_SpriteName, new GUIContent("Name:"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    // Recompute hashCode for new name
+                    prop_SpriteNameHashCode.intValue = TMP_TextUtilities.GetSimpleHashCode(prop_SpriteName.stringValue);
+                    spriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+                }
+
+                EditorGUIUtility.labelWidth = 59f;
+                EditorGUI.BeginChangeCheck();
+                EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_SpriteGlyphIndex, new GUIContent("Glyph ID:"));
+                if (EditorGUI.EndChangeCheck())
+                {
+                    spriteAsset.m_IsSpriteAssetLookupTablesDirty = true;
+                }
+
+                // Draw Sprite Glyph (if exists)
+                DrawSpriteGlyph(position, property);
+
+                int glyphIndex = prop_SpriteGlyphIndex.intValue;
+
+                // Reset glyph selection if new character has been selected.
+                if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex)
+                    m_GlyphSelectedForEditing = -1;
+
+                // Display button to edit the glyph data.
+                if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph")))
+                {
+                    if (m_GlyphSelectedForEditing == -1)
+                        m_GlyphSelectedForEditing = glyphIndex;
+                    else
+                        m_GlyphSelectedForEditing = -1;
+
+                    // Button clicks should not result in potential change.
+                    GUI.changed = false;
+                }
+
+                // Show the glyph property drawer if selected
+                if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled)
+                {
+                    if (spriteAsset != null)
+                    {
+                        // Lookup glyph and draw glyph (if available)
+                        int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex);
+
+                        if (elementIndex != -1)
+                        {
+                            // Get a reference to the Sprite Glyph Table
+                            SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable");
+
+                            SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex);
+                            SerializedProperty prop_GlyphMetrics = prop_SpriteGlyph.FindPropertyRelative("m_Metrics");
+                            SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect");
+
+                            Rect newRect = EditorGUILayout.GetControlRect(false, 115);
+                            EditorGUI.DrawRect(new Rect(newRect.x + 62, newRect.y - 20, newRect.width - 62, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f));
+                            EditorGUI.DrawRect(new Rect(newRect.x + 63, newRect.y - 19, newRect.width - 64, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f));
+
+                            // Display GlyphRect
+                            newRect.x += 65;
+                            newRect.y -= 18;
+                            newRect.width += 5;
+                            EditorGUI.PropertyField(newRect, prop_GlyphRect);
+
+                            // Display GlyphMetrics
+                            newRect.y += 45;
+                            EditorGUI.PropertyField(newRect, prop_GlyphMetrics);
+
+                            rect.y += 120;
+                        }
+                    }
+                }
+
+                EditorGUIUtility.labelWidth = 39f;
+                EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_SpriteScale, new GUIContent("Scale:"));
+            }
+        }
+
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 58;
+        }
+
+
+        void DrawSpriteGlyph(Rect position, SerializedProperty property)
+        {
+            // Get a reference to the sprite glyph table
+            TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset;
+
+            if (spriteAsset == null)
+                return;
+
+            int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue;
+
+            // Lookup glyph and draw glyph (if available)
+            int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex);
+
+            if (elementIndex != -1)
+            {
+                // Get a reference to the Sprite Glyph Table
+                SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable");
+                SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex);
+                SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect");
+
+                // Get a reference to the sprite texture
+                Texture tex = spriteAsset.spriteSheet;
+
+                // Return if we don't have a texture assigned to the sprite asset.
+                if (tex == null)
+                {
+                    Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + spriteAsset.name + "] Sprite Asset.", spriteAsset);
+                    return;
+                }
+
+                Vector2 spriteTexPosition = new Vector2(position.x, position.y);
+                Vector2 spriteSize = new Vector2(48, 48);
+                Vector2 alignmentOffset = new Vector2((58 - spriteSize.x) / 2, (58 - spriteSize.y) / 2);
+
+                float x = prop_GlyphRect.FindPropertyRelative("m_X").intValue;
+                float y = prop_GlyphRect.FindPropertyRelative("m_Y").intValue;
+                float spriteWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue;
+                float spriteHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue;
+
+                if (spriteWidth >= spriteHeight)
+                {
+                    spriteSize.y = spriteHeight * spriteSize.x / spriteWidth;
+                    spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2;
+                }
+                else
+                {
+                    spriteSize.x = spriteWidth * spriteSize.y / spriteHeight;
+                    spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2;
+                }
+
+                // Compute the normalized texture coordinates
+                Rect texCoords = new Rect(x / tex.width, y / tex.height, spriteWidth / tex.width, spriteHeight / tex.height);
+                GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + alignmentOffset.x, spriteTexPosition.y + alignmentOffset.y, spriteSize.x, spriteSize.y), tex, texCoords, true);
+            }
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0733749d9b7fe344b4053ca58fdee482e8eb3b4b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 37cff9f5a86ae494c8cb04423580480d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..db9c70ede442d3c874598a5880363c50f4d0f511
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs
@@ -0,0 +1,94 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_SpriteGlyph))]
+    public class TMP_SpriteGlyphPropertyDrawer : PropertyDrawer
+    {
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index");
+            SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics");
+            SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect");
+            SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale");
+            SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex");
+
+            GUIStyle style = new GUIStyle(EditorStyles.label);
+            style.richText = true;
+
+            Rect rect = new Rect(position.x + 70, position.y, position.width, 49);
+
+            // Draw GlyphRect
+            EditorGUI.PropertyField(rect, prop_GlyphRect);
+
+            // Draw GlyphMetrics
+            rect.y += 45;
+            EditorGUI.PropertyField(rect, prop_GlyphMetrics);
+
+            EditorGUIUtility.labelWidth = 40f;
+            EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:"));
+
+            EditorGUIUtility.labelWidth = 74f;
+            EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:"));
+
+            DrawGlyph(position, property);
+
+            int spriteCharacterIndex;
+
+            int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex);
+            EditorGUI.LabelField(new Rect(position.x, position.y + 5, 64f, 18f), new GUIContent("#" + spriteCharacterIndex), style);
+
+            float labelWidthID = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x;
+            EditorGUI.LabelField(new Rect(position.x + (64 - labelWidthID) / 2, position.y + 110, 64f, 18f), new GUIContent("ID: <color=#FFFF80>" + prop_GlyphIndex.intValue + "</color>"), style);
+        }
+
+        void DrawGlyph(Rect position, SerializedProperty property)
+        {
+            // Get a reference to the sprite texture
+            Texture tex = (property.serializedObject.targetObject as TMP_SpriteAsset).spriteSheet;
+
+            // Return if we don't have a texture assigned to the sprite asset.
+            if (tex == null)
+            {
+                Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + property.serializedObject.targetObject.name + "] Sprite Asset.", property.serializedObject.targetObject);
+                return;
+            }
+
+            Vector2 spriteTexPosition = new Vector2(position.x, position.y);
+            Vector2 spriteSize = new Vector2(65, 65);
+
+            SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect");
+
+            int spriteImageX = prop_GlyphRect.FindPropertyRelative("m_X").intValue;
+            int spriteImageY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue;
+            int spriteImageWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue;
+            int spriteImageHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue;
+
+            if (spriteImageWidth >= spriteImageHeight)
+            {
+                spriteSize.y = spriteImageHeight * spriteSize.x / spriteImageWidth;
+                spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2;
+            }
+            else
+            {
+                spriteSize.x = spriteImageWidth * spriteSize.y / spriteImageHeight;
+                spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2;
+            }
+
+            // Compute the normalized texture coordinates
+            Rect texCoords = new Rect((float)spriteImageX / tex.width, (float)spriteImageY / tex.height, (float)spriteImageWidth / tex.width, (float)spriteImageHeight / tex.height);
+            GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + 5, spriteTexPosition.y + 32f, spriteSize.x, spriteSize.y), tex, texCoords, true);
+        }
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return 130f;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0414562606aef434c980e8da06fa508892199369
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 056819c66570ca54cadb72330a354050
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0ae9c386d2121ef7f3044c7bf961b586f03c1c2a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs
@@ -0,0 +1,49 @@
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class TMP_StyleAssetMenu
+    {
+
+        [MenuItem("Assets/Create/TextMeshPro/Style Sheet", false, 120)]
+        public static void CreateTextMeshProObjectPerform()
+        {
+            string filePath;
+            if (Selection.assetGUIDs.Length == 0)
+            {
+                // No asset selected.
+                filePath = "Assets";
+            }
+            else
+            {
+                // Get the path of the selected folder or asset.
+                filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]);
+
+                // Get the file extension of the selected asset as it might need to be removed.
+                string fileExtension = Path.GetExtension(filePath);
+                if (fileExtension != "")
+                {
+                    filePath = Path.GetDirectoryName(filePath);
+                }
+            }
+
+
+            string filePathWithName = AssetDatabase.GenerateUniqueAssetPath(filePath + "/TMP StyleSheet.asset");
+
+            //// Create new Style Sheet Asset.
+            TMP_StyleSheet styleSheet = ScriptableObject.CreateInstance<TMP_StyleSheet>();
+
+            AssetDatabase.CreateAsset(styleSheet, filePathWithName);
+
+            EditorUtility.SetDirty(styleSheet);
+
+            AssetDatabase.SaveAssets();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cb44dc277cf599a6fa95c4078e127b335ac88aa7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 23a562f2cac6401f9f91251c68a1a794
+timeCreated: 1432690168
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2e7f6de8e0f85803946bc7af0e011ae73253fee2
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs
@@ -0,0 +1,278 @@
+using UnityEngine;
+using UnityEditor;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TMP_Style))]
+    public class StyleDrawer : PropertyDrawer
+    {
+        public static readonly float height = 95f;
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return height;
+        }
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            SerializedProperty nameProperty = property.FindPropertyRelative("m_Name");
+            SerializedProperty hashCodeProperty = property.FindPropertyRelative("m_HashCode");
+            SerializedProperty openingDefinitionProperty = property.FindPropertyRelative("m_OpeningDefinition");
+            SerializedProperty closingDefinitionProperty = property.FindPropertyRelative("m_ClosingDefinition");
+            SerializedProperty openingDefinitionArray = property.FindPropertyRelative("m_OpeningTagArray");
+            SerializedProperty closingDefinitionArray = property.FindPropertyRelative("m_ClosingTagArray");
+
+
+            EditorGUIUtility.labelWidth = 90;
+            position.height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
+            float labelHeight = position.height + 2f;
+
+            EditorGUI.BeginChangeCheck();
+            Rect rect0 = new Rect(position.x, position.y, (position.width) / 2 + 5, position.height);
+            EditorGUI.PropertyField(rect0, nameProperty);
+            if (EditorGUI.EndChangeCheck())
+            {
+                // Recompute HashCode if name has changed.
+                hashCodeProperty.intValue = TMP_TextUtilities.GetSimpleHashCode(nameProperty.stringValue);
+
+                property.serializedObject.ApplyModifiedProperties();
+                // Dictionary needs to be updated since HashCode has changed.
+                TMP_StyleSheet.RefreshStyles();
+            }
+
+            // HashCode
+            Rect rect1 = new Rect(rect0.x + rect0.width + 5, position.y, 65, position.height);
+            GUI.Label(rect1, "HashCode");
+            GUI.enabled = false;
+            rect1.x += 65;
+            rect1.width = position.width / 2 - 75;
+            EditorGUI.PropertyField(rect1, hashCodeProperty, GUIContent.none);
+            
+            GUI.enabled = true;
+
+            // Text Tags
+            EditorGUI.BeginChangeCheck();
+            
+            // Opening Tags
+            position.y += labelHeight;
+            GUI.Label(position, "Opening Tags");
+            Rect textRect1 = new Rect(108, position.y, position.width - 86, 35);
+            openingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect1, openingDefinitionProperty.stringValue);
+            if (EditorGUI.EndChangeCheck())
+            {
+                // If any properties have changed, we need to update the Opening and Closing Arrays.
+                int size = openingDefinitionProperty.stringValue.Length;
+
+                // Adjust array size to match new string length.
+                if (openingDefinitionArray.arraySize != size) openingDefinitionArray.arraySize = size;
+
+                for (int i = 0; i < size; i++)
+                {
+                    SerializedProperty element = openingDefinitionArray.GetArrayElementAtIndex(i);
+                    element.intValue = openingDefinitionProperty.stringValue[i];
+                }
+            }
+
+            EditorGUI.BeginChangeCheck();
+
+            // Closing Tags
+            position.y += 38;
+            GUI.Label(position, "Closing Tags");
+            Rect textRect2 = new Rect(108, position.y, position.width - 86, 35);
+            closingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect2, closingDefinitionProperty.stringValue);
+
+            if (EditorGUI.EndChangeCheck())
+            {
+                // If any properties have changed, we need to update the Opening and Closing Arrays.
+                int size = closingDefinitionProperty.stringValue.Length;
+                
+                // Adjust array size to match new string length.
+                if (closingDefinitionArray.arraySize != size) closingDefinitionArray.arraySize = size;
+                
+                for (int i = 0; i < size; i++)
+                {
+                    SerializedProperty element = closingDefinitionArray.GetArrayElementAtIndex(i);
+                    element.intValue = closingDefinitionProperty.stringValue[i];
+                }            
+            }
+
+        }
+    }
+
+
+
+    [CustomEditor(typeof(TMP_StyleSheet)), CanEditMultipleObjects]
+    public class TMP_StyleEditor : Editor
+    {
+
+        SerializedProperty m_StyleListProp;
+
+        int m_SelectedElement = -1;
+
+        //private Event m_CurrentEvent;
+        int m_Page;
+
+
+       
+        void OnEnable()
+        {
+            m_StyleListProp = serializedObject.FindProperty("m_StyleList");
+        }
+
+
+        public override void OnInspectorGUI()
+        {
+            Event currentEvent = Event.current;
+
+            serializedObject.Update();
+
+            int arraySize = m_StyleListProp.arraySize;
+            int itemsPerPage = (Screen.height - 178) / 111;
+
+            if (arraySize > 0)
+            {
+                // Display each Style entry using the StyleDrawer PropertyDrawer.
+                for (int i = itemsPerPage * m_Page; i < arraySize && i < itemsPerPage * (m_Page + 1); i++)
+                {
+
+                    // Define the start of the selection region of the element.
+                    Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                    EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+   
+                    SerializedProperty spriteInfo = m_StyleListProp.GetArrayElementAtIndex(i);
+                    EditorGUI.BeginChangeCheck();
+                    EditorGUILayout.PropertyField(spriteInfo);
+                    EditorGUILayout.EndVertical();
+                    if (EditorGUI.EndChangeCheck())
+                    {
+                        //
+                    }
+      
+                    // Define the end of the selection region of the element.
+                    Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true));
+
+                    // Check for Item selection
+                    Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y);
+                    if (DoSelectionCheck(selectionArea))
+                    {
+                        if (m_SelectedElement == i)
+                        {
+                            m_SelectedElement = -1;
+                        }
+                        else
+                        {
+                            m_SelectedElement = i;
+                            GUIUtility.keyboardControl = 0;
+                        }
+                    }
+                    
+                    // Handle Selection Highlighting
+                    if (m_SelectedElement == i)
+                    {
+                        TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255));
+                    }
+                }
+            }
+
+            int shiftMultiplier = currentEvent.shift ? 10 : 1; // Page + Shift goes 10 page forward
+
+            GUILayout.Space(-3f);
+
+            Rect pagePos = EditorGUILayout.GetControlRect(false, 20);
+            pagePos.width /= 6;
+
+            // Return if we can't display any items.
+            if (itemsPerPage == 0) return;
+
+
+            // Add new style.
+            pagePos.x += pagePos.width * 4;
+            if (GUI.Button(pagePos, "+"))
+            {
+                m_StyleListProp.arraySize += 1;
+                serializedObject.ApplyModifiedProperties();
+                TMP_StyleSheet.RefreshStyles();
+            }
+
+
+            // Delete selected style.
+            pagePos.x += pagePos.width;
+            if (m_SelectedElement == -1) GUI.enabled = false;
+            if (GUI.Button(pagePos, "-"))
+            {
+                if (m_SelectedElement != -1)
+                    m_StyleListProp.DeleteArrayElementAtIndex(m_SelectedElement);
+
+                m_SelectedElement = -1;
+                serializedObject.ApplyModifiedProperties();
+                TMP_StyleSheet.RefreshStyles();
+            }
+
+            GUILayout.Space(5f);
+
+            pagePos = EditorGUILayout.GetControlRect(false, 20);
+            pagePos.width /= 3;
+
+           
+            // Previous Page
+            if (m_Page > 0) GUI.enabled = true;
+            else GUI.enabled = false;
+
+            if (GUI.Button(pagePos, "Previous"))
+                m_Page -= 1 * shiftMultiplier;
+
+            // PAGE COUNTER
+            GUI.enabled = true;
+            pagePos.x += pagePos.width;
+            int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f);
+            GUI.Label(pagePos, "Page " + (m_Page + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel);
+
+            // Next Page
+            pagePos.x += pagePos.width;
+            if (itemsPerPage * (m_Page + 1) < arraySize) GUI.enabled = true;
+            else GUI.enabled = false;
+
+            if (GUI.Button(pagePos, "Next"))
+                m_Page += 1 * shiftMultiplier;
+
+            // Clamp page range
+            m_Page = Mathf.Clamp(m_Page, 0, arraySize / itemsPerPage);
+
+
+            if (serializedObject.ApplyModifiedProperties())
+                TMPro_EventManager.ON_TEXT_STYLE_PROPERTY_CHANGED(true);
+
+            // Clear selection if mouse event was not consumed. 
+            GUI.enabled = true;
+            if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0)
+                m_SelectedElement = -1;
+            
+
+        }
+
+
+        // Check if any of the Style elements were clicked on.
+        static bool DoSelectionCheck(Rect selectionArea)
+        {
+            Event currentEvent = Event.current;
+
+            switch (currentEvent.type)
+            {
+                case EventType.MouseDown:
+                    if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0)
+                    {
+                        currentEvent.Use();
+                        return true;
+                    }
+                    break;
+            }
+
+            return false;
+        }
+
+    }
+
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a3bff26f94e3e45acf47c64cbe562dec5019d0ef
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 34e2c9b9d9e44953933afe37461f44e6
+timeCreated: 1432683777
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1cbea769f6811a7c231dd2c1900104b01f7f6da3
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs
@@ -0,0 +1,98 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TMP_SubMeshUI)), CanEditMultipleObjects]
+    public class TMP_SubMeshUI_Editor : Editor
+    {
+        private struct m_foldout
+        { // Track Inspector foldout panel states, globally.
+            //public static bool textInput = true;
+            public static bool fontSettings = true;
+            //public static bool extraSettings = false;
+            //public static bool shadowSetting = false;
+            //public static bool materialEditor = true;
+        }
+
+        private SerializedProperty fontAsset_prop;
+        private SerializedProperty spriteAsset_prop;
+
+        private TMP_SubMeshUI m_SubMeshComponent;
+
+        private CanvasRenderer m_canvasRenderer;
+        private Editor m_materialEditor;
+        private Material m_targetMaterial;
+
+
+        public void OnEnable()
+        {
+            fontAsset_prop = serializedObject.FindProperty("m_fontAsset");
+            spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset");
+
+            m_SubMeshComponent = target as TMP_SubMeshUI;
+            //m_rectTransform = m_SubMeshComponent.rectTransform;
+            m_canvasRenderer = m_SubMeshComponent.canvasRenderer;
+
+
+            // Create new Material Editor if one does not exists
+            if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null)
+            {
+                m_materialEditor = Editor.CreateEditor(m_canvasRenderer.GetMaterial());
+                m_targetMaterial = m_canvasRenderer.GetMaterial();
+            }
+        }
+
+
+        public void OnDisable()
+        {
+            // Destroy material editor if one exists
+            if (m_materialEditor != null)
+            {
+                //Debug.Log("Destroying Inline Material Editor.");
+                DestroyImmediate(m_materialEditor);
+            }
+        }
+
+
+
+        public override void OnInspectorGUI()
+        {
+            GUI.enabled = false;
+            EditorGUILayout.PropertyField(fontAsset_prop);
+            EditorGUILayout.PropertyField(spriteAsset_prop);
+            GUI.enabled = true;
+
+            EditorGUILayout.Space();
+
+            // If a Custom Material Editor exists, we use it.
+            if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null)
+            {
+                Material mat = m_canvasRenderer.GetMaterial();
+
+                //Debug.Log(mat + "  " + m_targetMaterial);
+
+                if (mat != m_targetMaterial)
+                {
+                    // Destroy previous Material Instance
+                    //Debug.Log("New Material has been assigned.");
+                    m_targetMaterial = mat;
+                    DestroyImmediate(m_materialEditor);
+                }
+
+
+                if (m_materialEditor == null)
+                {
+                    m_materialEditor = Editor.CreateEditor(mat);
+                }
+
+                m_materialEditor.DrawHeader();
+
+
+                m_materialEditor.OnInspectorGUI();
+            }
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b82410e56bd7b536dbd99b78c11f8350ed3f216d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6b01141ed8f74d198965c86f25eb7040
+timeCreated: 1452757501
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b5a3cc7cf7353bdedc5b6e3537d799bd970dbf75
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs
@@ -0,0 +1,76 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TMP_SubMesh)), CanEditMultipleObjects]
+    public class TMP_SubMesh_Editor : Editor
+    {
+        private struct m_foldout
+        { // Track Inspector foldout panel states, globally.
+            //public static bool textInput = true;
+            public static bool fontSettings = true;
+            //public static bool extraSettings = false;
+            //public static bool shadowSetting = false;
+            //public static bool materialEditor = true;
+        }
+        
+        private SerializedProperty fontAsset_prop;
+        private SerializedProperty spriteAsset_prop;
+
+        private TMP_SubMesh m_SubMeshComponent;
+        private Renderer m_Renderer;
+
+        public void OnEnable()
+        {
+            fontAsset_prop = serializedObject.FindProperty("m_fontAsset");
+            spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset");
+
+            m_SubMeshComponent = target as TMP_SubMesh;
+
+            m_Renderer = m_SubMeshComponent.renderer;
+        }
+
+
+        public override void OnInspectorGUI()
+        {
+            EditorGUI.indentLevel = 0;
+            
+            GUI.enabled = false;
+            EditorGUILayout.PropertyField(fontAsset_prop);
+            EditorGUILayout.PropertyField(spriteAsset_prop);
+            GUI.enabled = true;
+            
+            EditorGUI.BeginChangeCheck();
+
+            // SORTING LAYERS
+            var sortingLayerNames = SortingLayerHelper.sortingLayerNames;
+
+            // Look up the layer name using the current layer ID
+            string oldName = SortingLayerHelper.GetSortingLayerNameFromID(m_Renderer.sortingLayerID);
+
+            // Use the name to look up our array index into the names list
+            int oldLayerIndex = System.Array.IndexOf(sortingLayerNames, oldName);
+
+            // Show the pop-up for the names
+            int newLayerIndex = EditorGUILayout.Popup("Sorting Layer", oldLayerIndex, sortingLayerNames);
+
+            // If the index changes, look up the ID for the new index to store as the new ID
+            if (newLayerIndex != oldLayerIndex)
+            {
+                //Undo.RecordObject(renderer, "Edit Sorting Layer");
+                m_Renderer.sortingLayerID = SortingLayerHelper.GetSortingLayerIDForIndex(newLayerIndex);
+                //EditorUtility.SetDirty(renderer);
+            }
+
+            // Expose the manual sorting order
+            int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", m_Renderer.sortingOrder);
+            if (newSortingLayerOrder != m_Renderer.sortingOrder)
+            {
+                //Undo.RecordObject(renderer, "Edit Sorting Order");
+                m_Renderer.sortingOrder = newSortingLayerOrder;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fd4713b34da0ca727a795666279730fa66da62d5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: dd2fe74169b54bf58fca17288513ef38
+timeCreated: 1456189048
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dbb271c534a444d990fda99ffe569b236299f6da
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs
@@ -0,0 +1,119 @@
+using UnityEngine;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomPropertyDrawer(typeof(TextAlignmentOptions))]
+    public class TMP_TextAlignmentDrawer : PropertyDrawer
+    {
+        const int k_AlignmentButtonWidth = 24;
+        const int k_AlignmentButtonHeight = 20;
+        const int k_WideViewWidth = 504;
+        const int k_ControlsSpacing = 6;
+        const int k_GroupWidth = k_AlignmentButtonWidth * 6;
+        static readonly int k_TextAlignmentHash = "DoTextAligmentControl".GetHashCode();
+
+        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
+        {
+            return EditorGUIUtility.currentViewWidth > k_WideViewWidth ? k_AlignmentButtonHeight : k_AlignmentButtonHeight * 2 + 3;
+        }
+
+        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
+        {
+            var id = GUIUtility.GetControlID(k_TextAlignmentHash, FocusType.Keyboard, position);
+            
+            EditorGUI.BeginProperty(position, label, property);
+            {
+                var controlArea = EditorGUI.PrefixLabel(position, id, label);
+                
+                var horizontalAligment = new Rect(controlArea.x, controlArea.y, k_GroupWidth, k_AlignmentButtonHeight);
+                var verticalAligment = new Rect(!(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.x : horizontalAligment.xMax + k_ControlsSpacing, !(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.y + k_AlignmentButtonHeight + 3 : controlArea.y, k_GroupWidth, k_AlignmentButtonHeight);
+
+                EditorGUI.BeginChangeCheck();
+
+                var selectedHorizontal = DoHorizontalAligmentControl(horizontalAligment, property);
+                var selectedVertical = DoVerticalAligmentControl(verticalAligment, property);
+
+                if (EditorGUI.EndChangeCheck())
+                {
+                    var value = (0x1 << selectedHorizontal) | (0x100 << selectedVertical);
+                    property.intValue = value;
+                }
+            }
+            EditorGUI.EndProperty();
+        }
+
+        static int DoHorizontalAligmentControl(Rect position, SerializedProperty alignment)
+        {
+            var selected = TMP_EditorUtility.GetHorizontalAlignmentGridValue(alignment.intValue);
+
+            var values = new bool[6];
+
+            values[selected] = true;
+
+            if (alignment.hasMultipleDifferentValues)
+            {
+                foreach (var obj in alignment.serializedObject.targetObjects)
+                {
+                    var text = obj as TMP_Text;
+                    if (text != null)
+                    {
+                        values[TMP_EditorUtility.GetHorizontalAlignmentGridValue((int)text.alignment)] = true;
+                    }
+                }
+            }
+
+            position.width = k_AlignmentButtonWidth;
+
+            for (var i = 0; i < values.Length; i++)
+            {
+                var oldValue = values[i];
+                var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentA[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid));
+                if (newValue != oldValue)
+                {
+                    selected = i;
+                }
+                position.x += position.width;
+            }
+
+            return selected;
+        }
+
+        static int DoVerticalAligmentControl(Rect position, SerializedProperty alignment)
+        {
+            var selected = TMP_EditorUtility.GetVerticalAlignmentGridValue(alignment.intValue);
+
+            var values = new bool[6];
+
+            values[selected] = true;
+
+            if (alignment.hasMultipleDifferentValues)
+            {
+                foreach (var obj in alignment.serializedObject.targetObjects)
+                {
+                    var text = obj as TMP_Text;
+                    if (text != null)
+                    {
+                        values[TMP_EditorUtility.GetVerticalAlignmentGridValue((int)text.alignment)] = true;
+                    }
+                }
+            }
+
+            position.width = k_AlignmentButtonWidth;
+
+            for (var i = 0; i < values.Length; i++)
+            {
+                var oldValue = values[i];
+                var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentB[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid));
+                if (newValue != oldValue)
+                {
+                    selected = i;
+                }
+                position.x += position.width;
+            }
+
+            return selected;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a68a27392770e2e9864c00257caa1b565f62a856
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c55a64c7570474f47a94abe39ebfef04
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0a94a99781ff643bab660114e85425cb09662d2d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs
@@ -0,0 +1,134 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class TMP_UIStyleManager
+    {
+        public static GUIStyle label;
+        public static GUIStyle textAreaBoxWindow;
+        public static GUIStyle boldFoldout;
+        public static GUIStyle panelTitle;
+        public static GUIStyle sectionHeader;
+        public static GUIStyle centeredLabel;
+        public static GUIStyle rightLabel;
+        public static GUIStyle wrappingTextArea;
+
+        public static GUIStyle alignmentButtonLeft;
+        public static GUIStyle alignmentButtonMid;
+        public static GUIStyle alignmentButtonRight;
+
+        // Alignment Button Textures
+        public static Texture2D alignLeft;
+        public static Texture2D alignCenter;
+        public static Texture2D alignRight;
+        public static Texture2D alignJustified;
+        public static Texture2D alignFlush;
+        public static Texture2D alignGeoCenter;
+        public static Texture2D alignTop;
+        public static Texture2D alignMiddle;
+        public static Texture2D alignBottom;
+        public static Texture2D alignBaseline;
+        public static Texture2D alignMidline;
+        public static Texture2D alignCapline;
+        public static Texture2D sectionHeaderTexture;
+        
+        public static GUIContent[] alignContentA;
+        public static GUIContent[] alignContentB;
+
+        static TMP_UIStyleManager()
+        {
+            // Find to location of the TextMesh Pro Asset Folder (as users may have moved it)
+            var tmproAssetFolderPath = TMP_EditorUtility.packageRelativePath;
+
+            if (EditorGUIUtility.isProSkin)
+            {
+                alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft.psd", typeof(Texture2D)) as Texture2D;
+                alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter.psd", typeof(Texture2D)) as Texture2D;
+                alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight.psd", typeof(Texture2D)) as Texture2D;
+                alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified.psd", typeof(Texture2D)) as Texture2D;
+                alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush.psd", typeof(Texture2D)) as Texture2D;
+                alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo.psd", typeof(Texture2D)) as Texture2D;
+                alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop.psd", typeof(Texture2D)) as Texture2D;
+                alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle.psd", typeof(Texture2D)) as Texture2D;
+                alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom.psd", typeof(Texture2D)) as Texture2D;
+                alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine.psd", typeof(Texture2D)) as Texture2D;
+                alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine.psd", typeof(Texture2D)) as Texture2D;
+                alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine.psd", typeof(Texture2D)) as Texture2D;
+                sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Dark.psd", typeof(Texture2D)) as Texture2D;
+            }
+            else
+            {
+                alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine_Light.psd", typeof(Texture2D)) as Texture2D;
+                alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine_Light.psd", typeof(Texture2D)) as Texture2D;
+                sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Light.psd", typeof(Texture2D)) as Texture2D;
+            }
+
+            label = new GUIStyle(EditorStyles.label) { richText = true, wordWrap = true, stretchWidth = true };
+            textAreaBoxWindow = new GUIStyle(EditorStyles.textArea) { richText = true };
+            boldFoldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold };
+            panelTitle = new GUIStyle(EditorStyles.label) { fontStyle = FontStyle.Bold };
+
+            sectionHeader = new GUIStyle(EditorStyles.label) { fixedHeight = 22, richText = true, border = new RectOffset(9, 9, 0, 0), overflow = new RectOffset(9, 0, 0, 0), padding = new RectOffset(0, 0, 4, 0) };
+            sectionHeader.normal.background = sectionHeaderTexture;
+
+            centeredLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleCenter};
+            rightLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleRight, richText = true };
+
+
+            alignmentButtonLeft = new GUIStyle(EditorStyles.miniButtonLeft);
+            alignmentButtonLeft.padding.left = 4;
+            alignmentButtonLeft.padding.right = 4;
+            alignmentButtonLeft.padding.top = 2;
+            alignmentButtonLeft.padding.bottom = 2;
+
+            alignmentButtonMid = new GUIStyle(EditorStyles.miniButtonMid);
+            alignmentButtonMid.padding.left = 4;
+            alignmentButtonMid.padding.right = 4;
+            alignmentButtonLeft.padding.top = 2;
+            alignmentButtonLeft.padding.bottom = 2;
+
+            alignmentButtonRight = new GUIStyle(EditorStyles.miniButtonRight);
+            alignmentButtonRight.padding.left = 4;
+            alignmentButtonRight.padding.right = 4;
+            alignmentButtonLeft.padding.top = 2;
+            alignmentButtonLeft.padding.bottom = 2;
+
+            wrappingTextArea = new GUIStyle(EditorStyles.textArea);
+            wrappingTextArea.wordWrap = true;
+
+            alignContentA = new []
+            { 
+                new GUIContent(alignLeft, "Left"), 
+                new GUIContent(alignCenter, "Center"), 
+                new GUIContent(alignRight, "Right"), 
+                new GUIContent(alignJustified, "Justified"),
+                new GUIContent(alignFlush, "Flush"),
+                new GUIContent(alignGeoCenter, "Geometry Center")
+            };
+
+            alignContentB = new []
+            { 
+                new GUIContent(alignTop, "Top"), 
+                new GUIContent(alignMiddle, "Middle"), 
+                new GUIContent(alignBottom, "Bottom"),
+                new GUIContent(alignBaseline, "Baseline"),
+                new GUIContent(alignMidline, "Midline"),
+                new GUIContent(alignCapline, "Capline")
+            };
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c09bfa39360d9ce2e1a83bc53fda2820be3fb55
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UIStyleManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 30a939dce2fd4073955f2f20e659d506
+timeCreated: 1426454127
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..87181650da4a1c984b644546e3ed59d23c396c08
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs
@@ -0,0 +1,91 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEditor;
+
+namespace TMPro.EditorUtilities
+{
+
+    [CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects]
+    public class TMP_UiEditorPanel : TMP_BaseEditorPanel
+    {
+        static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster.");
+
+        SerializedProperty m_RaycastTargetProp;
+
+        protected override void OnEnable()
+        {
+            base.OnEnable();
+            m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget");
+        }
+
+        protected override void DrawExtraSettings()
+        {
+            Foldout.extraSettings = EditorGUILayout.Foldout(Foldout.extraSettings, k_ExtraSettingsLabel, true, TMP_UIStyleManager.boldFoldout);
+            if (Foldout.extraSettings)
+            {
+                EditorGUI.indentLevel += 1;
+
+                DrawMargins();
+
+                DrawGeometrySorting();
+
+                DrawRichText();
+
+                DrawRaycastTarget();
+
+                DrawParsing();
+                
+                DrawKerning();
+
+                DrawPadding();
+
+                EditorGUI.indentLevel -= 1;
+            }
+        }
+
+        protected void DrawRaycastTarget()
+        {
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(m_RaycastTargetProp, k_RaycastTargetLabel);
+            if (EditorGUI.EndChangeCheck())
+            {
+                // Change needs to propagate to the child sub objects.
+                Graphic[] graphicComponents = m_TextComponent.GetComponentsInChildren<Graphic>();
+                for (int i = 1; i < graphicComponents.Length; i++)
+                    graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue;
+
+                m_HavePropertiesChanged = true;
+            }
+        }
+
+        // Method to handle multi object selection
+        protected override bool IsMixSelectionTypes()
+        {
+            GameObject[] objects = Selection.gameObjects;
+            if (objects.Length > 1)
+            {
+                for (int i = 0; i < objects.Length; i++)
+                {
+					if (objects[i].GetComponent<TextMeshProUGUI>() == null)
+                        return true;
+                }
+            }
+            return false;
+        }
+        protected override void OnUndoRedo()
+        {
+            int undoEventId = Undo.GetCurrentGroup();
+            int lastUndoEventId = s_EventId;
+
+            if (undoEventId != lastUndoEventId)
+            {
+                for (int i = 0; i < targets.Length; i++)
+                {
+                    //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup());
+                    TMPro_EventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI);
+                    s_EventId = undoEventId;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ea3b36b3d32458936434b6e114d5de9833d37eaa
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMP_UiEditorPanel.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 21c0044a7f964773be90d197a78e4703
+timeCreated: 1443571501
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8d65b706bf9541f215c417eaad65dc9034eaf2f6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs
@@ -0,0 +1,341 @@
+using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public class TMP_ContextMenus : Editor
+    {
+
+        private static Texture m_copiedTexture;
+
+        private static Material m_copiedProperties;
+        private static Material m_copiedAtlasProperties;
+
+
+        // Add a Context Menu to the Texture Editor Panel to allow Copy / Paste of Texture.
+        [MenuItem("CONTEXT/Texture/Copy", false, 2000)]
+        static void CopyTexture(MenuCommand command)
+        {
+            m_copiedTexture = command.context as Texture;
+        }
+
+
+        // Select the currently assigned material or material preset.
+        [MenuItem("CONTEXT/Material/Select Material", false, 500)]
+        static void SelectMaterial(MenuCommand command)
+        {
+            Material mat = command.context as Material;
+
+            // Select current material
+            EditorUtility.FocusProjectWindow();
+            EditorGUIUtility.PingObject(mat);
+        }
+
+
+        // Add a Context Menu to allow easy duplication of the Material.
+        [MenuItem("CONTEXT/Material/Create Material Preset", false)]
+        static void DuplicateMaterial(MenuCommand command)
+        {
+            // Get the type of text object
+            // If material is not a base material, we get material leaks...
+
+            Material source_Mat = (Material)command.context;
+            if (!EditorUtility.IsPersistent(source_Mat))
+            {
+                Debug.LogWarning("Material is an instance and cannot be converted into a permanent asset.");
+                return;
+            }
+
+
+            string assetPath = AssetDatabase.GetAssetPath(source_Mat).Split('.')[0];
+
+            Material duplicate = new Material(source_Mat);
+
+            // Need to manually copy the shader keywords
+            duplicate.shaderKeywords = source_Mat.shaderKeywords;
+
+            AssetDatabase.CreateAsset(duplicate, AssetDatabase.GenerateUniqueAssetPath(assetPath + ".mat"));
+
+            // Assign duplicate Material to selected object (if one is)
+            if (Selection.activeGameObject != null)
+            {
+                TMP_Text textObject = Selection.activeGameObject.GetComponent<TMP_Text>();
+                if (textObject != null)
+                {
+                    textObject.fontSharedMaterial = duplicate;
+                }
+                else
+                {
+                    TMP_SubMesh subMeshObject = Selection.activeGameObject.GetComponent<TMP_SubMesh>();
+
+                    if (subMeshObject != null)
+                        subMeshObject.sharedMaterial = duplicate;
+                    else
+                    {
+                        TMP_SubMeshUI subMeshUIObject = Selection.activeGameObject.GetComponent<TMP_SubMeshUI>();
+
+                        if (subMeshUIObject != null)
+                            subMeshUIObject.sharedMaterial = duplicate;
+                    }
+                }
+            }
+
+            // Ping newly created Material Preset.
+            EditorUtility.FocusProjectWindow();
+            EditorGUIUtility.PingObject(duplicate);
+        }
+
+
+        //[MenuItem("CONTEXT/MaterialComponent/Copy Material Properties", false)]
+        [MenuItem("CONTEXT/Material/Copy Material Properties", false)]
+        static void CopyMaterialProperties(MenuCommand command)
+        {
+            Material mat = null;
+            if (command.context.GetType() == typeof(Material))
+                mat = (Material)command.context;
+            else
+            {
+                mat = Selection.activeGameObject.GetComponent<CanvasRenderer>().GetMaterial();
+            }
+
+            m_copiedProperties = new Material(mat);
+
+            m_copiedProperties.shaderKeywords = mat.shaderKeywords;
+
+            m_copiedProperties.hideFlags = HideFlags.DontSave;
+        }
+
+
+        // PASTE MATERIAL
+        //[MenuItem("CONTEXT/MaterialComponent/Paste Material Properties", false)]
+        [MenuItem("CONTEXT/Material/Paste Material Properties", false)]
+        static void PasteMaterialProperties(MenuCommand command)
+        {
+
+            if (m_copiedProperties == null)
+            {
+                Debug.LogWarning("No Material Properties to Paste. Use Copy Material Properties first.");
+                return;
+            }
+
+            Material mat = null;
+            if (command.context.GetType() == typeof(Material))
+                mat = (Material)command.context;
+            else
+            {
+                mat = Selection.activeGameObject.GetComponent<CanvasRenderer>().GetMaterial();
+            }
+
+            Undo.RecordObject(mat, "Paste Material");
+
+            ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs
+            if (mat.HasProperty(ShaderUtilities.ID_GradientScale))
+            {
+                // Preserve unique SDF properties from destination material.
+                m_copiedProperties.SetTexture(ShaderUtilities.ID_MainTex, mat.GetTexture(ShaderUtilities.ID_MainTex));
+                m_copiedProperties.SetFloat(ShaderUtilities.ID_GradientScale, mat.GetFloat(ShaderUtilities.ID_GradientScale));
+                m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureWidth, mat.GetFloat(ShaderUtilities.ID_TextureWidth));
+                m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureHeight, mat.GetFloat(ShaderUtilities.ID_TextureHeight));
+            }
+
+            EditorShaderUtilities.CopyMaterialProperties(m_copiedProperties, mat);
+
+            // Copy ShaderKeywords from one material to the other.
+            mat.shaderKeywords = m_copiedProperties.shaderKeywords;
+
+            // Let TextMeshPro Objects that this mat has changed.
+            TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat);
+        }
+
+
+        // Enable Resetting of Material properties without losing unique properties of the font atlas.
+        [MenuItem("CONTEXT/Material/Reset", false, 2100)]
+        static void ResetSettings(MenuCommand command)
+        {
+
+            Material mat = null;
+            if (command.context.GetType() == typeof(Material))
+                mat = (Material)command.context;
+            else
+            {
+                mat = Selection.activeGameObject.GetComponent<CanvasRenderer>().GetMaterial();
+            }
+
+            Undo.RecordObject(mat, "Reset Material");
+
+            ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs
+            if (mat.HasProperty(ShaderUtilities.ID_GradientScale))
+            {
+                // Copy unique properties of the SDF Material
+                var texture = mat.GetTexture(ShaderUtilities.ID_MainTex);
+                var gradientScale = mat.GetFloat(ShaderUtilities.ID_GradientScale);
+                var texWidth = mat.GetFloat(ShaderUtilities.ID_TextureWidth);
+                var texHeight = mat.GetFloat(ShaderUtilities.ID_TextureHeight);
+
+                var stencilId = 0.0f;
+                var stencilComp = 0.0f;
+
+                if (mat.HasProperty(ShaderUtilities.ID_StencilID))
+                {
+                    stencilId = mat.GetFloat(ShaderUtilities.ID_StencilID);
+                    stencilComp = mat.GetFloat(ShaderUtilities.ID_StencilComp);
+                }
+
+                var normalWeight = mat.GetFloat(ShaderUtilities.ID_WeightNormal);
+                var boldWeight = mat.GetFloat(ShaderUtilities.ID_WeightBold);
+
+                // Reset the material
+                Unsupported.SmartReset(mat);
+
+                // Reset ShaderKeywords
+                mat.shaderKeywords = new string[0]; // { "BEVEL_OFF", "GLOW_OFF", "UNDERLAY_OFF" };
+
+                // Copy unique material properties back to the material.
+                mat.SetTexture(ShaderUtilities.ID_MainTex, texture);
+                mat.SetFloat(ShaderUtilities.ID_GradientScale, gradientScale);
+                mat.SetFloat(ShaderUtilities.ID_TextureWidth, texWidth);
+                mat.SetFloat(ShaderUtilities.ID_TextureHeight, texHeight);
+
+                if (mat.HasProperty(ShaderUtilities.ID_StencilID))
+                {
+                    mat.SetFloat(ShaderUtilities.ID_StencilID, stencilId);
+                    mat.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp);
+                }
+
+                mat.SetFloat(ShaderUtilities.ID_WeightNormal, normalWeight);
+                mat.SetFloat(ShaderUtilities.ID_WeightBold, boldWeight);
+            }
+            else
+            {
+                Unsupported.SmartReset(mat);
+            }
+
+            TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat);
+        }
+
+
+
+        //This function is used for debugging and fixing potentially broken font atlas links.
+        [MenuItem("CONTEXT/Material/Copy Atlas", false, 2000)]
+        static void CopyAtlas(MenuCommand command)
+        {
+            Material mat = command.context as Material;
+
+            m_copiedAtlasProperties = new Material(mat);
+            m_copiedAtlasProperties.hideFlags = HideFlags.DontSave;
+        }
+
+
+        // This function is used for debugging and fixing potentially broken font atlas links
+        [MenuItem("CONTEXT/Material/Paste Atlas", false, 2001)]
+        static void PasteAtlas(MenuCommand command)
+        {
+            Material mat = command.context as Material;
+
+            if (m_copiedAtlasProperties != null)
+            {
+                Undo.RecordObject(mat, "Paste Texture");
+
+                ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs
+                mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedAtlasProperties.GetTexture(ShaderUtilities.ID_MainTex));
+                mat.SetFloat(ShaderUtilities.ID_GradientScale, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_GradientScale));
+                mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureWidth));
+                mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureHeight));
+            }
+            else if (m_copiedTexture != null)
+            {
+                Undo.RecordObject(mat, "Paste Texture");
+
+                mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedTexture);
+            }
+
+            //DestroyImmediate(m_copiedAtlasProperties);
+        }
+
+
+        // Context Menus for TMPro Font Assets
+        //This function is used for debugging and fixing potentially broken font atlas links.
+        [MenuItem("CONTEXT/TMP_FontAsset/Extract Atlas", false, 2100)]
+        static void ExtractAtlas(MenuCommand command)
+        {
+            TMP_FontAsset font = command.context as TMP_FontAsset;
+
+            string fontPath = AssetDatabase.GetAssetPath(font);
+            string texPath = Path.GetDirectoryName(fontPath) + "/" + Path.GetFileNameWithoutExtension(fontPath) + " Atlas.png";
+
+            // Create a Serialized Object of the texture to allow us to make it readable.
+            SerializedObject texprop = new SerializedObject(font.material.GetTexture(ShaderUtilities.ID_MainTex));
+            texprop.FindProperty("m_IsReadable").boolValue = true;
+            texprop.ApplyModifiedProperties();
+
+            // Create a copy of the texture.
+            Texture2D tex = Instantiate(font.material.GetTexture(ShaderUtilities.ID_MainTex)) as Texture2D;
+
+            // Set the texture to not readable again.
+            texprop.FindProperty("m_IsReadable").boolValue = false;
+            texprop.ApplyModifiedProperties();
+
+            Debug.Log(texPath);
+            // Saving File for Debug
+            var pngData = tex.EncodeToPNG();
+            File.WriteAllBytes(texPath, pngData);
+
+            AssetDatabase.Refresh();
+            DestroyImmediate(tex);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="command"></param>
+        [MenuItem("CONTEXT/TMP_FontAsset/Update Atlas Texture...", false, 2000)]
+        static void RegenerateFontAsset(MenuCommand command)
+        {
+            TMP_FontAsset fontAsset = command.context as TMP_FontAsset;
+
+            if (fontAsset != null)
+            {
+                TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(fontAsset);
+            }
+        }
+
+
+        /// <summary>
+        /// Clear Font Asset Data
+        /// </summary>
+        /// <param name="command"></param>
+        [MenuItem("CONTEXT/TMP_FontAsset/Reset", false, 100)]
+        static void ClearFontAssetData(MenuCommand command)
+        {
+            TMP_FontAsset fontAsset = command.context as TMP_FontAsset;
+
+            if (fontAsset != null && Selection.activeObject != fontAsset)
+            {
+                Selection.activeObject = fontAsset;
+            }
+
+            fontAsset.ClearFontAssetData(true);
+
+            TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset);
+        }
+
+
+        [MenuItem("CONTEXT/TrueTypeFontImporter/Create TMP Font Asset...", false, 200)]
+        static void CreateFontAsset(MenuCommand command)
+        {
+            TrueTypeFontImporter importer = command.context as TrueTypeFontImporter;
+
+            if (importer != null)
+            {
+                Font sourceFontFile = AssetDatabase.LoadAssetAtPath<Font>(importer.assetPath);
+
+                if (sourceFontFile)
+                    TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(sourceFontFile);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f16753fe04ed97ae25206041cef44baf268cf65c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_ContextMenus.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 44e1d646473a40178712cb2150f54cec
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs
new file mode 100644
index 0000000000000000000000000000000000000000..eaf84e3ba036225f085717eb0604cb58ee4901c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs
@@ -0,0 +1,313 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.SceneManagement;
+using UnityEditor.Experimental.SceneManagement;
+using UnityEngine.SceneManagement;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+
+
+namespace TMPro.EditorUtilities
+{
+    public static class TMPro_CreateObjectMenu
+    {
+
+        /// <summary>
+        /// Create a TextMeshPro object that works with the Mesh Renderer
+        /// </summary>
+        /// <param name="command"></param>
+        [MenuItem("GameObject/3D Object/Text - TextMeshPro", false, 30)]
+        static void CreateTextMeshProObjectPerform(MenuCommand command)
+        {
+            GameObject go = new GameObject("Text (TMP)");
+
+            // Add support for new prefab mode
+            StageUtility.PlaceGameObjectInCurrentStage(go);
+
+            TextMeshPro textMeshPro = go.AddComponent<TextMeshPro>();
+            textMeshPro.text = "Sample text";
+            textMeshPro.alignment = TextAlignmentOptions.TopLeft;
+
+            Undo.RegisterCreatedObjectUndo((Object)go, "Create " + go.name);
+
+            GameObject contextObject = command.context as GameObject;
+            if (contextObject != null)
+            {
+                GameObjectUtility.SetParentAndAlign(go, contextObject);
+                Undo.SetTransformParent(go.transform, contextObject.transform, "Parent " + go.name);
+            }
+
+            Selection.activeGameObject = go;
+        }
+
+
+        /// <summary>
+        /// Create a TextMeshPro object that works with the CanvasRenderer
+        /// </summary>
+        /// <param name="command"></param>
+        [MenuItem("GameObject/UI/Text - TextMeshPro", false, 2001)]
+        static void CreateTextMeshProGuiObjectPerform(MenuCommand menuCommand)
+        {
+            GameObject go = TMP_DefaultControls.CreateText(GetStandardResources());
+
+            // Override text color and font size
+            TMP_Text textComponent = go.GetComponent<TMP_Text>();
+            textComponent.color = Color.white;
+            if (textComponent.m_isWaitingOnResourceLoad == false)
+                textComponent.fontSize = TMP_Settings.defaultFontSize;
+
+            PlaceUIElementRoot(go, menuCommand);
+        }
+
+        [MenuItem("GameObject/UI/Button - TextMeshPro", false, 2031)]
+        static public void AddButton(MenuCommand menuCommand)
+        {
+            GameObject go = TMP_DefaultControls.CreateButton(GetStandardResources());
+
+            // Override font size
+            TMP_Text textComponent = go.GetComponentInChildren<TMP_Text>();
+            textComponent.fontSize = 24;
+
+            PlaceUIElementRoot(go, menuCommand);
+        }
+
+
+
+        [MenuItem("GameObject/UI/Input Field - TextMeshPro", false, 2037)]
+        static void AddTextMeshProInputField(MenuCommand menuCommand)
+        {
+            GameObject go = TMP_DefaultControls.CreateInputField(GetStandardResources());
+            PlaceUIElementRoot(go, menuCommand);
+        }
+
+
+        [MenuItem("GameObject/UI/Dropdown - TextMeshPro", false, 2036)]
+        static public void AddDropdown(MenuCommand menuCommand)
+        {
+            GameObject go = TMP_DefaultControls.CreateDropdown(GetStandardResources());
+            PlaceUIElementRoot(go, menuCommand);
+        }
+
+
+        private const string kUILayerName = "UI";
+
+        private const string kStandardSpritePath = "UI/Skin/UISprite.psd";
+        private const string kBackgroundSpritePath = "UI/Skin/Background.psd";
+        private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd";
+        private const string kKnobPath = "UI/Skin/Knob.psd";
+        private const string kCheckmarkPath = "UI/Skin/Checkmark.psd";
+        private const string kDropdownArrowPath = "UI/Skin/DropdownArrow.psd";
+        private const string kMaskPath = "UI/Skin/UIMask.psd";
+
+        static private TMP_DefaultControls.Resources s_StandardResources;
+
+
+        static private TMP_DefaultControls.Resources GetStandardResources()
+        {
+            if (s_StandardResources.standard == null)
+            {
+                s_StandardResources.standard = AssetDatabase.GetBuiltinExtraResource<Sprite>(kStandardSpritePath);
+                s_StandardResources.background = AssetDatabase.GetBuiltinExtraResource<Sprite>(kBackgroundSpritePath);
+                s_StandardResources.inputField = AssetDatabase.GetBuiltinExtraResource<Sprite>(kInputFieldBackgroundPath);
+                s_StandardResources.knob = AssetDatabase.GetBuiltinExtraResource<Sprite>(kKnobPath);
+                s_StandardResources.checkmark = AssetDatabase.GetBuiltinExtraResource<Sprite>(kCheckmarkPath);
+                s_StandardResources.dropdown = AssetDatabase.GetBuiltinExtraResource<Sprite>(kDropdownArrowPath);
+                s_StandardResources.mask = AssetDatabase.GetBuiltinExtraResource<Sprite>(kMaskPath);
+            }
+            return s_StandardResources;
+        }
+
+
+        private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform)
+        {
+            // Find the best scene view
+            SceneView sceneView = SceneView.lastActiveSceneView;
+            if (sceneView == null && SceneView.sceneViews.Count > 0)
+                sceneView = SceneView.sceneViews[0] as SceneView;
+
+            // Couldn't find a SceneView. Don't set position.
+            if (sceneView == null || sceneView.camera == null)
+                return;
+
+            // Create world space Plane from canvas position.
+            Camera camera = sceneView.camera;
+            Vector3 position = Vector3.zero;
+            Vector2 localPlanePosition;
+
+            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition))
+            {
+                // Adjust for canvas pivot
+                localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x;
+                localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y;
+
+                localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x);
+                localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y);
+
+                // Adjust for anchoring
+                position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x;
+                position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y;
+
+                Vector3 minLocalPosition;
+                minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x;
+                minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y;
+
+                Vector3 maxLocalPosition;
+                maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x;
+                maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y;
+
+                position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x);
+                position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y);
+            }
+
+            itemTransform.anchoredPosition = position;
+            itemTransform.localRotation = Quaternion.identity;
+            itemTransform.localScale = Vector3.one;
+        }
+
+
+        private static void PlaceUIElementRoot(GameObject element, MenuCommand menuCommand)
+        {
+            GameObject parent = menuCommand.context as GameObject;
+            bool explicitParentChoice = true;
+            if (parent == null)
+            {
+                parent = GetOrCreateCanvasGameObject();
+                explicitParentChoice = false;
+
+                // If in Prefab Mode, Canvas has to be part of Prefab contents,
+                // otherwise use Prefab root instead.
+                PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
+                if (prefabStage != null && !prefabStage.IsPartOfPrefabContents(parent))
+                    parent = prefabStage.prefabContentsRoot;
+            }
+            if (parent.GetComponentInParent<Canvas>() == null)
+            {
+                // Create canvas under context GameObject,
+                // and make that be the parent which UI element is added under.
+                GameObject canvas = CreateNewUI();
+                canvas.transform.SetParent(parent.transform, false);
+                parent = canvas;
+            }
+
+            // Setting the element to be a child of an element already in the scene should
+            // be sufficient to also move the element to that scene.
+            // However, it seems the element needs to be already in its destination scene when the
+            // RegisterCreatedObjectUndo is performed; otherwise the scene it was created in is dirtied.
+            SceneManager.MoveGameObjectToScene(element, parent.scene);
+
+            if (element.transform.parent == null)
+            {
+                Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name);
+            }
+
+            GameObjectUtility.EnsureUniqueNameForSibling(element);
+
+            // We have to fix up the undo name since the name of the object was only known after reparenting it.
+            Undo.SetCurrentGroupName("Create " + element.name);
+
+            GameObjectUtility.SetParentAndAlign(element, parent);
+            if (!explicitParentChoice) // not a context click, so center in sceneview
+                SetPositionVisibleinSceneView(parent.GetComponent<RectTransform>(), element.GetComponent<RectTransform>());
+
+            Undo.RegisterCreatedObjectUndo(element, "Create " + element.name);
+
+            Selection.activeGameObject = element;
+        }
+
+
+        static public GameObject CreateNewUI()
+        {
+            // Root for the UI
+            var root = new GameObject("Canvas");
+            root.layer = LayerMask.NameToLayer(kUILayerName);
+            Canvas canvas = root.AddComponent<Canvas>();
+            canvas.renderMode = RenderMode.ScreenSpaceOverlay;
+            root.AddComponent<CanvasScaler>();
+            root.AddComponent<GraphicRaycaster>();
+
+            // Works for all stages.
+            StageUtility.PlaceGameObjectInCurrentStage(root);
+            bool customScene = false;
+            PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
+            if (prefabStage != null)
+            {
+                root.transform.SetParent(prefabStage.prefabContentsRoot.transform, false);
+                customScene = true;
+            }
+
+            Undo.RegisterCreatedObjectUndo(root, "Create " + root.name);
+
+            // If there is no event system add one...
+            // No need to place event system in custom scene as these are temporary anyway.
+            // It can be argued for or against placing it in the user scenes,
+            // but let's not modify scene user is not currently looking at.
+            if (!customScene)
+                CreateEventSystem(false);
+            return root;
+        }
+
+
+        private static void CreateEventSystem(bool select)
+        {
+            CreateEventSystem(select, null);
+        }
+
+
+        private static void CreateEventSystem(bool select, GameObject parent)
+        {
+            var esys = Object.FindObjectOfType<EventSystem>();
+            if (esys == null)
+            {
+                var eventSystem = new GameObject("EventSystem");
+                GameObjectUtility.SetParentAndAlign(eventSystem, parent);
+                esys = eventSystem.AddComponent<EventSystem>();
+                eventSystem.AddComponent<StandaloneInputModule>();
+
+                Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name);
+            }
+
+            if (select && esys != null)
+            {
+                Selection.activeGameObject = esys.gameObject;
+            }
+        }
+
+
+        // Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas.
+        static public GameObject GetOrCreateCanvasGameObject()
+        {
+            GameObject selectedGo = Selection.activeGameObject;
+
+            // Try to find a gameobject that is the selected GO or one if its parents.
+            Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent<Canvas>() : null;
+            if (IsValidCanvas(canvas))
+                return canvas.gameObject;
+
+            // No canvas in selection or its parents? Then use any valid canvas.
+            // We have to find all loaded Canvases, not just the ones in main scenes.
+            Canvas[] canvasArray = StageUtility.GetCurrentStageHandle().FindComponentsOfType<Canvas>();
+            for (int i = 0; i < canvasArray.Length; i++)
+                if (IsValidCanvas(canvasArray[i]))
+                    return canvasArray[i].gameObject;
+
+            // No canvas in the scene at all? Then create a new one.
+            return CreateNewUI();
+        }
+
+        static bool IsValidCanvas(Canvas canvas)
+        {
+            if (canvas == null || !canvas.gameObject.activeInHierarchy)
+                return false;
+
+            // It's important that the non-editable canvas from a prefab scene won't be rejected,
+            // but canvases not visible in the Hierarchy at all do. Don't check for HideAndDontSave.
+            if (EditorUtility.IsPersistent(canvas) || (canvas.hideFlags & HideFlags.HideInHierarchy) != 0)
+                return false;
+
+            if (StageUtility.GetStageHandle(canvas.gameObject) != StageUtility.GetCurrentStageHandle())
+                return false;
+
+            return true;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..be9643fddee4f9f16c33ae1e2b3f577d24b22aa1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7065397ff8184621aa3ca4f854491259
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3d639005bb34bb65c7af8c058e0a6796de3ead4e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using UnityEditor;
+using System.Linq;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public static class EditorShaderUtilities 
+    {
+
+        /// <summary>
+        /// Copy Shader properties from source to destination material.
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        public static void CopyMaterialProperties(Material source, Material destination)
+        {
+            MaterialProperty[] source_prop = MaterialEditor.GetMaterialProperties(new Material[] { source });
+
+            for (int i = 0; i < source_prop.Length; i++)
+            {
+                int property_ID = Shader.PropertyToID(source_prop[i].name);
+                if (destination.HasProperty(property_ID))
+                {
+                    //Debug.Log(source_prop[i].name + "  Type:" + ShaderUtil.GetPropertyType(source.shader, i));
+                    switch (ShaderUtil.GetPropertyType(source.shader, i))
+                    {
+                        case ShaderUtil.ShaderPropertyType.Color:
+                            destination.SetColor(property_ID, source.GetColor(property_ID));                          
+                            break;
+                        case ShaderUtil.ShaderPropertyType.Float:
+                            destination.SetFloat(property_ID, source.GetFloat(property_ID));
+                            break;
+                        case ShaderUtil.ShaderPropertyType.Range:
+                            destination.SetFloat(property_ID, source.GetFloat(property_ID));
+                            break;
+                        case ShaderUtil.ShaderPropertyType.TexEnv:
+                            destination.SetTexture(property_ID, source.GetTexture(property_ID));
+                            break;
+                        case ShaderUtil.ShaderPropertyType.Vector:
+                            destination.SetVector(property_ID, source.GetVector(property_ID));
+                            break;
+                    }
+                }
+            }
+
+        }
+      
+    }
+
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..89d25943bdf9894abdd76a6e8184ac7fc7ee2de6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: aa76955fe5bb44f7915d91db8c7043c4
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9ab1b329c4a265de6ae464c27b53790f4d495bbd
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs
@@ -0,0 +1,1739 @@
+using System;
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Threading;
+using System.IO;
+using System.Text.RegularExpressions;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using Object = UnityEngine.Object;
+
+namespace TMPro.EditorUtilities
+{
+    public class TMPro_FontAssetCreatorWindow : EditorWindow
+    {
+        [MenuItem("Window/TextMeshPro/Font Asset Creator", false, 2025)]
+        public static void ShowFontAtlasCreatorWindow()
+        {
+            var window = GetWindow<TMPro_FontAssetCreatorWindow>();
+            window.titleContent = new GUIContent("Font Asset Creator");
+            window.Focus();
+
+            // Make sure TMP Essential Resources have been imported.
+            window.CheckEssentialResources();
+        }
+
+
+        public static void ShowFontAtlasCreatorWindow(Font sourceFontFile)
+        {
+            var window = GetWindow<TMPro_FontAssetCreatorWindow>();
+
+            window.titleContent = new GUIContent("Font Asset Creator");
+            window.Focus();
+
+            window.ClearGeneratedData();
+            window.m_LegacyFontAsset = null;
+            window.m_SelectedFontAsset = null;
+
+            // Override selected font asset
+            window.m_SourceFontFile = sourceFontFile;
+
+            // Make sure TMP Essential Resources have been imported.
+            window.CheckEssentialResources();
+        }
+
+
+        public static void ShowFontAtlasCreatorWindow(TMP_FontAsset fontAsset)
+        {
+            var window = GetWindow<TMPro_FontAssetCreatorWindow>();
+
+            window.titleContent = new GUIContent("Font Asset Creator");
+            window.Focus();
+
+            // Clear any previously generated data
+            window.ClearGeneratedData();
+            window.m_LegacyFontAsset = null;
+
+            // Load font asset creation settings if we have valid settings
+            if (string.IsNullOrEmpty(fontAsset.creationSettings.sourceFontFileGUID) == false)
+            {
+                window.LoadFontCreationSettings(fontAsset.creationSettings);
+
+                // Override settings to inject character list from font asset
+                window.m_CharacterSetSelectionMode = 6;
+                window.m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(fontAsset));
+
+
+                window.m_ReferencedFontAsset = fontAsset;
+                window.m_SavedFontAtlas = fontAsset.atlasTexture;
+            }
+            else
+            {
+                window.m_WarningMessage = "Font Asset [" + fontAsset.name + "] does not contain any previous \"Font Asset Creation Settings\". This usually means [" + fontAsset.name + "] was created before this new functionality was added.";
+                window.m_SourceFontFile = null;
+                window.m_LegacyFontAsset = fontAsset;
+            }
+
+            // Even if we don't have any saved generation settings, we still want to pre-select the source font file.
+            window.m_SelectedFontAsset = fontAsset;
+
+            // Make sure TMP Essential Resources have been imported.
+            window.CheckEssentialResources();
+        }
+        
+        [System.Serializable]
+        class FontAssetCreationSettingsContainer
+        {
+            public List<FontAssetCreationSettings> fontAssetCreationSettings;
+        }
+        
+        FontAssetCreationSettingsContainer m_FontAssetCreationSettingsContainer;
+        
+        //static readonly string[] m_FontCreationPresets = new string[] { "Recent 1", "Recent 2", "Recent 3", "Recent 4" };
+        int m_FontAssetCreationSettingsCurrentIndex = 0;
+
+        const string k_FontAssetCreationSettingsContainerKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.Container";
+        const string k_FontAssetCreationSettingsCurrentIndexKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.CurrentIndex";
+        const float k_TwoColumnControlsWidth = 335f;
+
+        // Diagnostics
+        System.Diagnostics.Stopwatch m_StopWatch;
+        double m_GlyphPackingGenerationTime;
+        double m_GlyphRenderingGenerationTime;
+        
+        string[] m_FontSizingOptions = { "Auto Sizing", "Custom Size" };
+        int m_PointSizeSamplingMode;
+        string[] m_FontResolutionLabels = { "8", "16","32", "64", "128", "256", "512", "1024", "2048", "4096", "8192" };
+        int[] m_FontAtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
+        string[] m_FontCharacterSets = { "ASCII", "Extended ASCII", "ASCII Lowercase", "ASCII Uppercase", "Numbers + Symbols", "Custom Range", "Unicode Range (Hex)", "Custom Characters", "Characters from File" };
+        enum FontPackingModes { Fast = 0, Optimum = 4 };
+        FontPackingModes m_PackingMode = FontPackingModes.Fast;
+
+        int m_CharacterSetSelectionMode;
+
+        string m_CharacterSequence = "";
+        string m_OutputFeedback = "";
+        string m_WarningMessage;
+        int m_CharacterCount;
+        Vector2 m_ScrollPosition;
+        Vector2 m_OutputScrollPosition;
+        
+        bool m_IsRepaintNeeded;
+
+        float m_AtlasGenerationProgress;
+        string m_AtlasGenerationProgressLabel = string.Empty;
+        float m_RenderingProgress;
+        bool m_IsRenderingDone;
+        bool m_IsProcessing;
+        bool m_IsGenerationDisabled;
+        bool m_IsGenerationCancelled;
+
+        bool m_IsFontAtlasInvalid;
+        Object m_SourceFontFile;
+        TMP_FontAsset m_SelectedFontAsset;
+        TMP_FontAsset m_LegacyFontAsset;
+        TMP_FontAsset m_ReferencedFontAsset;
+
+        TextAsset m_CharactersFromFile;
+        int m_PointSize;
+        int m_Padding = 5;
+        //FaceStyles m_FontStyle = FaceStyles.Normal;
+        //float m_FontStyleValue = 2;
+
+        GlyphRenderMode m_GlyphRenderMode = GlyphRenderMode.SDFAA;
+        int m_AtlasWidth = 512;
+        int m_AtlasHeight = 512;
+        byte[] m_AtlasTextureBuffer;
+        Texture2D m_FontAtlasTexture;
+        Texture2D m_SavedFontAtlas;
+
+        // 
+        List<Glyph> m_FontGlyphTable = new List<Glyph>();
+        List<TMP_Character> m_FontCharacterTable = new List<TMP_Character>();
+
+        Dictionary<uint, uint> m_CharacterLookupMap = new Dictionary<uint, uint>();
+        Dictionary<uint, List<uint>> m_GlyphLookupMap = new Dictionary<uint, List<uint>>();
+
+        List<Glyph> m_GlyphsToPack = new List<Glyph>();
+        List<Glyph> m_GlyphsPacked = new List<Glyph>();
+        List<GlyphRect> m_FreeGlyphRects = new List<GlyphRect>();
+        List<GlyphRect> m_UsedGlyphRects = new List<GlyphRect>();
+        List<Glyph> m_GlyphsToRender = new List<Glyph>();
+        List<uint> m_AvailableGlyphsToAdd = new List<uint>();
+        List<uint> m_MissingCharacters = new List<uint>();
+        List<uint> m_ExcludedCharacters = new List<uint>();
+
+        private FaceInfo m_FaceInfo;
+
+        bool m_IncludeFontFeatures;
+
+
+        public void OnEnable()
+        {
+            // Used for Diagnostics
+            m_StopWatch = new System.Diagnostics.Stopwatch();
+            
+            // Set Editor window size.
+            minSize = new Vector2(315, minSize.y);
+
+            // Initialize & Get shader property IDs.
+            ShaderUtilities.GetShaderPropertyIDs();
+
+            // Load last selected preset if we are not already in the process of regenerating an existing font asset (via the Context menu)
+            if (EditorPrefs.HasKey(k_FontAssetCreationSettingsContainerKey))
+            {
+                if (m_FontAssetCreationSettingsContainer == null)
+                    m_FontAssetCreationSettingsContainer = JsonUtility.FromJson<FontAssetCreationSettingsContainer>(EditorPrefs.GetString(k_FontAssetCreationSettingsContainerKey));
+
+                if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings != null && m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 0)
+                {
+                    // Load Font Asset Creation Settings preset.
+                    if (EditorPrefs.HasKey(k_FontAssetCreationSettingsCurrentIndexKey))
+                        m_FontAssetCreationSettingsCurrentIndex = EditorPrefs.GetInt(k_FontAssetCreationSettingsCurrentIndexKey);
+
+                    LoadFontCreationSettings(m_FontAssetCreationSettingsContainer.fontAssetCreationSettings[m_FontAssetCreationSettingsCurrentIndex]);
+                }
+            }
+
+            ClearGeneratedData();
+        }
+
+
+        public void OnDisable()
+        {
+            //Debug.Log("TextMeshPro Editor Window has been disabled.");
+
+            // Destroy Engine only if it has been initialized already
+            FontEngine.DestroyFontEngine();
+
+            ClearGeneratedData();
+
+            // Remove Glyph Report if one was created.
+            if (File.Exists("Assets/TextMesh Pro/Glyph Report.txt"))
+            {
+                File.Delete("Assets/TextMesh Pro/Glyph Report.txt");
+                File.Delete("Assets/TextMesh Pro/Glyph Report.txt.meta");
+
+                AssetDatabase.Refresh();
+            }
+
+            // Save Font Asset Creation Settings Index
+            SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings());
+            EditorPrefs.SetInt(k_FontAssetCreationSettingsCurrentIndexKey, m_FontAssetCreationSettingsCurrentIndex);
+
+            // Unregister to event
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+
+            Resources.UnloadUnusedAssets();
+        }
+
+
+        // Event received when TMP resources have been loaded.
+        void ON_RESOURCES_LOADED()
+        {
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+
+            m_IsGenerationDisabled = false;
+        }
+
+        // Make sure TMP Essential Resources have been imported.
+        void CheckEssentialResources()
+        {
+            if (TMP_Settings.instance == null)
+            {
+                if (m_IsGenerationDisabled == false)
+                    TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED);
+
+                m_IsGenerationDisabled = true;
+            }
+        }
+
+
+        public void OnGUI()
+        {
+            GUILayout.BeginHorizontal();
+            DrawControls();
+            if (position.width > position.height && position.width > k_TwoColumnControlsWidth)
+            {
+                DrawPreview();
+            }
+            GUILayout.EndHorizontal();
+        }
+
+
+        public void Update()
+        {
+            if (m_IsRepaintNeeded)
+            {
+                //Debug.Log("Repainting...");
+                m_IsRepaintNeeded = false;
+                Repaint();
+            }
+
+            // Update Progress bar is we are Rendering a Font.
+            if (m_IsProcessing)
+            {
+                m_AtlasGenerationProgress = FontEngine.generationProgress;
+
+                m_IsRepaintNeeded = true;
+            }
+
+            // Update Feedback Window & Create Font Texture once Rendering is done.
+            if (m_IsRenderingDone)
+            {
+                m_IsProcessing = false;
+                m_IsRenderingDone = false;
+
+                if (m_IsGenerationCancelled == false)
+                {
+                    m_AtlasGenerationProgressLabel = "Generation completed in: " + (m_GlyphPackingGenerationTime + m_GlyphRenderingGenerationTime).ToString("0.00 ms.");
+
+                    UpdateRenderFeedbackWindow();
+                    CreateFontAtlasTexture();
+
+                    // If dynamic make readable ...
+                    m_FontAtlasTexture.Apply(false, false);
+                }
+                Repaint();
+            }
+        }
+
+
+        /// <summary>
+        /// Method which returns the character corresponding to a decimal value.
+        /// </summary>
+        /// <param name="sequence"></param>
+        /// <returns></returns>
+        static uint[] ParseNumberSequence(string sequence)
+        {
+            List<uint> unicodeList = new List<uint>();
+            string[] sequences = sequence.Split(',');
+
+            foreach (string seq in sequences)
+            {
+                string[] s1 = seq.Split('-');
+
+                if (s1.Length == 1)
+                    try
+                    {
+                        unicodeList.Add(uint.Parse(s1[0]));
+                    }
+                    catch
+                    {
+                        Debug.Log("No characters selected or invalid format.");
+                    }
+                else
+                {
+                    for (uint j = uint.Parse(s1[0]); j < uint.Parse(s1[1]) + 1; j++)
+                    {
+                        unicodeList.Add(j);
+                    }
+                }
+            }
+
+            return unicodeList.ToArray();
+        }
+
+
+        /// <summary>
+        /// Method which returns the character (decimal value) from a hex sequence.
+        /// </summary>
+        /// <param name="sequence"></param>
+        /// <returns></returns>
+        static uint[] ParseHexNumberSequence(string sequence)
+        {
+            List<uint> unicodeList = new List<uint>();
+            string[] sequences = sequence.Split(',');
+
+            foreach (string seq in sequences)
+            {
+                string[] s1 = seq.Split('-');
+
+                if (s1.Length == 1)
+                    try
+                    {
+                        unicodeList.Add(uint.Parse(s1[0], NumberStyles.AllowHexSpecifier));
+                    }
+                    catch
+                    {
+                        Debug.Log("No characters selected or invalid format.");
+                    }
+                else
+                {
+                    for (uint j = uint.Parse(s1[0], NumberStyles.AllowHexSpecifier); j < uint.Parse(s1[1], NumberStyles.AllowHexSpecifier) + 1; j++)
+                    {
+                        unicodeList.Add(j);
+                    }
+                }
+            }
+
+            return unicodeList.ToArray();
+        }
+
+
+        void DrawControls()
+        {
+            GUILayout.Space(5f);
+
+            if (position.width > position.height && position.width > k_TwoColumnControlsWidth)
+            {
+                m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition, GUILayout.Width(315));
+            }
+            else
+            {
+                m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition);
+            }
+            
+            GUILayout.Space(5f);
+
+            GUILayout.Label(m_SelectedFontAsset != null ? string.Format("Font Settings [{0}]", m_SelectedFontAsset.name) : "Font Settings", EditorStyles.boldLabel);
+
+            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+
+            EditorGUIUtility.labelWidth = 125f;
+            EditorGUIUtility.fieldWidth = 5f;
+            
+            // Disable Options if already generating a font atlas texture.
+            EditorGUI.BeginDisabledGroup(m_IsProcessing);
+            {
+                // FONT TTF SELECTION
+                EditorGUI.BeginChangeCheck();
+                m_SourceFontFile = EditorGUILayout.ObjectField("Source Font File", m_SourceFontFile, typeof(Font), false) as Font;
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_SelectedFontAsset = null;
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                // FONT SIZING
+                EditorGUI.BeginChangeCheck();
+                if (m_PointSizeSamplingMode == 0)
+                {
+                    m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions);
+                }
+                else
+                {
+                    GUILayout.BeginHorizontal();
+                    m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions, GUILayout.Width(225));
+                    m_PointSize = EditorGUILayout.IntField(m_PointSize);
+                    GUILayout.EndHorizontal();
+                }
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                // FONT PADDING
+                EditorGUI.BeginChangeCheck();
+                m_Padding = EditorGUILayout.IntField("Padding", m_Padding);
+                m_Padding = (int)Mathf.Clamp(m_Padding, 0f, 64f);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                // FONT PACKING METHOD SELECTION
+                EditorGUI.BeginChangeCheck();
+                m_PackingMode = (FontPackingModes)EditorGUILayout.EnumPopup("Packing Method", m_PackingMode);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                // FONT ATLAS RESOLUTION SELECTION
+                GUILayout.BeginHorizontal();
+                GUI.changed = false;
+
+                EditorGUI.BeginChangeCheck();
+                EditorGUILayout.PrefixLabel("Atlas Resolution");
+                m_AtlasWidth = EditorGUILayout.IntPopup(m_AtlasWidth, m_FontResolutionLabels, m_FontAtlasResolutions);
+                m_AtlasHeight = EditorGUILayout.IntPopup(m_AtlasHeight, m_FontResolutionLabels, m_FontAtlasResolutions);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                GUILayout.EndHorizontal();
+
+
+                // FONT CHARACTER SET SELECTION
+                EditorGUI.BeginChangeCheck();
+                bool hasSelectionChanged = false;
+                m_CharacterSetSelectionMode = EditorGUILayout.Popup("Character Set", m_CharacterSetSelectionMode, m_FontCharacterSets);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_CharacterSequence = "";
+                    hasSelectionChanged = true;
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                switch (m_CharacterSetSelectionMode)
+                {
+                    case 0: // ASCII
+                        //characterSequence = "32 - 126, 130, 132 - 135, 139, 145 - 151, 153, 155, 161, 166 - 167, 169 - 174, 176, 181 - 183, 186 - 187, 191, 8210 - 8226, 8230, 8240, 8242 - 8244, 8249 - 8250, 8252 - 8254, 8260, 8286";
+                        m_CharacterSequence = "32 - 126, 160, 8203, 8230, 9633";
+                        break;
+
+                    case 1: // EXTENDED ASCII
+                        m_CharacterSequence = "32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633";
+                        // Could add 9632 for missing glyph
+                        break;
+
+                    case 2: // Lowercase
+                        m_CharacterSequence = "32 - 64, 91 - 126, 160";
+                        break;
+
+                    case 3: // Uppercase
+                        m_CharacterSequence = "32 - 96, 123 - 126, 160";
+                        break;
+
+                    case 4: // Numbers & Symbols
+                        m_CharacterSequence = "32 - 64, 91 - 96, 123 - 126, 160";
+                        break;
+
+                    case 5: // Custom Range
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                        GUILayout.Label("Enter a sequence of decimal values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label);
+                        GUILayout.Space(10f);
+
+                        EditorGUI.BeginChangeCheck();
+                        m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset;
+                        if (EditorGUI.EndChangeCheck() || hasSelectionChanged)
+                        {
+                            if (m_ReferencedFontAsset != null)
+                                m_CharacterSequence = TMP_EditorUtility.GetDecimalCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset));
+                            
+                            m_IsFontAtlasInvalid = true;
+                        }
+
+                        // Filter out unwanted characters.
+                        char chr = Event.current.character;
+                        if ((chr < '0' || chr > '9') && (chr < ',' || chr > '-'))
+                        {
+                            Event.current.character = '\0';
+                        }
+                        GUILayout.Label("Character Sequence (Decimal)", EditorStyles.boldLabel);
+                        EditorGUI.BeginChangeCheck();
+                        m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true));
+                        if (EditorGUI.EndChangeCheck())
+                        {
+                            m_IsFontAtlasInvalid = true;
+                        }
+                        
+                        EditorGUILayout.EndVertical();
+                        break;
+
+                    case 6: // Unicode HEX Range
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                        GUILayout.Label("Enter a sequence of Unicode (hex) values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label);
+                        GUILayout.Space(10f);
+
+                        EditorGUI.BeginChangeCheck();
+                        m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset;
+                        if (EditorGUI.EndChangeCheck() || hasSelectionChanged)
+                        {
+                            if (m_ReferencedFontAsset != null)
+                                m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset));
+                            
+                            m_IsFontAtlasInvalid = true;
+                        }
+
+                        // Filter out unwanted characters.
+                        chr = Event.current.character;
+                        if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F') && (chr < ',' || chr > '-'))
+                        {
+                            Event.current.character = '\0';
+                        }
+                        GUILayout.Label("Character Sequence (Hex)", EditorStyles.boldLabel);
+                        EditorGUI.BeginChangeCheck();
+                        m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true));
+                        if (EditorGUI.EndChangeCheck())
+                        {
+                            m_IsFontAtlasInvalid = true;
+                        }
+
+                        EditorGUILayout.EndVertical();
+                        break;
+
+                    case 7: // Characters from Font Asset
+                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+                        GUILayout.Label("Type the characters to be included in the font asset or retrieve them from another font asset.", TMP_UIStyleManager.label);
+                        GUILayout.Space(10f);
+
+                        EditorGUI.BeginChangeCheck();
+                        m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset;
+                        if (EditorGUI.EndChangeCheck() || hasSelectionChanged)
+                        {
+                            if (m_ReferencedFontAsset != null)
+                                m_CharacterSequence = TMP_FontAsset.GetCharacters(m_ReferencedFontAsset);
+                            
+                            m_IsFontAtlasInvalid = true;
+                        }
+
+                        EditorGUI.indentLevel = 0;
+                        
+                        GUILayout.Label("Custom Character List", EditorStyles.boldLabel);
+                        EditorGUI.BeginChangeCheck();
+                        m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true));
+                        if (EditorGUI.EndChangeCheck())
+                        {
+                            m_IsFontAtlasInvalid = true;
+                        }
+                        EditorGUILayout.EndVertical();
+                        break;
+
+                    case 8: // Character List from File
+                        EditorGUI.BeginChangeCheck();
+                        m_CharactersFromFile = EditorGUILayout.ObjectField("Character File", m_CharactersFromFile, typeof(TextAsset), false) as TextAsset;
+                        if (EditorGUI.EndChangeCheck())
+                        {
+                            m_IsFontAtlasInvalid = true;
+                        }
+
+                        if (m_CharactersFromFile != null)
+                        {
+                            Regex rx = new Regex(@"(?<!\\)(?:\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8})");
+
+                            m_CharacterSequence = rx.Replace(m_CharactersFromFile.text,
+                                match =>
+                                {
+                                    if (match.Value.StartsWith("\\U"))
+                                        return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\U", ""), NumberStyles.HexNumber));
+
+                                    return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\u", ""), NumberStyles.HexNumber));
+                                });
+                        }
+                        break;
+                }
+
+                // FONT STYLE SELECTION
+                //GUILayout.BeginHorizontal();
+                //EditorGUI.BeginChangeCheck();
+                ////m_FontStyle = (FaceStyles)EditorGUILayout.EnumPopup("Font Style", m_FontStyle, GUILayout.Width(225));
+                ////m_FontStyleValue = EditorGUILayout.IntField((int)m_FontStyleValue);
+                //if (EditorGUI.EndChangeCheck())
+                //{
+                //    m_IsFontAtlasInvalid = true;
+                //}
+                //GUILayout.EndHorizontal();
+
+                // Render Mode Selection
+                CheckForLegacyGlyphRenderMode();
+
+                EditorGUI.BeginChangeCheck();
+                m_GlyphRenderMode = (GlyphRenderMode)EditorGUILayout.EnumPopup("Render Mode", m_GlyphRenderMode);
+                if (EditorGUI.EndChangeCheck())
+                {
+                    m_IsFontAtlasInvalid = true;
+                }
+
+                m_IncludeFontFeatures = EditorGUILayout.Toggle("Get Kerning Pairs", m_IncludeFontFeatures);
+
+                EditorGUILayout.Space();
+            }
+
+            EditorGUI.EndDisabledGroup();
+
+            if (!string.IsNullOrEmpty(m_WarningMessage))
+            {
+                EditorGUILayout.HelpBox(m_WarningMessage, MessageType.Warning);
+            }
+            
+            GUI.enabled = m_SourceFontFile != null && !m_IsProcessing && !m_IsGenerationDisabled; // Enable Preview if we are not already rendering a font.
+            if (GUILayout.Button("Generate Font Atlas") && GUI.enabled)
+            {
+                if (!m_IsProcessing && m_SourceFontFile != null)
+                {
+                    DestroyImmediate(m_FontAtlasTexture);
+                    m_FontAtlasTexture = null;
+                    m_SavedFontAtlas = null;
+
+                    // Initialize font engine
+                    FontEngineError errorCode = FontEngine.InitializeFontEngine();
+                    if (errorCode != FontEngineError.Success)
+                    {
+                        Debug.Log("Font Asset Creator - Error [" + errorCode + "] has occurred while Initializing the FreeType Library.");
+                    }
+                    
+                    // Get file path of the source font file.
+                    string fontPath = AssetDatabase.GetAssetPath(m_SourceFontFile);
+
+                    if (errorCode == FontEngineError.Success)
+                    {
+                        errorCode = FontEngine.LoadFontFace(fontPath);
+
+                        if (errorCode != FontEngineError.Success)
+                        {
+                            Debug.Log("Font Asset Creator - Error Code [" + errorCode + "] has occurred trying to load the [" + m_SourceFontFile.name + "] font file. This typically results from the use of an incompatible or corrupted font file.");
+                        }
+                    }
+
+
+                    // Define an array containing the characters we will render.
+                    if (errorCode == FontEngineError.Success)
+                    {
+                        uint[] characterSet = null;
+
+                        // Get list of characters that need to be packed and rendered to the atlas texture.
+                        if (m_CharacterSetSelectionMode == 7 || m_CharacterSetSelectionMode == 8)
+                        {
+                            List<uint> char_List = new List<uint>();
+
+                            for (int i = 0; i < m_CharacterSequence.Length; i++)
+                            {
+                                uint unicode = m_CharacterSequence[i];
+
+                                // Handle surrogate pairs
+                                if (i < m_CharacterSequence.Length - 1 && char.IsHighSurrogate((char)unicode) && char.IsLowSurrogate(m_CharacterSequence[i + 1]))
+                                {
+                                    unicode = (uint)char.ConvertToUtf32(m_CharacterSequence[i], m_CharacterSequence[i + 1]);
+                                    i += 1;
+                                }
+
+                                // Check to make sure we don't include duplicates
+                                if (char_List.FindIndex(item => item == unicode) == -1)
+                                    char_List.Add(unicode);
+                            }
+
+                            characterSet = char_List.ToArray();
+                        }
+                        else if (m_CharacterSetSelectionMode == 6)
+                        {
+                            characterSet = ParseHexNumberSequence(m_CharacterSequence);
+                        }
+                        else
+                        {
+                            characterSet = ParseNumberSequence(m_CharacterSequence);
+                        }
+
+                        m_CharacterCount = characterSet.Length;
+                        
+                        m_AtlasGenerationProgress = 0;
+                        m_IsProcessing = true;
+                        m_IsGenerationCancelled = false;
+
+                        GlyphLoadFlags glyphLoadFlags = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_HINTED) == GlyphRasterModes.RASTER_MODE_HINTED ? GlyphLoadFlags.LOAD_RENDER : GlyphLoadFlags.LOAD_RENDER | GlyphLoadFlags.LOAD_NO_HINTING;
+
+                        // 
+                        AutoResetEvent autoEvent = new AutoResetEvent(false);
+
+                        // Worker thread to pack glyphs in the given texture space.
+                        ThreadPool.QueueUserWorkItem(PackGlyphs =>
+                        {
+                            // Start Stop Watch
+                            m_StopWatch = System.Diagnostics.Stopwatch.StartNew();
+
+                            // Clear the various lists used in the generation process.
+                            m_AvailableGlyphsToAdd.Clear();
+                            m_MissingCharacters.Clear();
+                            m_ExcludedCharacters.Clear();
+                            m_CharacterLookupMap.Clear();
+                            m_GlyphLookupMap.Clear();
+                            m_GlyphsToPack.Clear();
+                            m_GlyphsPacked.Clear();
+
+                            // Check if requested characters are available in the source font file.
+                            for (int i = 0; i < characterSet.Length; i++)
+                            {
+                                uint unicode = characterSet[i];
+                                uint glyphIndex;
+
+                                if (FontEngine.TryGetGlyphIndex(unicode, out glyphIndex))
+                                {
+                                    // Skip over potential duplicate characters.
+                                    if (m_CharacterLookupMap.ContainsKey(unicode))
+                                        continue;
+
+                                    // Add character to character lookup map.
+                                    m_CharacterLookupMap.Add(unicode, glyphIndex);
+
+                                    // Skip over potential duplicate glyph references.
+                                    if (m_GlyphLookupMap.ContainsKey(glyphIndex))
+                                    {
+                                        // Add additional glyph reference for this character.
+                                        m_GlyphLookupMap[glyphIndex].Add(unicode);
+                                        continue;
+                                    }
+
+                                    // Add glyph reference to glyph lookup map.
+                                    m_GlyphLookupMap.Add(glyphIndex, new List<uint>() { unicode });
+
+                                    // Add glyph index to list of glyphs to add to texture.
+                                    m_AvailableGlyphsToAdd.Add(glyphIndex);
+                                }
+                                else
+                                {
+                                    // Add Unicode to list of missing characters.
+                                    m_MissingCharacters.Add(unicode);
+                                }
+                            }
+
+                            // Pack available glyphs in the provided texture space.
+                            if (m_AvailableGlyphsToAdd.Count > 0)
+                            {
+                                int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+
+                                if (m_PointSizeSamplingMode == 0) // Auto-Sizing Point Size Mode
+                                {
+                                    // Estimate min / max range for auto sizing of point size.
+                                    int minPointSize = 0;
+                                    int maxPointSize = (int)Mathf.Sqrt((m_AtlasWidth * m_AtlasHeight) / m_AvailableGlyphsToAdd.Count) * 3;
+
+                                    m_PointSize = (maxPointSize + minPointSize) / 2;
+
+                                    bool optimumPointSizeFound = false;
+                                    for (int iteration = 0; iteration < 15 && optimumPointSizeFound == false; iteration++)
+                                    {
+                                        m_AtlasGenerationProgressLabel = "Packing glyphs - Pass (" + iteration + ")";
+
+                                        FontEngine.SetFaceSize(m_PointSize);
+
+                                        m_GlyphsToPack.Clear();
+                                        m_GlyphsPacked.Clear();
+
+                                        m_FreeGlyphRects.Clear();
+                                        m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier));
+                                        m_UsedGlyphRects.Clear();
+
+                                        for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++)
+                                        {
+                                            uint glyphIndex = m_AvailableGlyphsToAdd[i];
+                                            Glyph glyph;
+
+                                            if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out glyph))
+                                            {
+                                                if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0)
+                                                {
+                                                    m_GlyphsToPack.Add(glyph);
+                                                }
+                                                else
+                                                {
+                                                    m_GlyphsPacked.Add(glyph);
+                                                }
+                                            }
+                                        }
+
+                                        FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects);
+
+                                        if (m_IsGenerationCancelled)
+                                        {
+                                            DestroyImmediate(m_FontAtlasTexture);
+                                            m_FontAtlasTexture = null;
+                                            return;
+                                        }
+
+                                        //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "].");
+
+                                        if (m_GlyphsToPack.Count > 0)
+                                        {
+                                            if (m_PointSize > minPointSize)
+                                            {
+                                                maxPointSize = m_PointSize;
+                                                m_PointSize = (m_PointSize + minPointSize) / 2;
+
+                                                //Debug.Log("Decreasing point size from [" + maxPointSize + "] to [" + m_PointSize + "].");
+                                            }
+                                        }
+                                        else
+                                        {
+                                            if (maxPointSize - minPointSize > 1 && m_PointSize < maxPointSize)
+                                            {
+                                                minPointSize = m_PointSize;
+                                                m_PointSize = (m_PointSize + maxPointSize) / 2;
+
+                                                //Debug.Log("Increasing point size from [" + minPointSize + "] to [" + m_PointSize + "].");
+                                            }
+                                            else
+                                            {
+                                                //Debug.Log("[" + iteration + "] iterations to find the optimum point size of : [" + m_PointSize + "].");
+                                                optimumPointSizeFound = true;
+                                            }
+                                        }
+                                    }
+                                }
+                                else // Custom Point Size Mode
+                                {
+                                    m_AtlasGenerationProgressLabel = "Packing glyphs...";
+
+                                    // Set point size
+                                    FontEngine.SetFaceSize(m_PointSize);
+
+                                    m_GlyphsToPack.Clear();
+                                    m_GlyphsPacked.Clear();
+
+                                    m_FreeGlyphRects.Clear();
+                                    m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier));
+                                    m_UsedGlyphRects.Clear();
+
+                                    for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++)
+                                    {
+                                        uint glyphIndex = m_AvailableGlyphsToAdd[i];
+                                        Glyph glyph;
+
+                                        if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out glyph))
+                                        {
+                                            if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0)
+                                            {
+                                                m_GlyphsToPack.Add(glyph);
+                                            }
+                                            else
+                                            {
+                                                m_GlyphsPacked.Add(glyph);
+                                            }
+                                        }
+                                    }
+
+                                    FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects);
+
+                                    if (m_IsGenerationCancelled)
+                                    {
+                                        DestroyImmediate(m_FontAtlasTexture);
+                                        m_FontAtlasTexture = null;
+                                        return;
+                                    }
+                                    //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "].");
+                                }
+
+                            }
+                            else
+                            {
+                                int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+
+                                FontEngine.SetFaceSize(m_PointSize);
+
+                                m_GlyphsToPack.Clear();
+                                m_GlyphsPacked.Clear();
+
+                                m_FreeGlyphRects.Clear();
+                                m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier));
+                                m_UsedGlyphRects.Clear();
+                            }
+
+                            //Stop StopWatch
+                            m_StopWatch.Stop();
+                            m_GlyphPackingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds;
+                            Debug.Log("Glyph packing completed in: " + m_GlyphPackingGenerationTime.ToString("0.000 ms."));
+                            m_StopWatch.Reset();
+
+                            m_FontCharacterTable.Clear();
+                            m_FontGlyphTable.Clear();
+                            m_GlyphsToRender.Clear();
+
+                            // Add glyphs and characters successfully added to texture to their respective font tables.
+                            foreach (Glyph glyph in m_GlyphsPacked)
+                            {
+                                uint glyphIndex = glyph.index;
+
+                                m_FontGlyphTable.Add(glyph);
+
+                                // Add glyphs to list of glyphs that need to be rendered.
+                                if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0)
+                                    m_GlyphsToRender.Add(glyph);
+                        
+                                foreach (uint unicode in m_GlyphLookupMap[glyphIndex])
+                                {
+                                    // Create new Character
+                                    m_FontCharacterTable.Add(new TMP_Character(unicode, glyph));
+                                }
+                            }
+
+                            // 
+                            foreach (Glyph glyph in m_GlyphsToPack)
+                            {
+                                foreach (uint unicode in m_GlyphLookupMap[glyph.index])
+                                {
+                                    m_ExcludedCharacters.Add(unicode);
+                                }
+                            }
+
+                            // Get the face info for the current sampling point size.
+                            m_FaceInfo = FontEngine.GetFaceInfo();
+
+                            autoEvent.Set();
+                        });
+
+                        // Worker thread to render glyphs in texture buffer.
+                        ThreadPool.QueueUserWorkItem(RenderGlyphs =>
+                        {
+                            autoEvent.WaitOne();
+
+                            // Start Stop Watch
+                            m_StopWatch = System.Diagnostics.Stopwatch.StartNew();
+
+                            m_IsRenderingDone = false;
+
+                            // Allocate texture data
+                            m_AtlasTextureBuffer = new byte[m_AtlasWidth * m_AtlasHeight];
+
+                            m_AtlasGenerationProgressLabel = "Rendering glyphs...";
+
+                            // Render and add glyphs to the given atlas texture.
+                            if (m_GlyphsToRender.Count > 0)
+                            {
+                                FontEngine.RenderGlyphsToTexture(m_GlyphsToRender, m_Padding, m_GlyphRenderMode, m_AtlasTextureBuffer, m_AtlasWidth, m_AtlasHeight);
+                            }
+
+                            m_IsRenderingDone = true;
+
+                            // Stop StopWatch
+                            m_StopWatch.Stop();
+                            m_GlyphRenderingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds;
+                            Debug.Log("Font Atlas generation completed in: " + m_GlyphRenderingGenerationTime.ToString("0.000 ms."));
+                            m_StopWatch.Reset();
+                        });
+                    }
+
+                    SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings());
+                }
+            }
+
+            // FONT RENDERING PROGRESS BAR
+            GUILayout.Space(1);
+            Rect progressRect = EditorGUILayout.GetControlRect(false, 20);
+
+            GUI.enabled = true;
+            progressRect.width -= 22;
+            EditorGUI.ProgressBar(progressRect, Mathf.Max(0.01f, m_AtlasGenerationProgress), m_AtlasGenerationProgressLabel);
+            progressRect.x = progressRect.x + progressRect.width + 2;
+            progressRect.y -= 1;
+            progressRect.width = 20;
+            progressRect.height = 20;
+
+            GUI.enabled = m_IsProcessing;
+            if (GUI.Button(progressRect, "X"))
+            {
+                FontEngine.SendCancellationRequest();
+                m_AtlasGenerationProgress = 0;
+                m_IsProcessing = false;
+                m_IsGenerationCancelled = true;
+            }
+            GUILayout.Space(5);
+
+            // FONT STATUS & INFORMATION
+            GUI.enabled = true;
+            
+            GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(200));
+            m_OutputScrollPosition = EditorGUILayout.BeginScrollView(m_OutputScrollPosition);
+            EditorGUILayout.LabelField(m_OutputFeedback, TMP_UIStyleManager.label);
+            EditorGUILayout.EndScrollView();
+            GUILayout.EndVertical();
+
+            // SAVE TEXTURE & CREATE and SAVE FONT XML FILE
+            GUI.enabled = m_FontAtlasTexture != null && !m_IsProcessing;    // Enable Save Button if font_Atlas is not Null.
+            
+            EditorGUILayout.BeginHorizontal();
+                
+            if (GUILayout.Button("Save") && GUI.enabled)
+            {
+                if (m_SelectedFontAsset == null)
+                {
+                    if (m_LegacyFontAsset != null)
+                        SaveNewFontAssetWithSameName(m_LegacyFontAsset);
+                    else
+                        SaveNewFontAsset(m_SourceFontFile);
+                }
+                else
+                {
+                    // Save over exiting Font Asset
+                    string filePath = Path.GetFullPath(AssetDatabase.GetAssetPath(m_SelectedFontAsset)).Replace('\\', '/');
+
+                    if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+                            Save_Bitmap_FontAsset(filePath);
+                        else
+                        Save_SDF_FontAsset(filePath);
+                }
+            }
+            if (GUILayout.Button("Save as...") && GUI.enabled)
+            {
+                if (m_SelectedFontAsset == null)
+                {
+                    SaveNewFontAsset(m_SourceFontFile);
+                }
+                else
+                {
+                    SaveNewFontAssetWithSameName(m_SelectedFontAsset);
+                }
+            }
+                
+            EditorGUILayout.EndHorizontal();
+
+            EditorGUILayout.Space();
+
+            EditorGUILayout.EndVertical();
+            
+            GUI.enabled = true; // Re-enable GUI
+
+            if (position.height > position.width || position.width < k_TwoColumnControlsWidth)
+            {
+                DrawPreview();
+                GUILayout.Space(5);
+            }
+            
+            EditorGUILayout.EndScrollView();
+
+            if (m_IsFontAtlasInvalid)
+                ClearGeneratedData();
+        }
+
+
+        /// <summary>
+        /// Clear the previously generated data.
+        /// </summary>
+        void ClearGeneratedData()
+        {
+            m_IsFontAtlasInvalid = false;
+
+            if (m_FontAtlasTexture != null && !EditorUtility.IsPersistent(m_FontAtlasTexture))
+            {
+                DestroyImmediate(m_FontAtlasTexture);
+                m_FontAtlasTexture = null;
+            }
+        
+            m_AtlasGenerationProgressLabel = string.Empty;
+            m_AtlasGenerationProgress = 0;
+            m_SavedFontAtlas = null;
+
+            m_OutputFeedback = string.Empty;
+            m_WarningMessage = string.Empty;
+        }
+
+
+        /// <summary>
+        /// Function to update the feedback window showing the results of the latest generation.
+        /// </summary>
+        void UpdateRenderFeedbackWindow()
+        {
+            m_PointSize = m_FaceInfo.pointSize;
+
+            string missingGlyphReport = string.Empty;
+
+            //string colorTag = m_FontCharacterTable.Count == m_CharacterCount ? "<color=#C0ffff>" : "<color=#ffff00>";
+            string colorTag2 = "<color=#C0ffff>";
+
+            missingGlyphReport = "Font: <b>" + colorTag2 + m_FaceInfo.familyName + "</color></b>  Style: <b>" + colorTag2 + m_FaceInfo.styleName + "</color></b>";
+
+            missingGlyphReport += "\nPoint Size: <b>" + colorTag2 + m_FaceInfo.pointSize + "</color></b>   SP/PD Ratio: <b>" + colorTag2 +  ((float)m_Padding / m_FaceInfo.pointSize).ToString("0.0%" + "</color></b>");
+
+            missingGlyphReport += "\n\nCharacters included: <color=#ffff00><b>" + m_FontCharacterTable.Count + "/" + m_CharacterCount + "</b></color>";
+            missingGlyphReport += "\nMissing characters: <color=#ffff00><b>" + m_MissingCharacters.Count + "</b></color>";
+            missingGlyphReport += "\nExcluded characters: <color=#ffff00><b>" + m_ExcludedCharacters.Count + "</b></color>";
+
+            // Report characters missing from font file
+            missingGlyphReport += "\n\n<b><color=#ffff00>Characters missing from font file:</color></b>";
+            missingGlyphReport += "\n----------------------------------------";
+            
+            m_OutputFeedback = missingGlyphReport;
+
+            for (int i = 0; i < m_MissingCharacters.Count; i++)
+            {
+                missingGlyphReport += "\nID: <color=#C0ffff>" + m_MissingCharacters[i] + "\t</color>Hex: <color=#C0ffff>" + m_MissingCharacters[i].ToString("X") + "\t</color>Char [<color=#C0ffff>" + (char)m_MissingCharacters[i] + "</color>]";
+
+                if (missingGlyphReport.Length < 16300)
+                    m_OutputFeedback = missingGlyphReport;
+            }
+
+            // Report characters that did not fit in the atlas texture
+            missingGlyphReport += "\n\n<b><color=#ffff00>Characters excluded from packing:</color></b>";
+            missingGlyphReport += "\n----------------------------------------";
+
+            for (int i = 0; i < m_ExcludedCharacters.Count; i++)
+                {
+                missingGlyphReport += "\nID: <color=#C0ffff>" + m_ExcludedCharacters[i] + "\t</color>Hex: <color=#C0ffff>" + m_ExcludedCharacters[i].ToString("X") + "\t</color>Char [<color=#C0ffff>" + (char)m_ExcludedCharacters[i] + "</color>]";
+
+                    if (missingGlyphReport.Length < 16300)
+                    m_OutputFeedback = missingGlyphReport;
+            }
+
+            if (missingGlyphReport.Length > 16300)
+                m_OutputFeedback += "\n\n<color=#ffff00>Report truncated.</color>\n<color=#c0ffff>See</color> \"TextMesh Pro\\Glyph Report.txt\"";
+
+            // Save Missing Glyph Report file
+            if (Directory.Exists("Assets/TextMesh Pro"))
+            {
+                missingGlyphReport = System.Text.RegularExpressions.Regex.Replace(missingGlyphReport, @"<[^>]*>", string.Empty);
+                File.WriteAllText("Assets/TextMesh Pro/Glyph Report.txt", missingGlyphReport);
+                AssetDatabase.Refresh();
+            }
+        }
+
+
+        void CreateFontAtlasTexture()
+        {
+            if (m_FontAtlasTexture != null)
+                DestroyImmediate(m_FontAtlasTexture);
+
+            m_FontAtlasTexture = new Texture2D(m_AtlasWidth, m_AtlasHeight, TextureFormat.Alpha8, false, true);
+
+            Color32[] colors = new Color32[m_AtlasWidth * m_AtlasHeight];
+
+            for (int i = 0; i < colors.Length; i++)
+            {
+                byte c = m_AtlasTextureBuffer[i];
+                colors[i] = new Color32(c, c, c, c);
+            }
+
+            // Clear allocation of 
+            m_AtlasTextureBuffer = null;
+
+            if ((m_GlyphRenderMode & GlyphRenderMode.RASTER) == GlyphRenderMode.RASTER || (m_GlyphRenderMode & GlyphRenderMode.RASTER_HINTED) == GlyphRenderMode.RASTER_HINTED)
+                m_FontAtlasTexture.filterMode = FilterMode.Point;
+
+            m_FontAtlasTexture.SetPixels32(colors, 0);
+            m_FontAtlasTexture.Apply(false, false);
+
+            // Saving File for Debug
+            //var pngData = m_FontAtlasTexture.EncodeToPNG();
+            //File.WriteAllBytes("Assets/Textures/Debug Font Texture.png", pngData);
+        }
+
+
+        /// <summary>
+        /// Open Save Dialog to provide the option save the font asset using the name of the source font file. This also appends SDF to the name if using any of the SDF Font Asset creation modes.
+        /// </summary>
+        /// <param name="sourceObject"></param>
+        void SaveNewFontAsset(Object sourceObject)
+        {
+            string filePath;
+            
+            // Save new Font Asset and open save file requester at Source Font File location.
+            string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName;
+
+            if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset");
+
+                if (filePath.Length == 0)
+                    return;
+
+                Save_Bitmap_FontAsset(filePath);
+            }
+            else
+            {
+                filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name + " SDF", "asset");
+
+                if (filePath.Length == 0)
+                    return;
+
+                Save_SDF_FontAsset(filePath);
+            }
+        }
+
+
+        /// <summary>
+        /// Open Save Dialog to provide the option to save the font asset under the same name.
+        /// </summary>
+        /// <param name="sourceObject"></param>
+        void SaveNewFontAssetWithSameName(Object sourceObject)
+        {
+            string filePath;
+
+            // Save new Font Asset and open save file requester at Source Font File location.
+            string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName;
+
+            filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset");
+
+            if (filePath.Length == 0)
+                return;
+
+            if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                Save_Bitmap_FontAsset(filePath);
+            }
+            else
+            {
+                Save_SDF_FontAsset(filePath);
+            }
+        }
+
+
+        void Save_Bitmap_FontAsset(string filePath)
+        {
+            filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath.
+
+            string dataPath = Application.dataPath;
+
+            if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1)
+            {
+                Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\"");
+                return;
+            }
+
+            string relativeAssetPath = filePath.Substring(dataPath.Length - 6);
+            string tex_DirName = Path.GetDirectoryName(relativeAssetPath);
+            string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath);
+            string tex_Path_NoExt = tex_DirName + "/" + tex_FileName;
+
+            // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one.
+            TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(tex_Path_NoExt + ".asset", typeof(TMP_FontAsset)) as TMP_FontAsset;
+            if (fontAsset == null)
+            {
+                //Debug.Log("Creating TextMeshPro font asset!");
+                fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>(); // Create new TextMeshPro Font Asset.
+                AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset");
+
+                // Set version number of font asset
+                fontAsset.version = "1.1.0";
+
+                //Set Font Asset Type
+                fontAsset.atlasRenderMode = m_GlyphRenderMode;
+
+                // Reference to the source font file GUID.
+                fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile));
+
+                // Add FaceInfo to Font Asset
+                fontAsset.faceInfo = m_FaceInfo;
+
+                // Add GlyphInfo[] to Font Asset
+                fontAsset.glyphTable = m_FontGlyphTable;
+
+                // Add CharacterTable[] to font asset.
+                fontAsset.characterTable = m_FontCharacterTable;
+
+                // Sort glyph and character tables.
+                fontAsset.SortGlyphAndCharacterTables();
+
+                // Get and Add Kerning Pairs to Font Asset
+                if (m_IncludeFontFeatures)
+                    fontAsset.fontFeatureTable = GetKerningTable();
+
+
+                // Add Font Atlas as Sub-Asset
+                fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture };
+                m_FontAtlasTexture.name = tex_FileName + " Atlas";
+                fontAsset.atlasWidth = m_AtlasWidth;
+                fontAsset.atlasHeight = m_AtlasHeight;
+                fontAsset.atlasPadding = m_Padding;
+
+                AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset);
+
+                // Create new Material and Add it as Sub-Asset
+                Shader default_Shader = Shader.Find("TextMeshPro/Bitmap"); // m_shaderSelection;
+                Material tmp_material = new Material(default_Shader);
+                tmp_material.name = tex_FileName + " Material";
+                tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture);
+                fontAsset.material = tmp_material;
+
+                AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+            }
+            else
+            {
+                // Find all Materials referencing this font atlas.
+                Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset);
+
+                // Set version number of font asset
+                fontAsset.version = "1.1.0";
+
+                // Special handling to remove legacy font asset data
+                if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0)
+                    fontAsset.m_glyphInfoList = null;
+
+                // Destroy Assets that will be replaced.
+                if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0)
+                    DestroyImmediate(fontAsset.atlasTextures[0], true);
+
+                //Set Font Asset Type
+                fontAsset.atlasRenderMode = m_GlyphRenderMode;
+
+                // Add FaceInfo to Font Asset
+                fontAsset.faceInfo = m_FaceInfo;
+
+                // Add GlyphInfo[] to Font Asset
+                fontAsset.glyphTable = m_FontGlyphTable;
+
+                // Add CharacterTable[] to font asset.
+                fontAsset.characterTable = m_FontCharacterTable;
+
+                // Sort glyph and character tables.
+                fontAsset.SortGlyphAndCharacterTables();
+
+                // Get and Add Kerning Pairs to Font Asset
+                if (m_IncludeFontFeatures)
+                    fontAsset.fontFeatureTable = GetKerningTable();
+
+                // Add Font Atlas as Sub-Asset
+                fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture };
+                m_FontAtlasTexture.name = tex_FileName + " Atlas";
+                fontAsset.atlasWidth = m_AtlasWidth;
+                fontAsset.atlasHeight = m_AtlasHeight;
+                fontAsset.atlasPadding = m_Padding;
+
+                // Special handling due to a bug in earlier versions of Unity.
+                m_FontAtlasTexture.hideFlags = HideFlags.None;
+                fontAsset.material.hideFlags = HideFlags.None;
+
+                AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset);
+
+                // Assign new font atlas texture to the existing material.
+                fontAsset.material.SetTexture(ShaderUtilities.ID_MainTex, fontAsset.atlasTextures[0]);
+
+                // Update the Texture reference on the Material
+                for (int i = 0; i < material_references.Length; i++)
+                {
+                    material_references[i].SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture);
+                }
+            }
+
+            // Add list of GlyphRects to font asset.
+            fontAsset.freeGlyphRects = m_FreeGlyphRects;
+            fontAsset.usedGlyphRects = m_UsedGlyphRects;
+
+            // Save Font Asset creation settings
+            m_SelectedFontAsset = fontAsset;
+            m_LegacyFontAsset = null;
+            fontAsset.creationSettings = SaveFontCreationSettings();
+
+            AssetDatabase.SaveAssets();
+
+            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset));  // Re-import font asset to get the new updated version.
+
+            //EditorUtility.SetDirty(font_asset);
+            fontAsset.ReadFontAssetDefinition();
+
+            AssetDatabase.Refresh();
+
+            m_FontAtlasTexture = null;
+
+            // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET
+            TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset);
+        }
+
+
+        void Save_SDF_FontAsset(string filePath)
+        {
+            filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath.
+
+            string dataPath = Application.dataPath;
+
+            if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1)
+            {
+                Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\"");
+                return;
+            }
+
+            string relativeAssetPath = filePath.Substring(dataPath.Length - 6);
+            string tex_DirName = Path.GetDirectoryName(relativeAssetPath);
+            string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath);
+            string tex_Path_NoExt = tex_DirName + "/" + tex_FileName;
+
+
+            // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one.
+            TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(tex_Path_NoExt + ".asset");
+            if (fontAsset == null)
+            {
+                //Debug.Log("Creating TextMeshPro font asset!");
+                fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>(); // Create new TextMeshPro Font Asset.
+                AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset");
+
+                // Set version number of font asset
+                fontAsset.version = "1.1.0";
+
+                // Reference to source font file GUID.
+                fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile));
+
+                //Set Font Asset Type
+                fontAsset.atlasRenderMode = m_GlyphRenderMode;
+
+                // Add FaceInfo to Font Asset
+                fontAsset.faceInfo = m_FaceInfo;
+
+                // Add GlyphInfo[] to Font Asset
+                fontAsset.glyphTable = m_FontGlyphTable;
+
+                // Add CharacterTable[] to font asset.
+                fontAsset.characterTable = m_FontCharacterTable;
+
+                // Sort glyph and character tables.
+                fontAsset.SortGlyphAndCharacterTables();
+
+                // Get and Add Kerning Pairs to Font Asset
+                if (m_IncludeFontFeatures)
+                    fontAsset.fontFeatureTable = GetKerningTable();
+
+                // Add Font Atlas as Sub-Asset
+                fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture };
+                m_FontAtlasTexture.name = tex_FileName + " Atlas";
+                fontAsset.atlasWidth = m_AtlasWidth;
+                fontAsset.atlasHeight = m_AtlasHeight;
+                fontAsset.atlasPadding = m_Padding;
+
+                AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset);
+
+                // Create new Material and Add it as Sub-Asset
+                Shader default_Shader = Shader.Find("TextMeshPro/Distance Field");
+                Material tmp_material = new Material(default_Shader);
+
+                tmp_material.name = tex_FileName + " Material";
+                tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, m_FontAtlasTexture.width);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, m_FontAtlasTexture.height);
+
+                int spread = m_Padding + 1;
+                tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, spread); // Spread = Padding for Brute Force SDF.
+
+                tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+                tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+                fontAsset.material = tmp_material;
+
+                AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+            }
+            else
+            {
+                // Find all Materials referencing this font atlas.
+                Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset);
+
+                // Destroy Assets that will be replaced.
+                if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0)
+                    DestroyImmediate(fontAsset.atlasTextures[0], true);
+
+                // Set version number of font asset
+                fontAsset.version = "1.1.0";
+
+                // Special handling to remove legacy font asset data
+                if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0)
+                    fontAsset.m_glyphInfoList = null;
+
+                //Set Font Asset Type
+                fontAsset.atlasRenderMode = m_GlyphRenderMode;
+
+                // Add FaceInfo to Font Asset  
+                fontAsset.faceInfo = m_FaceInfo;
+
+                // Add GlyphInfo[] to Font Asset
+                fontAsset.glyphTable = m_FontGlyphTable;
+
+                // Add CharacterTable[] to font asset.
+                fontAsset.characterTable = m_FontCharacterTable;
+
+                // Sort glyph and character tables.
+                fontAsset.SortGlyphAndCharacterTables();
+
+                // Get and Add Kerning Pairs to Font Asset
+                // TODO: Check and preserve existing adjustment pairs.
+                if (m_IncludeFontFeatures)
+                    fontAsset.fontFeatureTable = GetKerningTable();
+
+                // Add Font Atlas as Sub-Asset
+                fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture };
+                m_FontAtlasTexture.name = tex_FileName + " Atlas";
+                fontAsset.atlasWidth = m_AtlasWidth;
+                fontAsset.atlasHeight = m_AtlasHeight;
+                fontAsset.atlasPadding = m_Padding;
+
+                // Special handling due to a bug in earlier versions of Unity.
+                m_FontAtlasTexture.hideFlags = HideFlags.None;
+                fontAsset.material.hideFlags = HideFlags.None;
+
+                AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset);
+
+                // Assign new font atlas texture to the existing material.
+                fontAsset.material.SetTexture(ShaderUtilities.ID_MainTex, fontAsset.atlasTextures[0]);
+
+                // Update the Texture reference on the Material
+                for (int i = 0; i < material_references.Length; i++)
+                {
+                    material_references[i].SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture);
+                    material_references[i].SetFloat(ShaderUtilities.ID_TextureWidth, m_FontAtlasTexture.width);
+                    material_references[i].SetFloat(ShaderUtilities.ID_TextureHeight, m_FontAtlasTexture.height);
+
+                    int spread = m_Padding + 1;
+                    material_references[i].SetFloat(ShaderUtilities.ID_GradientScale, spread); // Spread = Padding for Brute Force SDF.
+
+                    material_references[i].SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+                    material_references[i].SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+                }
+            }
+
+            // Saving File for Debug
+            //var pngData = destination_Atlas.EncodeToPNG();
+            //File.WriteAllBytes("Assets/Textures/Debug Distance Field.png", pngData);
+
+            // Add list of GlyphRects to font asset.
+            fontAsset.freeGlyphRects = m_FreeGlyphRects;
+            fontAsset.usedGlyphRects = m_UsedGlyphRects;
+
+            // Save Font Asset creation settings
+            m_SelectedFontAsset = fontAsset;
+            m_LegacyFontAsset = null;
+            fontAsset.creationSettings = SaveFontCreationSettings();
+
+            AssetDatabase.SaveAssets();
+
+            AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset));  // Re-import font asset to get the new updated version.
+
+            fontAsset.ReadFontAssetDefinition();
+
+            AssetDatabase.Refresh();
+
+            m_FontAtlasTexture = null;
+
+            // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET
+            TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset);
+        }
+
+
+        /// <summary>
+        /// Internal method to save the Font Asset Creation Settings
+        /// </summary>
+        /// <returns></returns>
+        FontAssetCreationSettings SaveFontCreationSettings()
+        {
+            FontAssetCreationSettings settings = new FontAssetCreationSettings();
+
+            //settings.sourceFontFileName = m_SourceFontFile.name;
+            settings.sourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile));
+            settings.pointSizeSamplingMode = m_PointSizeSamplingMode;
+            settings.pointSize = m_PointSize;
+            settings.padding = m_Padding;
+            settings.packingMode = (int)m_PackingMode;
+            settings.atlasWidth = m_AtlasWidth;
+            settings.atlasHeight = m_AtlasHeight;
+            settings.characterSetSelectionMode = m_CharacterSetSelectionMode;
+            settings.characterSequence = m_CharacterSequence;
+            settings.referencedFontAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_ReferencedFontAsset));
+            settings.referencedTextAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_CharactersFromFile));
+            //settings.fontStyle = (int)m_FontStyle;
+            //settings.fontStyleModifier = m_FontStyleValue;
+            settings.renderMode = (int)m_GlyphRenderMode;
+            settings.includeFontFeatures = m_IncludeFontFeatures;
+
+            return settings;
+        }
+
+
+        /// <summary>
+        /// Internal method to load the Font Asset Creation Settings
+        /// </summary>
+        /// <param name="settings"></param>
+        void LoadFontCreationSettings(FontAssetCreationSettings settings)
+        {
+            m_SourceFontFile = AssetDatabase.LoadAssetAtPath<Font>(AssetDatabase.GUIDToAssetPath(settings.sourceFontFileGUID));
+            m_PointSizeSamplingMode  = settings.pointSizeSamplingMode;
+            m_PointSize = settings.pointSize;
+            m_Padding = settings.padding;
+            m_PackingMode = (FontPackingModes)settings.packingMode;
+            m_AtlasWidth = settings.atlasWidth;
+            m_AtlasHeight = settings.atlasHeight;
+            m_CharacterSetSelectionMode = settings.characterSetSelectionMode;
+            m_CharacterSequence = settings.characterSequence;
+            m_ReferencedFontAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(AssetDatabase.GUIDToAssetPath(settings.referencedFontAssetGUID));
+            m_CharactersFromFile = AssetDatabase.LoadAssetAtPath<TextAsset>(AssetDatabase.GUIDToAssetPath(settings.referencedTextAssetGUID));
+            //m_FontStyle = (FaceStyles)settings.fontStyle;
+            //m_FontStyleValue = settings.fontStyleModifier;
+            m_GlyphRenderMode = (GlyphRenderMode)settings.renderMode;
+            m_IncludeFontFeatures = settings.includeFontFeatures;
+        }
+
+
+        /// <summary>
+        /// Save the latest font asset creation settings to EditorPrefs.
+        /// </summary>
+        /// <param name="settings"></param>
+        void SaveCreationSettingsToEditorPrefs(FontAssetCreationSettings settings)
+        {
+            // Create new list if one does not already exist
+            if (m_FontAssetCreationSettingsContainer == null)
+            {
+                m_FontAssetCreationSettingsContainer = new FontAssetCreationSettingsContainer();
+                m_FontAssetCreationSettingsContainer.fontAssetCreationSettings = new List<FontAssetCreationSettings>();
+            }
+
+            // Add new creation settings to the list
+            m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Add(settings);
+
+            // Since list should only contain the most 4 recent settings, we remove the first element if list exceeds 4 elements.
+            if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 4)
+                m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.RemoveAt(0);
+
+            m_FontAssetCreationSettingsCurrentIndex = m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count - 1;
+
+            // Serialize list to JSON
+            string serializedSettings = JsonUtility.ToJson(m_FontAssetCreationSettingsContainer, true);
+
+            EditorPrefs.SetString(k_FontAssetCreationSettingsContainerKey, serializedSettings);
+        }
+
+        void DrawPreview()
+        {
+            Rect pixelRect;
+            if (position.width > position.height && position.width > k_TwoColumnControlsWidth)
+            {
+                float minSide = Mathf.Min(position.height - 15f, position.width - k_TwoColumnControlsWidth);
+
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.MaxWidth(minSide));
+
+                pixelRect = GUILayoutUtility.GetRect(minSide, minSide, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false));
+            }
+            else
+            {
+                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
+
+                pixelRect = GUILayoutUtility.GetAspectRect(1f);
+            }
+            
+            if (m_FontAtlasTexture != null)
+            {
+                EditorGUI.DrawTextureAlpha(pixelRect, m_FontAtlasTexture, ScaleMode.StretchToFill);
+            }
+            else if (m_SavedFontAtlas != null)
+            {
+                EditorGUI.DrawTextureAlpha(pixelRect, m_SavedFontAtlas, ScaleMode.StretchToFill);
+            }
+
+            EditorGUILayout.EndVertical();
+        }
+
+
+        void CheckForLegacyGlyphRenderMode()
+        {
+            // Special handling for legacy glyph render mode
+            if ((int)m_GlyphRenderMode < 0x100)
+            {
+                switch ((int)m_GlyphRenderMode)
+                {
+                    case 0:
+                        m_GlyphRenderMode = GlyphRenderMode.SMOOTH_HINTED;
+                        break;
+                    case 1:
+                        m_GlyphRenderMode = GlyphRenderMode.SMOOTH;
+                        break;
+                    case 2:
+                        m_GlyphRenderMode = GlyphRenderMode.RASTER_HINTED;
+                        break;
+                    case 3:
+                        m_GlyphRenderMode = GlyphRenderMode.RASTER;
+                        break;
+                    case 6:
+                    case 7:
+                        m_GlyphRenderMode = GlyphRenderMode.SDFAA;
+                        break;
+                }
+            }
+        }
+
+
+        // Get Kerning Pairs
+        public TMP_FontFeatureTable GetKerningTable()
+        {
+            GlyphPairAdjustmentRecord[] adjustmentRecords = FontEngine.GetGlyphPairAdjustmentTable(m_AvailableGlyphsToAdd.ToArray());
+
+            if (adjustmentRecords == null)
+                return null;
+
+            TMP_FontFeatureTable fontFeatureTable = new TMP_FontFeatureTable();
+
+            for (int i = 0; i < adjustmentRecords.Length; i++)
+            {
+                fontFeatureTable.glyphPairAdjustmentRecords.Add(new TMP_GlyphPairAdjustmentRecord(adjustmentRecords[i]));
+            }
+
+            fontFeatureTable.SortGlyphPairAdjustmentRecords();
+
+            return fontFeatureTable;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4648857f3d8231d6ebf71a4f7172754d18e6341d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 383966e89d344865a36addd5d378ffd3
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3b098ff24278f3d0d6ec1a92e9f87d1847a69202
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs
@@ -0,0 +1,115 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+using System;
+using System.Runtime.InteropServices;
+
+
+namespace TMPro.EditorUtilities 
+{
+    /*
+    public class TMPro_FontPlugin
+    {
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void DebugLog(string log);
+        private static readonly DebugLog debugLog = DebugWrapper;
+        private static readonly IntPtr functionPointer = Marshal.GetFunctionPointerForDelegate(debugLog);
+
+        private static void DebugWrapper(string log)
+        {
+            Debug.Log(log);
+        }
+
+        public static void LinkDebugLog()
+        {
+            LinkDebug(functionPointer);
+        }
+
+        [DllImport("TMPro_Plugin")]
+        private static extern void LinkDebug([MarshalAs(UnmanagedType.FunctionPtr)]IntPtr debugCall);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int Initialize_FontEngine();
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int Destroy_FontEngine();
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int Load_TrueType_Font(string fontPath);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int FT_Size_Font(int fontSize);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int Render_Character(byte[] buffer_fill, byte[] buffer_edge, int buffer_width, int buffer_height, int offset, int asc, FaceStyles style, float thickness, RenderModes rasterMode, ref FT_GlyphInfo glyphInfo);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int Render_Characters(byte[] buffer, int buffer_width, int buffer_height, int character_padding, int[] asc_set, int char_count, FaceStyles style, float style_mod, bool autoSize, RenderModes renderMode, int method, ref FT_FaceInfo fontData, FT_GlyphInfo[] Output);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            int FT_GetKerningPairs(string fontPath, int[] characterSet, int setCount, FT_KerningPair[] kerningPairs);
+
+        [DllImport("TMPro_Plugin")]
+        public static extern
+            float Check_RenderProgress();
+
+        [DllImport("TMPro_Plugin")]
+        internal static extern
+            void SendCancellationRequest(CancellationRequestType request);
+    }
+
+        public enum FaceStyles { Normal, Bold, Italic, Bold_Italic, Outline, Bold_Sim };
+        public enum RenderModes { HintedSmooth = 0, Smooth = 1, RasterHinted = 2, Raster = 3, DistanceField16 = 6, DistanceField32 = 7 };  // SignedDistanceField64 = 8
+
+        internal enum CancellationRequestType : byte { None = 0x0, CancelInProgess = 0x1, WindowClosed = 0x2 };
+
+        [StructLayout(LayoutKind.Sequential)]
+        public struct FT_KerningPair
+        {
+            public int ascII_Left;
+            public int ascII_Right;
+            public float xAdvanceOffset;
+        }
+    
+    
+        [StructLayout(LayoutKind.Sequential)]
+        public struct FT_GlyphInfo
+        {
+            public int id;
+            public float x;
+            public float y;
+            public float width;
+            public float height;
+            public float xOffset;
+            public float yOffset;
+            public float xAdvance;
+        }
+
+
+        [StructLayout(LayoutKind.Sequential)] 
+        public struct FT_FaceInfo
+        {
+            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
+            public string name;
+            public int pointSize;
+            public int padding;
+            public float lineHeight;
+            public float baseline;
+            public float ascender;
+            public float descender;
+            public float centerLine;
+            public float underline;
+            public float underlineThickness;
+            public int characterCount;
+            public int atlasWidth;
+            public int atlasHeight;
+        }
+     */
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..66f3a87e29b0a42acc62b7286c22b60759c11cec
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_FontPlugin.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9edc9283e7d6409fab242fe8fb6a822c
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4f44c53b5df73051ee2c87eaa5b1dab6ee53b1a8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2014, Nick Gravelyn.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ *    1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ *
+ *    2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ *
+ *    3. This notice may not be removed or altered from any source
+ *    distribution.
+ */
+
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Reflection;
+
+namespace TMPro
+{
+    // Helpers used by the different sorting layer classes.
+    public static class SortingLayerHelper
+    {
+        private static Type _utilityType;
+        private static PropertyInfo _sortingLayerNamesProperty;
+        private static MethodInfo _getSortingLayerUserIdMethod;
+
+        static SortingLayerHelper()
+        {
+            _utilityType = Type.GetType("UnityEditorInternal.InternalEditorUtility, UnityEditor");
+            _sortingLayerNamesProperty = _utilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic);
+            _getSortingLayerUserIdMethod = _utilityType.GetMethod("GetSortingLayerUniqueID", BindingFlags.Static | BindingFlags.NonPublic);
+        }
+
+        // Gets an array of sorting layer names.
+        // Since this uses reflection, callers should check for 'null' which will be returned if the reflection fails.
+        public static string[] sortingLayerNames
+        {
+            get
+            {
+                if (_sortingLayerNamesProperty == null)
+                {
+                    return null;
+                }
+
+                return _sortingLayerNamesProperty.GetValue(null, null) as string[];
+            }
+        }
+
+        // Given the ID of a sorting layer, returns the sorting layer's name
+        public static string GetSortingLayerNameFromID(int id)
+        {
+            string[] names = sortingLayerNames;
+            if (names == null)
+            {
+                return null;
+            }
+
+            for (int i = 0; i < names.Length; i++)
+            {
+                if (GetSortingLayerIDForIndex(i) == id)
+                {
+                    return names[i];
+                }
+            }
+
+            return null;
+        }
+
+        // Given the name of a sorting layer, returns the ID.
+        public static int GetSortingLayerIDForName(string name)
+        {
+            string[] names = sortingLayerNames;
+            if (names == null)
+            {
+                return 0;
+            }
+
+            return GetSortingLayerIDForIndex(Array.IndexOf(names, name));
+        }
+
+        // Helper to convert from a sorting layer INDEX to a sorting layer ID. These are not the same thing.
+        // IDs are based on the order in which layers were created and do not change when reordering the layers.
+        // Thankfully there is a private helper we can call to get the ID for a layer given its index.
+        public static int GetSortingLayerIDForIndex(int index)
+        {
+            if (_getSortingLayerUserIdMethod == null)
+            {
+                return 0;
+            }
+
+            return (int)_getSortingLayerUserIdMethod.Invoke(null, new object[] { index });
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9d902b90cf909143f9ed9a04e583cede41cfed4d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 88ed537c17c34f339121fe9a7d6d7a0e
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..09fc6173f3b4dad5e857e5b3909062d3339ac1e8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs
@@ -0,0 +1,235 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+    [CustomEditor(typeof(TextContainer)), CanEditMultipleObjects]
+    public class TMPro_TextContainerEditor : Editor
+    {
+        
+        // Serialized Properties 
+        private SerializedProperty anchorPosition_prop;
+        private SerializedProperty pivot_prop;
+        private SerializedProperty rectangle_prop;
+        private SerializedProperty margins_prop;
+       
+
+        private TextContainer m_textContainer;
+        //private Transform m_transform;
+        //private Vector3[] m_Rect_handlePoints = new Vector3[4];
+        //private Vector3[] m_Margin_handlePoints = new Vector3[4];
+
+        //private Vector2 m_anchorPosition;
+
+        //private Vector3 m_mousePreviousPOS;
+        //private Vector2 m_previousStartPOS;
+        //private int m_mouseDragFlag = 0;
+
+        //private static Transform m_visualHelper;
+
+
+        void OnEnable()
+        {
+         
+            // Serialized Properties
+            anchorPosition_prop = serializedObject.FindProperty("m_anchorPosition");
+            pivot_prop = serializedObject.FindProperty("m_pivot");
+            rectangle_prop = serializedObject.FindProperty("m_rect"); 
+            margins_prop = serializedObject.FindProperty("m_margins");
+
+            m_textContainer = (TextContainer)target;
+            //m_transform = m_textContainer.transform;
+            
+
+            /*
+            if (m_visualHelper == null)
+            {
+                m_visualHelper = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
+                m_visualHelper.localScale = new Vector3(0.25f, 0.25f, 0.25f);
+            }
+            */
+        }
+
+        void OnDisable()
+        {
+            /*
+            if (m_visualHelper != null)
+                DestroyImmediate (m_visualHelper.gameObject);
+            */
+        }
+
+     
+
+
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+
+            EditorGUI.BeginChangeCheck();
+            EditorGUILayout.PropertyField(anchorPosition_prop);
+            if (anchorPosition_prop.enumValueIndex == 9)
+            {
+                EditorGUI.indentLevel += 1;
+                EditorGUILayout.PropertyField(pivot_prop, new GUIContent("Pivot Position"));
+                EditorGUI.indentLevel -= 1;
+            }
+
+
+            DrawDimensionProperty(rectangle_prop, "Dimensions");
+            DrawMaginProperty(margins_prop, "Margins");
+            if (EditorGUI.EndChangeCheck())
+            {
+                // Re-compute pivot position when changes are made.
+                if (anchorPosition_prop.enumValueIndex != 9)
+                    pivot_prop.vector2Value = GetAnchorPosition(anchorPosition_prop.enumValueIndex);
+                
+                m_textContainer.hasChanged = true;
+            }
+
+            serializedObject.ApplyModifiedProperties();
+
+            EditorGUILayout.Space();
+        }
+
+
+        private void DrawDimensionProperty(SerializedProperty property, string label)
+        {
+            float old_LabelWidth = EditorGUIUtility.labelWidth;
+            float old_FieldWidth = EditorGUIUtility.fieldWidth;
+                     
+            Rect rect = EditorGUILayout.GetControlRect(false, 18);
+            Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18);
+
+            float width = rect.width + 3;
+            pos0.width = old_LabelWidth;
+            GUI.Label(pos0, label);
+
+            Rect rectangle = property.rectValue;
+            
+            float width_B = width - old_LabelWidth;
+            float fieldWidth = width_B / 4;
+            pos0.width = fieldWidth - 5;
+
+            pos0.x = old_LabelWidth + 15;
+            GUI.Label(pos0, "Width");
+
+            pos0.x += fieldWidth; 
+            rectangle.width = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.width);
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, "Height");
+
+            pos0.x += fieldWidth; 
+            rectangle.height = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.height);
+
+            property.rectValue = rectangle;
+            EditorGUIUtility.labelWidth = old_LabelWidth;
+            EditorGUIUtility.fieldWidth = old_FieldWidth;
+        }
+
+
+        private void DrawMaginProperty(SerializedProperty property, string label)
+        {
+            float old_LabelWidth = EditorGUIUtility.labelWidth;
+            float old_FieldWidth = EditorGUIUtility.fieldWidth;
+          
+            Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18);
+            Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18);
+
+            float width = rect.width + 3;
+            pos0.width = old_LabelWidth;
+            GUI.Label(pos0, label);
+
+            //Vector4 vec = property.vector4Value;
+            Vector4 vec = Vector4.zero;
+            vec.x = property.FindPropertyRelative("x").floatValue;
+            vec.y = property.FindPropertyRelative("y").floatValue;
+            vec.z = property.FindPropertyRelative("z").floatValue;
+            vec.w = property.FindPropertyRelative("w").floatValue;
+
+
+            float widthB = width - old_LabelWidth;
+            float fieldWidth = widthB / 4;
+            pos0.width = fieldWidth - 5;
+
+            // Labels
+            pos0.x = old_LabelWidth + 15;
+            GUI.Label(pos0, "Left");
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, "Top");
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, "Right");
+
+            pos0.x += fieldWidth;
+            GUI.Label(pos0, "Bottom");
+
+            pos0.y += 18;
+
+            pos0.x = old_LabelWidth + 15;
+            vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x);
+
+            pos0.x += fieldWidth;
+            vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y);
+
+            pos0.x += fieldWidth;
+            vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z);
+
+            pos0.x += fieldWidth;
+            vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w);
+
+            //property.vector4Value = vec;         
+            property.FindPropertyRelative("x").floatValue = vec.x;
+            property.FindPropertyRelative("y").floatValue = vec.y;
+            property.FindPropertyRelative("z").floatValue = vec.z;
+            property.FindPropertyRelative("w").floatValue = vec.w;
+
+            EditorGUIUtility.labelWidth = old_LabelWidth;
+            EditorGUIUtility.fieldWidth = old_FieldWidth;
+        }
+
+
+        Vector2 GetAnchorPosition(int index)
+        {
+            Vector2 anchorPosition = Vector2.zero;
+                   
+            switch (index)
+            {
+                case 0: // TOP LEFT
+                    anchorPosition = new Vector2(0, 1);
+                    break;
+                case 1: // TOP
+                    anchorPosition = new Vector2(0.5f, 1);
+                    break;
+                case 2: // TOP RIGHT
+                    anchorPosition = new Vector2(1, 1);
+                    break;
+                case 3: // LEFT
+                    anchorPosition = new Vector2(0, 0.5f);
+                    break;
+                case 4: // MIDDLE
+                    anchorPosition = new Vector2(0.5f, 0.5f);
+                    break;
+                case 5: // RIGHT
+                    anchorPosition = new Vector2(1, 0.5f);
+                    break;
+                case 6: // BOTTOM LEFT
+                    anchorPosition = new Vector2(0, 0);
+                    break;
+                case 7: // BOTTOM
+                    anchorPosition = new Vector2(0.5f, 0);
+                    break;
+                case 8: // BOTTOM RIGHT
+                    anchorPosition = new Vector2(1, 0);
+                    break;
+            }
+          
+            return anchorPosition;
+        }
+
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bad788129c6bb61ab4362ea6cd40ac33d473363a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 02893ffb522b490a9fa28eedd2584309
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b16340946c27232b2d79f915dd22a5bf122de382
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs
@@ -0,0 +1,75 @@
+using UnityEngine;
+using UnityEditor;
+using System.Collections;
+
+
+namespace TMPro.EditorUtilities
+{
+
+    public class TMPro_TexturePostProcessor : AssetPostprocessor
+    {
+
+        void OnPostprocessTexture(Texture2D texture)
+        {
+            //var importer = assetImporter as TextureImporter;
+
+            Texture2D tex = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Texture2D)) as Texture2D;
+
+            // Send Event Sub Objects
+            if (tex != null)
+                TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, tex);
+        }
+
+    }
+
+
+    //public class TMPro_PackageImportPostProcessor : AssetPostprocessor
+    //{
+    //    static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
+    //    {
+    //        for (int i = 0; i < importedAssets.Length; i++)
+    //        {
+    //            if (importedAssets[i].Contains("TextMesh Pro/Resources/TMP Settings.asset"))
+    //            {
+    //                Debug.Log("New TMP Settings file was just imported.");
+
+    //                // TMP Settings file was just re-imported.
+    //                // Check if project already contains 
+    //            }
+
+
+    //            if (importedAssets[i].Contains("com.unity.TextMeshPro/Examples"))
+    //            {
+    //                //Debug.Log("New TMP Examples folder was just imported.");
+    //            }
+
+    //            //Debug.Log("[" + importedAssets[i] + "] was just imported.");
+    //        }
+            
+            
+            
+    //        //for (int i = 0; i < deletedAssets.Length; i++)
+    //        //{
+    //        //    if (deletedAssets[i] == "Assets/TextMesh Pro")
+    //        //    {
+    //        //        //Debug.Log("Asset [" + deletedAssets[i] + "] has been deleted.");
+    //        //        string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup);
+
+    //        //        //Check for and inject TMP_PRESENT
+    //        //        if (currentBuildSettings.Contains("TMP_PRESENT;"))
+    //        //        {
+    //        //            currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT;", "");
+
+    //        //            PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings);
+    //        //        }
+    //        //        else if (currentBuildSettings.Contains("TMP_PRESENT"))
+    //        //        {
+    //        //            currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT", "");
+
+    //        //            PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings);
+    //        //        }
+    //        //    }
+    //        //}
+    //    }
+    //}
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fb00b80f3d08632102cb13bf87849e919a72bcab
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f4935fb862d54980b1bcbca942962642
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..437e22150e3dec4ac6264ce7b9ca84f3eecbfab4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef
@@ -0,0 +1,11 @@
+{
+    "name": "Unity.TextMeshPro.Editor",
+    "references": [
+        "Unity.TextMeshPro"
+    ],
+    "optionalUnityReferences": [],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6ed76ad64617a287ac12f00058d6dc90c4b1cc65
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6546d7765b4165b40850b3667f981c26
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4b244150b1d81e6a042ec7d2056d03210e1a4eb5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5fc988a1d5b04aee9a5222502b201a45
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs
new file mode 100644
index 0000000000000000000000000000000000000000..527849355e2daedb7af6dee039d2800f85657ad4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs
@@ -0,0 +1,11 @@
+using System.Runtime.CompilerServices;
+
+// Allow internal visibility for testing purposes.
+[assembly: InternalsVisibleTo("Unity.TextCore")]
+
+[assembly: InternalsVisibleTo("Unity.FontEngine.Tests")]
+
+#if UNITY_EDITOR
+[assembly: InternalsVisibleTo("Unity.TextCore.Editor")]
+[assembly: InternalsVisibleTo("Unity.TextMeshPro.Editor")]
+#endif
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cd527067f4f4a1dbe0d32ef701c3346cbf3aa5b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/AssemblyInfo.cs.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1c147d10db452eb4b854a35f84472017
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4ae2ea5fead8e99dbdc1ad420f45c32a51c62218
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs
@@ -0,0 +1,154 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    public class FastAction
+    {
+
+        LinkedList<System.Action> delegates = new LinkedList<System.Action>();
+
+        Dictionary<System.Action, LinkedListNode<System.Action>> lookup = new Dictionary<System.Action, LinkedListNode<System.Action>>();
+
+        public void Add(System.Action rhs)
+        {
+            if (lookup.ContainsKey(rhs)) return;
+
+            lookup[rhs] = delegates.AddLast(rhs);
+        }
+
+        public void Remove(System.Action rhs)
+        {
+            LinkedListNode<System.Action> node;
+
+            if (lookup.TryGetValue(rhs, out node))
+            {
+                lookup.Remove(rhs);
+                delegates.Remove(node);
+            }
+        }
+
+        public void Call()
+        {
+            var node = delegates.First;
+            while (node != null)
+            {
+                node.Value();
+                node = node.Next;
+            }
+        }
+    }
+
+
+    public class FastAction<A>
+    {
+
+        LinkedList<System.Action<A>> delegates = new LinkedList<System.Action<A>>();
+
+        Dictionary<System.Action<A>, LinkedListNode<System.Action<A>>> lookup = new Dictionary<System.Action<A>, LinkedListNode<System.Action<A>>>();
+
+        public void Add(System.Action<A> rhs)
+        {
+            if (lookup.ContainsKey(rhs)) return;
+
+            lookup[rhs] = delegates.AddLast(rhs);
+        }
+
+        public void Remove(System.Action<A> rhs)
+        {
+            LinkedListNode<System.Action<A>> node;
+
+            if (lookup.TryGetValue(rhs, out node))
+            {
+                lookup.Remove(rhs);
+                delegates.Remove(node);
+            }
+        }
+
+        public void Call(A a)
+        {
+            var node = delegates.First;
+            while (node != null)
+            {
+                node.Value(a);
+                node = node.Next;
+            }
+        }
+    }
+
+
+    public class FastAction<A, B>
+    {
+
+        LinkedList<System.Action<A, B>> delegates = new LinkedList<System.Action<A, B>>();
+
+        Dictionary<System.Action<A, B>, LinkedListNode<System.Action<A, B>>> lookup = new Dictionary<System.Action<A, B>, LinkedListNode<System.Action<A, B>>>();
+
+        public void Add(System.Action<A, B> rhs)
+        {
+            if (lookup.ContainsKey(rhs)) return;
+
+            lookup[rhs] = delegates.AddLast(rhs);
+        }
+
+        public void Remove(System.Action<A, B> rhs)
+        {
+            LinkedListNode<System.Action<A, B>> node;
+
+            if (lookup.TryGetValue(rhs, out node))
+            {
+                lookup.Remove(rhs);
+                delegates.Remove(node);
+            }
+        }
+
+        public void Call(A a, B b)
+        {
+            var node = delegates.First;
+            while (node != null)
+            {
+                node.Value(a, b);
+                node = node.Next;
+            }
+        }
+    }
+
+
+    public class FastAction<A, B, C>
+    {
+
+        LinkedList<System.Action<A, B, C>> delegates = new LinkedList<System.Action<A, B, C>>();
+
+        Dictionary<System.Action<A, B, C>, LinkedListNode<System.Action<A, B, C>>> lookup = new Dictionary<System.Action<A, B, C>, LinkedListNode<System.Action<A, B, C>>>();
+
+        public void Add(System.Action<A, B, C> rhs)
+        {
+            if (lookup.ContainsKey(rhs)) return;
+
+            lookup[rhs] = delegates.AddLast(rhs);
+        }
+
+        public void Remove(System.Action<A, B, C> rhs)
+        {
+            LinkedListNode<System.Action<A, B, C>> node;
+
+            if (lookup.TryGetValue(rhs, out node))
+            {
+                lookup.Remove(rhs);
+                delegates.Remove(node);
+            }
+        }
+
+        public void Call(A a, B b, C c)
+        {
+            var node = delegates.First;
+            while (node != null)
+            {
+                node.Value(a, b, c);
+                node = node.Next;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..fcd991e575248e9e65f6d8610270b19aeca13571
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/FastAction.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 871f8edd56e84b8fb295b10cc3c78f36
+timeCreated: 1435956061
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..dd2fe92b4c5d5203bff556c937f7b748d6468e20
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs
@@ -0,0 +1,646 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+
+    public class MaterialReferenceManager
+    {
+        private static MaterialReferenceManager s_Instance;
+
+        // Dictionaries used to track Asset references.
+        private Dictionary<int, Material> m_FontMaterialReferenceLookup = new Dictionary<int, Material>();
+        private Dictionary<int, TMP_FontAsset> m_FontAssetReferenceLookup = new Dictionary<int, TMP_FontAsset>();
+        private Dictionary<int, TMP_SpriteAsset> m_SpriteAssetReferenceLookup = new Dictionary<int, TMP_SpriteAsset>();
+        private Dictionary<int, TMP_ColorGradient> m_ColorGradientReferenceLookup = new Dictionary<int, TMP_ColorGradient>();
+
+
+        /// <summary>
+        /// Get a singleton instance of the registry
+        /// </summary>
+        public static MaterialReferenceManager instance
+        {
+            get
+            {
+                if (MaterialReferenceManager.s_Instance == null)
+                    MaterialReferenceManager.s_Instance = new MaterialReferenceManager();
+                return MaterialReferenceManager.s_Instance;
+            }
+        }
+
+
+
+        /// <summary>
+        /// Add new font asset reference to dictionary.
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        public static void AddFontAsset(TMP_FontAsset fontAsset)
+        {
+            MaterialReferenceManager.instance.AddFontAssetInternal(fontAsset);
+        }
+
+        /// <summary>
+        ///  Add new Font Asset reference to dictionary.
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        private void AddFontAssetInternal(TMP_FontAsset fontAsset)
+        {
+            if (m_FontAssetReferenceLookup.ContainsKey(fontAsset.hashCode)) return;
+
+            // Add reference to the font asset.
+            m_FontAssetReferenceLookup.Add(fontAsset.hashCode, fontAsset);
+
+            // Add reference to the font material.
+            m_FontMaterialReferenceLookup.Add(fontAsset.materialHashCode, fontAsset.material);
+        }
+
+
+
+        /// <summary>
+        /// Add new Sprite Asset to dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        public static void AddSpriteAsset(TMP_SpriteAsset spriteAsset)
+        {
+            MaterialReferenceManager.instance.AddSpriteAssetInternal(spriteAsset);
+        }
+
+        /// <summary>
+        /// Internal method to add a new sprite asset to the dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        private void AddSpriteAssetInternal(TMP_SpriteAsset spriteAsset)
+        {
+            if (m_SpriteAssetReferenceLookup.ContainsKey(spriteAsset.hashCode)) return;
+
+            // Add reference to sprite asset.
+            m_SpriteAssetReferenceLookup.Add(spriteAsset.hashCode, spriteAsset);
+
+            // Adding reference to the sprite asset material as well
+            m_FontMaterialReferenceLookup.Add(spriteAsset.hashCode, spriteAsset.material);
+        }
+
+        /// <summary>
+        /// Add new Sprite Asset to dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        public static void AddSpriteAsset(int hashCode, TMP_SpriteAsset spriteAsset)
+        {
+            MaterialReferenceManager.instance.AddSpriteAssetInternal(hashCode, spriteAsset);
+        }
+
+        /// <summary>
+        /// Internal method to add a new sprite asset to the dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        private void AddSpriteAssetInternal(int hashCode, TMP_SpriteAsset spriteAsset)
+        {
+            if (m_SpriteAssetReferenceLookup.ContainsKey(hashCode)) return;
+
+            // Add reference to Sprite Asset.
+            m_SpriteAssetReferenceLookup.Add(hashCode, spriteAsset);
+
+            // Add reference to Sprite Asset using the asset hashcode.
+            m_FontMaterialReferenceLookup.Add(hashCode, spriteAsset.material);
+
+            // Compatibility check
+            if (spriteAsset.hashCode == 0) spriteAsset.hashCode = hashCode;
+        }
+
+
+        /// <summary>
+        /// Add new Material reference to dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="material"></param>
+        public static void AddFontMaterial(int hashCode, Material material)
+        {
+            MaterialReferenceManager.instance.AddFontMaterialInternal(hashCode, material);
+        }
+
+        /// <summary>
+        /// Add new material reference to dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="material"></param>
+        private void AddFontMaterialInternal(int hashCode, Material material)
+        {
+            // Since this function is called after checking if the material is
+            // contained in the dictionary, there is no need to check again.
+            m_FontMaterialReferenceLookup.Add(hashCode, material);
+        }
+
+
+        /// <summary>
+        /// Add new Color Gradient Preset to dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        public static void AddColorGradientPreset(int hashCode, TMP_ColorGradient spriteAsset)
+        {
+            MaterialReferenceManager.instance.AddColorGradientPreset_Internal(hashCode, spriteAsset);
+        }
+
+        /// <summary>
+        /// Internal method to add a new Color Gradient Preset to the dictionary.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        private void AddColorGradientPreset_Internal(int hashCode, TMP_ColorGradient spriteAsset)
+        {
+            if (m_ColorGradientReferenceLookup.ContainsKey(hashCode)) return;
+
+            // Add reference to Color Gradient Preset Asset.
+            m_ColorGradientReferenceLookup.Add(hashCode, spriteAsset);
+        }
+
+
+
+        /// <summary>
+        /// Add new material reference and return the index of this new reference in the materialReferences array.
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="materialHashCode"></param>
+        /// <param name="fontAsset"></param>
+        //public int AddMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset)
+        //{
+        //    if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode))
+        //    {
+        //        int index = m_MaterialReferenceLookup.Count;
+
+        //        materialReferences[index].fontAsset = fontAsset;
+        //        materialReferences[index].material = material;
+        //        materialReferences[index].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false;
+        //        materialReferences[index].index = index;
+        //        materialReferences[index].referenceCount = 0;
+
+        //        m_MaterialReferenceLookup[materialHashCode] = index;
+
+        //        // Compute Padding value and store it
+        //        // TODO
+
+        //        int fontAssetHashCode = fontAsset.hashCode;
+
+        //        if (!m_FontAssetReferenceLookup.ContainsKey(fontAssetHashCode))
+        //            m_FontAssetReferenceLookup.Add(fontAssetHashCode, fontAsset);
+
+        //        m_countInternal += 1;
+
+        //        return index;
+        //    }
+        //    else
+        //    {
+        //        return m_MaterialReferenceLookup[materialHashCode];
+        //    }
+        //}
+
+
+        /// <summary>
+        /// Add new material reference and return the index of this new reference in the materialReferences array.
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="materialHashCode"></param>
+        /// <param name="spriteAsset"></param>
+        /// <returns></returns>
+        //public int AddMaterial(Material material, int materialHashCode, TMP_SpriteAsset spriteAsset)
+        //{
+        //    if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode))
+        //    {
+        //        int index = m_MaterialReferenceLookup.Count;
+
+        //        materialReferences[index].fontAsset = materialReferences[0].fontAsset;
+        //        materialReferences[index].spriteAsset = spriteAsset;
+        //        materialReferences[index].material = material;
+        //        materialReferences[index].isDefaultMaterial = true;
+        //        materialReferences[index].index = index;
+        //        materialReferences[index].referenceCount = 0;
+
+        //        m_MaterialReferenceLookup[materialHashCode] = index;
+
+        //        int spriteAssetHashCode =  spriteAsset.hashCode;
+
+        //        if (!m_SpriteAssetReferenceLookup.ContainsKey(spriteAssetHashCode))
+        //            m_SpriteAssetReferenceLookup.Add(spriteAssetHashCode, spriteAsset);
+
+        //        m_countInternal += 1;
+
+        //        return index;
+        //    }
+        //    else
+        //    {
+        //        return m_MaterialReferenceLookup[materialHashCode];
+        //    }
+        //}
+
+
+        /// <summary>
+        /// Function to check if the font asset is already referenced.
+        /// </summary>
+        /// <param name="font"></param>
+        /// <returns></returns>
+        public bool Contains(TMP_FontAsset font)
+        {
+            if (m_FontAssetReferenceLookup.ContainsKey(font.hashCode))
+                return true;
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if the sprite asset is already referenced.
+        /// </summary>
+        /// <param name="font"></param>
+        /// <returns></returns>
+        public bool Contains(TMP_SpriteAsset sprite)
+        {
+            if (m_FontAssetReferenceLookup.ContainsKey(sprite.hashCode))
+                return true;
+
+            return false;
+        }
+
+
+
+        /// <summary>
+        /// Function returning the Font Asset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        public static bool TryGetFontAsset(int hashCode, out TMP_FontAsset fontAsset)
+        {
+            return MaterialReferenceManager.instance.TryGetFontAssetInternal(hashCode, out fontAsset);
+        }
+
+        /// <summary>
+        /// Internal Function returning the Font Asset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        private bool TryGetFontAssetInternal(int hashCode, out TMP_FontAsset fontAsset)
+        {
+            fontAsset = null;
+
+            if (m_FontAssetReferenceLookup.TryGetValue(hashCode, out fontAsset))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+
+
+        /// <summary>
+        /// Function returning the Sprite Asset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="spriteAsset"></param>
+        /// <returns></returns>
+        public static bool TryGetSpriteAsset(int hashCode, out TMP_SpriteAsset spriteAsset)
+        {
+            return MaterialReferenceManager.instance.TryGetSpriteAssetInternal(hashCode, out spriteAsset);
+        }
+
+        /// <summary>
+        /// Internal function returning the Sprite Asset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        private bool TryGetSpriteAssetInternal(int hashCode, out TMP_SpriteAsset spriteAsset)
+        {
+            spriteAsset = null;
+
+            if (m_SpriteAssetReferenceLookup.TryGetValue(hashCode, out spriteAsset))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function returning the Color Gradient Preset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="gradientPreset"></param>
+        /// <returns></returns>
+        public static bool TryGetColorGradientPreset(int hashCode, out TMP_ColorGradient gradientPreset)
+        {
+            return MaterialReferenceManager.instance.TryGetColorGradientPresetInternal(hashCode, out gradientPreset);
+        }
+
+        /// <summary>
+        /// Internal function returning the Color Gradient Preset corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        private bool TryGetColorGradientPresetInternal(int hashCode, out TMP_ColorGradient gradientPreset)
+        {
+            gradientPreset = null;
+
+            if (m_ColorGradientReferenceLookup.TryGetValue(hashCode, out gradientPreset))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function returning the Font Material corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="material"></param>
+        /// <returns></returns>
+        public static bool TryGetMaterial(int hashCode, out Material material)
+        {
+            return MaterialReferenceManager.instance.TryGetMaterialInternal(hashCode, out material);
+        }
+
+        /// <summary>
+        /// Internal function returning the Font Material corresponding to the provided hash code.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="material"></param>
+        /// <returns></returns>
+        private bool TryGetMaterialInternal(int hashCode, out Material material)
+        {
+            material = null;
+
+            if (m_FontMaterialReferenceLookup.TryGetValue(hashCode, out material))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to lookup a material based on hash code and returning the MaterialReference containing this material.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <param name="material"></param>
+        /// <returns></returns>
+        //public bool TryGetMaterial(int hashCode, out MaterialReference materialReference)
+        //{
+        //    int materialIndex = -1;
+
+        //    if (m_MaterialReferenceLookup.TryGetValue(hashCode, out materialIndex))
+        //    {
+        //        materialReference = materialReferences[materialIndex];
+
+        //        return true;
+        //    }
+
+        //    materialReference = new MaterialReference();
+
+        //    return false;
+        //}
+
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        //public int GetMaterialIndex(TMP_FontAsset fontAsset)
+        //{
+        //    if (m_MaterialReferenceLookup.ContainsKey(fontAsset.materialHashCode))
+        //        return m_MaterialReferenceLookup[fontAsset.materialHashCode];
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        //public TMP_FontAsset GetFontAsset(int index)
+        //{
+        //    if (index >= 0  && index < materialReferences.Length)
+        //        return materialReferences[index].fontAsset;
+
+        //    return null;
+        //}
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="materialHashCode"></param>
+        /// <param name="fontAsset"></param>
+        //public void SetDefaultMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset)
+        //{
+        //    if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode))
+        //    {
+        //        materialReferences[0].fontAsset = fontAsset;
+        //        materialReferences[0].material = material;
+        //        materialReferences[0].index = 0;
+        //        materialReferences[0].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false;
+        //        materialReferences[0].referenceCount = 0;
+        //        m_MaterialReferenceLookup[materialHashCode] = 0;
+
+        //        // Compute Padding value and store it
+        //        // TODO
+
+        //        int fontHashCode = fontAsset.hashCode;
+
+        //        if (!m_FontAssetReferenceLookup.ContainsKey(fontHashCode))
+        //            m_FontAssetReferenceLookup.Add(fontHashCode, fontAsset);
+        //    }
+        //    else
+        //    {
+        //        materialReferences[0].fontAsset = fontAsset;
+        //        materialReferences[0].material = material;
+        //        materialReferences[0].index = 0;
+        //        materialReferences[0].referenceCount = 0;
+        //        m_MaterialReferenceLookup[materialHashCode] = 0;
+        //    }
+        //    // Compute padding
+        //    // TODO
+
+        //    m_countInternal = 1;
+        //}
+
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public void Clear()
+        //{
+        //    //m_currentIndex = 0;
+        //    m_MaterialReferenceLookup.Clear();
+        //    m_SpriteAssetReferenceLookup.Clear();
+        //    m_FontAssetReferenceLookup.Clear();
+        //}
+
+
+        /// <summary>
+        /// Function to clear the reference count for each of the material references.
+        /// </summary>
+        //public void ClearReferenceCount()
+        //{
+        //    m_countInternal = 0;
+
+        //    for (int i = 0; i < materialReferences.Length; i++)
+        //    {
+        //        if (materialReferences[i].fontAsset == null)
+        //            return;
+
+        //        materialReferences[i].referenceCount = 0;
+        //    }
+        //}
+
+    }
+
+
+
+    public struct MaterialReference
+    {
+
+        public int index;
+        public TMP_FontAsset fontAsset;
+        public TMP_SpriteAsset spriteAsset;
+        public Material material;
+        public bool isDefaultMaterial;
+        public bool isFallbackMaterial;
+        public Material fallbackMaterial;
+        public float padding;
+        public int referenceCount;
+
+
+        /// <summary>
+        /// Constructor for new Material Reference.
+        /// </summary>
+        /// <param name="index"></param>
+        /// <param name="fontAsset"></param>
+        /// <param name="spriteAsset"></param>
+        /// <param name="material"></param>
+        /// <param name="padding"></param>
+        public MaterialReference(int index, TMP_FontAsset fontAsset, TMP_SpriteAsset spriteAsset, Material material, float padding)
+        {
+            this.index = index;
+            this.fontAsset = fontAsset;
+            this.spriteAsset = spriteAsset;
+            this.material = material;
+            this.isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false;
+            this.isFallbackMaterial = false;
+            this.fallbackMaterial = null;
+            this.padding = padding;
+            this.referenceCount = 0;
+        }
+
+
+        /// <summary>
+        /// Function to check if a certain font asset is contained in the material reference array.
+        /// </summary>
+        /// <param name="materialReferences"></param>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        public static bool Contains(MaterialReference[] materialReferences, TMP_FontAsset fontAsset)
+        {
+            int id = fontAsset.GetInstanceID();
+
+            for (int i = 0; i < materialReferences.Length && materialReferences[i].fontAsset != null; i++)
+            {
+                if (materialReferences[i].fontAsset.GetInstanceID() == id)
+                    return true;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to add a new material reference and returning its index in the material reference array.
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="fontAsset"></param>
+        /// <param name="materialReferences"></param>
+        /// <param name="materialReferenceIndexLookup"></param>
+        /// <returns></returns>
+        public static int AddMaterialReference(Material material, TMP_FontAsset fontAsset, MaterialReference[] materialReferences, Dictionary<int, int> materialReferenceIndexLookup)
+        {
+            int materialID = material.GetInstanceID();
+            int index;
+
+            if (materialReferenceIndexLookup.TryGetValue(materialID, out index))
+            {
+                return index;
+            }
+            else
+            {
+                index = materialReferenceIndexLookup.Count;
+
+                // Add new reference index
+                materialReferenceIndexLookup[materialID] = index;
+
+                materialReferences[index].index = index;
+                materialReferences[index].fontAsset = fontAsset;
+                materialReferences[index].spriteAsset = null;
+                materialReferences[index].material = material;
+                materialReferences[index].isDefaultMaterial = materialID == fontAsset.material.GetInstanceID() ? true : false;
+                //materialReferences[index].padding = 0;
+                materialReferences[index].referenceCount = 0;
+
+                return index;
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="spriteAsset"></param>
+        /// <param name="materialReferences"></param>
+        /// <param name="materialReferenceIndexLookup"></param>
+        /// <returns></returns>
+        public static int AddMaterialReference(Material material, TMP_SpriteAsset spriteAsset, MaterialReference[] materialReferences, Dictionary<int, int> materialReferenceIndexLookup)
+        {
+            int materialID = material.GetInstanceID();
+            int index;
+
+            if (materialReferenceIndexLookup.TryGetValue(materialID, out index))
+            {
+                return index;
+            }
+            else
+            {
+                index = materialReferenceIndexLookup.Count;
+
+                // Add new reference index
+                materialReferenceIndexLookup[materialID] = index;
+
+                materialReferences[index].index = index;
+                materialReferences[index].fontAsset = materialReferences[0].fontAsset;
+                materialReferences[index].spriteAsset = spriteAsset;
+                materialReferences[index].material = material;
+                materialReferences[index].isDefaultMaterial = true;
+                //materialReferences[index].padding = 0;
+                materialReferences[index].referenceCount = 0;
+
+                return index;
+            }
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..17ad5664ad3ae5f91876afeeada76b54f819659d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/MaterialReferenceManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 11a6a034ab84493cbed6af5ae7aae78b
+timeCreated: 1449743129
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a0ff4971f62477462c6854a2bc73207fdce4ee49
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs
@@ -0,0 +1,26 @@
+using UnityEngine;
+
+namespace TMPro
+{
+
+    // Base class inherited by the various TextMeshPro Assets.
+    [System.Serializable]
+    public class TMP_Asset : ScriptableObject
+    {
+        /// <summary>
+        /// HashCode based on the name of the asset.
+        /// </summary>
+        public int hashCode;
+
+        /// <summary>
+        /// The material used by this asset.
+        /// </summary>
+        public Material material;
+
+        /// <summary>
+        /// HashCode based on the name of the material assigned to this asset.
+        /// </summary>
+        public int materialHashCode;
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..62e9ee7a1b0ccabbe9f411f06c57c91882b8a479
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Asset.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 3bda1886f58f4e0ab1139400b160c3ee
+timeCreated: 1459318952
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8fc161ec146e823b3af38c02aaf1f1b0831f48f3
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs
@@ -0,0 +1,51 @@
+using System;
+using UnityEngine.TextCore;
+
+namespace TMPro
+{
+    /// <summary>
+    /// A basic element of text.
+    /// </summary>
+    [Serializable]
+    public class TMP_Character : TMP_TextElement
+    {
+        /// <summary>
+        /// Default constructor.
+        /// </summary>
+        public TMP_Character()
+        {
+            m_ElementType = TextElementType.Character;
+            this.scale = 1.0f;
+        }
+
+        /// <summary>
+        /// Constructor for new character
+        /// </summary>
+        /// <param name="unicode">Unicode value.</param>
+        /// <param name="glyph">Glyph</param>
+        public TMP_Character(uint unicode, Glyph glyph)
+        {
+            m_ElementType = TextElementType.Character;
+
+            this.unicode = unicode;
+            this.glyph = glyph;
+            this.glyphIndex = glyph.index;
+            this.scale = 1.0f;
+        }
+
+        /// <summary>
+        /// Constructor for new character
+        /// </summary>
+        /// <param name="unicode">Unicode value.</param>
+        /// <param name="glyphIndex">Glyph index.</param>
+        internal TMP_Character(uint unicode, uint glyphIndex)
+        {
+            m_ElementType = TextElementType.Character;
+
+            this.unicode = unicode;
+            this.glyph = null;
+            this.glyphIndex = glyphIndex;
+            this.scale = 1.0f;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..55aea1b60f9db718fed3bb7efab1e2a18e948678
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Character.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4ac5b6a65aaeb59478e3b78660e9f134
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e15c46af7d895909f8205f0137ac651a3be7f135
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs
@@ -0,0 +1,73 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+
+namespace TMPro
+{
+    public struct TMP_Vertex
+    {
+        public Vector3 position;
+        public Vector2 uv;
+        public Vector2 uv2;
+        public Vector2 uv4;
+        public Color32 color;
+
+        //public Vector3 normal;
+        //public Vector4 tangent;
+    }
+
+    /// <summary>
+    /// Structure containing information about individual text elements (character or sprites).
+    /// </summary>
+    public struct TMP_CharacterInfo
+    {
+        public char character; // Should be changed to an int to handle UTF 32
+        /// <summary>
+        /// Index of the character in the raw string.
+        /// </summary>
+        public int index; // Index of the character in the input string.
+        public int stringLength;
+        public TMP_TextElementType elementType;
+
+        public TMP_TextElement textElement;
+        public TMP_FontAsset fontAsset;
+        public TMP_SpriteAsset spriteAsset;
+        public int spriteIndex;
+        public Material material;
+        public int materialReferenceIndex;
+        public bool isUsingAlternateTypeface;
+
+        public float pointSize;
+
+        //public short wordNumber;
+        public int lineNumber;
+        //public short charNumber;
+        public int pageNumber;
+
+
+        public int vertexIndex;
+        public TMP_Vertex vertex_BL;
+        public TMP_Vertex vertex_TL;
+        public TMP_Vertex vertex_TR;
+        public TMP_Vertex vertex_BR;
+
+        public Vector3 topLeft;
+        public Vector3 bottomLeft;
+        public Vector3 topRight;
+        public Vector3 bottomRight;
+        public float origin;
+        public float ascender;
+        public float baseLine;
+        public float descender;
+
+        public float xAdvance;
+        public float aspectRatio;
+        public float scale;
+        public Color32 color;
+        public Color32 underlineColor;
+        public Color32 strikethroughColor;
+        public Color32 highlightColor;
+        public FontStyles style;
+        public bool isVisible;
+        //public bool isIgnoringAlignment;
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9367a16e7537cc65ed58f1b3de80f8df5c969a7b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 90fe1c65e6bb3bc4e90862df7297719e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0730adaf7669101ffe8f363a8ba4b5fe762cc39d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs
@@ -0,0 +1,68 @@
+using UnityEngine;
+using System.Collections;
+
+namespace TMPro
+{
+    public enum ColorMode
+    {
+        Single,
+        HorizontalGradient,
+        VerticalGradient,
+        FourCornersGradient
+    }
+
+    [System.Serializable]
+    public class TMP_ColorGradient : ScriptableObject
+    {
+        public ColorMode colorMode = ColorMode.FourCornersGradient;
+
+        public Color topLeft;
+        public Color topRight;
+        public Color bottomLeft;
+        public Color bottomRight;
+
+        const ColorMode k_DefaultColorMode = ColorMode.FourCornersGradient;
+        static readonly Color k_DefaultColor = Color.white;
+
+        /// <summary>
+        /// Default Constructor which sets each of the colors as white.
+        /// </summary>
+        public TMP_ColorGradient()
+        {
+            colorMode = k_DefaultColorMode;
+            topLeft = k_DefaultColor;
+            topRight = k_DefaultColor;
+            bottomLeft = k_DefaultColor;
+            bottomRight = k_DefaultColor;
+        }
+
+        /// <summary>
+        /// Constructor allowing to set the default color of the Color Gradient.
+        /// </summary>
+        /// <param name="color"></param>
+        public TMP_ColorGradient(Color color)
+        {
+            colorMode = k_DefaultColorMode;
+            topLeft = color;
+            topRight = color;
+            bottomLeft = color;
+            bottomRight = color;
+        }
+
+        /// <summary>
+        /// The vertex colors at the corners of the characters.
+        /// </summary>
+        /// <param name="color0">Top left color.</param>
+        /// <param name="color1">Top right color.</param>
+        /// <param name="color2">Bottom left color.</param>
+        /// <param name="color3">Bottom right color.</param>
+        public TMP_ColorGradient(Color color0, Color color1, Color color2, Color color3)
+        {
+            colorMode = k_DefaultColorMode;
+            this.topLeft = color0;
+            this.topRight = color1;
+            this.bottomLeft = color2;
+            this.bottomRight = color3;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1d79d010f6d3dbaa9181e2bab5359c4078ba57d9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ColorGradient.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 54d21f6ece3b46479f0c328f8c6007e0
+timeCreated: 1468187202
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs
new file mode 100644
index 0000000000000000000000000000000000000000..bec1f54e96c6462dff5694199faaab50d1a1c0b1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs
@@ -0,0 +1,246 @@
+using UnityEngine;
+using UnityEngine.Events;
+using System.Collections;
+
+
+namespace TMPro
+{
+    // Base interface for tweeners,
+    // using an interface instead of
+    // an abstract class as we want the
+    // tweens to be structs.
+    internal interface ITweenValue
+    {
+        void TweenValue(float floatPercentage);
+        bool ignoreTimeScale { get; }
+        float duration { get; }
+        bool ValidTarget();
+    }
+
+    // Color tween class, receives the
+    // TweenValue callback and then sets
+    // the value on the target.
+    internal struct ColorTween : ITweenValue
+    {
+        public enum ColorTweenMode
+        {
+            All,
+            RGB,
+            Alpha
+        }
+
+        public class ColorTweenCallback : UnityEvent<Color> { }
+
+        private ColorTweenCallback m_Target;
+        private Color m_StartColor;
+        private Color m_TargetColor;
+        private ColorTweenMode m_TweenMode;
+
+        private float m_Duration;
+        private bool m_IgnoreTimeScale;
+
+        public Color startColor
+        {
+            get { return m_StartColor; }
+            set { m_StartColor = value; }
+        }
+
+        public Color targetColor
+        {
+            get { return m_TargetColor; }
+            set { m_TargetColor = value; }
+        }
+
+        public ColorTweenMode tweenMode
+        {
+            get { return m_TweenMode; }
+            set { m_TweenMode = value; }
+        }
+
+        public float duration
+        {
+            get { return m_Duration; }
+            set { m_Duration = value; }
+        }
+
+        public bool ignoreTimeScale
+        {
+            get { return m_IgnoreTimeScale; }
+            set { m_IgnoreTimeScale = value; }
+        }
+
+        public void TweenValue(float floatPercentage)
+        {
+            if (!ValidTarget())
+                return;
+
+            var newColor = Color.Lerp(m_StartColor, m_TargetColor, floatPercentage);
+
+            if (m_TweenMode == ColorTweenMode.Alpha)
+            {
+                newColor.r = m_StartColor.r;
+                newColor.g = m_StartColor.g;
+                newColor.b = m_StartColor.b;
+            }
+            else if (m_TweenMode == ColorTweenMode.RGB)
+            {
+                newColor.a = m_StartColor.a;
+            }
+            m_Target.Invoke(newColor);
+        }
+
+        public void AddOnChangedCallback(UnityAction<Color> callback)
+        {
+            if (m_Target == null)
+                m_Target = new ColorTweenCallback();
+
+            m_Target.AddListener(callback);
+        }
+
+        public bool GetIgnoreTimescale()
+        {
+            return m_IgnoreTimeScale;
+        }
+
+        public float GetDuration()
+        {
+            return m_Duration;
+        }
+
+        public bool ValidTarget()
+        {
+            return m_Target != null;
+        }
+    }
+
+    // Float tween class, receives the
+    // TweenValue callback and then sets
+    // the value on the target.
+    internal struct FloatTween : ITweenValue
+    {
+        public class FloatTweenCallback : UnityEvent<float> { }
+
+        private FloatTweenCallback m_Target;
+        private float m_StartValue;
+        private float m_TargetValue;
+
+        private float m_Duration;
+        private bool m_IgnoreTimeScale;
+
+        public float startValue
+        {
+            get { return m_StartValue; }
+            set { m_StartValue = value; }
+        }
+
+        public float targetValue
+        {
+            get { return m_TargetValue; }
+            set { m_TargetValue = value; }
+        }
+
+        public float duration
+        {
+            get { return m_Duration; }
+            set { m_Duration = value; }
+        }
+
+        public bool ignoreTimeScale
+        {
+            get { return m_IgnoreTimeScale; }
+            set { m_IgnoreTimeScale = value; }
+        }
+
+        public void TweenValue(float floatPercentage)
+        {
+            if (!ValidTarget())
+                return;
+
+            var newValue = Mathf.Lerp(m_StartValue, m_TargetValue, floatPercentage);
+            m_Target.Invoke(newValue);
+        }
+
+        public void AddOnChangedCallback(UnityAction<float> callback)
+        {
+            if (m_Target == null)
+                m_Target = new FloatTweenCallback();
+
+            m_Target.AddListener(callback);
+        }
+
+        public bool GetIgnoreTimescale()
+        {
+            return m_IgnoreTimeScale;
+        }
+
+        public float GetDuration()
+        {
+            return m_Duration;
+        }
+
+        public bool ValidTarget()
+        {
+            return m_Target != null;
+        }
+    }
+
+    // Tween runner, executes the given tween.
+    // The coroutine will live within the given
+    // behaviour container.
+    internal class TweenRunner<T> where T : struct, ITweenValue
+    {
+        protected MonoBehaviour m_CoroutineContainer;
+        protected IEnumerator m_Tween;
+
+        // utility function for starting the tween
+        private static IEnumerator Start(T tweenInfo)
+        {
+            if (!tweenInfo.ValidTarget())
+                yield break;
+
+            var elapsedTime = 0.0f;
+            while (elapsedTime < tweenInfo.duration)
+            {
+                elapsedTime += tweenInfo.ignoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime;
+                var percentage = Mathf.Clamp01(elapsedTime / tweenInfo.duration);
+                tweenInfo.TweenValue(percentage);
+                yield return null;
+            }
+            tweenInfo.TweenValue(1.0f);
+        }
+
+        public void Init(MonoBehaviour coroutineContainer)
+        {
+            m_CoroutineContainer = coroutineContainer;
+        }
+
+        public void StartTween(T info)
+        {
+            if (m_CoroutineContainer == null)
+            {
+                Debug.LogWarning("Coroutine container not configured... did you forget to call Init?");
+                return;
+            }
+
+            StopTween();
+
+            if (!m_CoroutineContainer.gameObject.activeInHierarchy)
+            {
+                info.TweenValue(1.0f);
+                return;
+            }
+
+            m_Tween = Start(info);
+            m_CoroutineContainer.StartCoroutine(m_Tween);
+        }
+
+        public void StopTween()
+        {
+            if (m_Tween != null)
+            {
+                m_CoroutineContainer.StopCoroutine(m_Tween);
+                m_Tween = null;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..01cf5eb39281ca252ce45fadef2ef160b1e8b6f3
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 658c1fb149e7498aa072b0c0f3bf13f0
+timeCreated: 1464850953
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7bc6f97efa3135008cf42e4be271e2a0b536b7f7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs
@@ -0,0 +1,385 @@
+using UnityEngine;
+using System.Collections;
+using UnityEngine.UI;
+
+
+namespace TMPro
+{
+
+    public static class TMP_DefaultControls
+    {
+        public struct Resources
+        {
+            public Sprite standard;
+            public Sprite background;
+            public Sprite inputField;
+            public Sprite knob;
+            public Sprite checkmark;
+            public Sprite dropdown;
+            public Sprite mask;
+        }
+
+        private const float kWidth = 160f;
+        private const float kThickHeight = 30f;
+        private const float kThinHeight = 20f;
+        private static Vector2 s_ThickElementSize = new Vector2(kWidth, kThickHeight);
+        private static Vector2 s_ThinElementSize = new Vector2(kWidth, kThinHeight);
+        //private static Vector2 s_ImageElementSize = new Vector2(100f, 100f);
+        private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f);
+        //private static Color s_PanelColor = new Color(1f, 1f, 1f, 0.392f);
+        private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f);
+
+
+        private static GameObject CreateUIElementRoot(string name, Vector2 size)
+        {
+            GameObject child = new GameObject(name);
+            RectTransform rectTransform = child.AddComponent<RectTransform>();
+            rectTransform.sizeDelta = size;
+            return child;
+        }
+
+        static GameObject CreateUIObject(string name, GameObject parent)
+        {
+            GameObject go = new GameObject(name);
+            go.AddComponent<RectTransform>();
+            SetParentAndAlign(go, parent);
+            return go;
+        }
+
+        private static void SetDefaultTextValues(TMP_Text lbl)
+        {
+            // Set text values we want across UI elements in default controls.
+            // Don't set values which are the same as the default values for the Text component,
+            // since there's no point in that, and it's good to keep them as consistent as possible.
+            lbl.color = s_TextColor;
+            lbl.fontSize = 14;
+        }
+
+        private static void SetDefaultColorTransitionValues(Selectable slider)
+        {
+            ColorBlock colors = slider.colors;
+            colors.highlightedColor = new Color(0.882f, 0.882f, 0.882f);
+            colors.pressedColor = new Color(0.698f, 0.698f, 0.698f);
+            colors.disabledColor = new Color(0.521f, 0.521f, 0.521f);
+        }
+
+        private static void SetParentAndAlign(GameObject child, GameObject parent)
+        {
+            if (parent == null)
+                return;
+
+            child.transform.SetParent(parent.transform, false);
+            SetLayerRecursively(child, parent.layer);
+        }
+
+        private static void SetLayerRecursively(GameObject go, int layer)
+        {
+            go.layer = layer;
+            Transform t = go.transform;
+            for (int i = 0; i < t.childCount; i++)
+                SetLayerRecursively(t.GetChild(i).gameObject, layer);
+        }
+
+        // Actual controls
+
+        public static GameObject CreateScrollbar(Resources resources)
+        {
+            // Create GOs Hierarchy
+            GameObject scrollbarRoot = CreateUIElementRoot("Scrollbar", s_ThinElementSize);
+
+            GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot);
+            GameObject handle = CreateUIObject("Handle", sliderArea);
+
+            Image bgImage = scrollbarRoot.AddComponent<Image>();
+            bgImage.sprite = resources.background;
+            bgImage.type = Image.Type.Sliced;
+            bgImage.color = s_DefaultSelectableColor;
+
+            Image handleImage = handle.AddComponent<Image>();
+            handleImage.sprite = resources.standard;
+            handleImage.type = Image.Type.Sliced;
+            handleImage.color = s_DefaultSelectableColor;
+
+            RectTransform sliderAreaRect = sliderArea.GetComponent<RectTransform>();
+            sliderAreaRect.sizeDelta = new Vector2(-20, -20);
+            sliderAreaRect.anchorMin = Vector2.zero;
+            sliderAreaRect.anchorMax = Vector2.one;
+
+            RectTransform handleRect = handle.GetComponent<RectTransform>();
+            handleRect.sizeDelta = new Vector2(20, 20);
+
+            Scrollbar scrollbar = scrollbarRoot.AddComponent<Scrollbar>();
+            scrollbar.handleRect = handleRect;
+            scrollbar.targetGraphic = handleImage;
+            SetDefaultColorTransitionValues(scrollbar);
+
+            return scrollbarRoot;
+        }
+
+        public static GameObject CreateButton(Resources resources)
+        {
+            GameObject buttonRoot = CreateUIElementRoot("Button", s_ThickElementSize);
+
+            GameObject childText = new GameObject("Text (TMP)");
+            childText.AddComponent<RectTransform>();
+            SetParentAndAlign(childText, buttonRoot);
+
+            Image image = buttonRoot.AddComponent<Image>();
+            image.sprite = resources.standard;
+            image.type = Image.Type.Sliced;
+            image.color = s_DefaultSelectableColor;
+
+            Button bt = buttonRoot.AddComponent<Button>();
+            SetDefaultColorTransitionValues(bt);
+
+            TextMeshProUGUI text = childText.AddComponent<TextMeshProUGUI>();
+            text.text = "Button";
+            text.alignment = TextAlignmentOptions.Center;
+            SetDefaultTextValues(text);
+
+            RectTransform textRectTransform = childText.GetComponent<RectTransform>();
+            textRectTransform.anchorMin = Vector2.zero;
+            textRectTransform.anchorMax = Vector2.one;
+            textRectTransform.sizeDelta = Vector2.zero;
+
+            return buttonRoot;
+        }
+
+        public static GameObject CreateText(Resources resources)
+        {
+            GameObject go = CreateUIElementRoot("Text (TMP)", s_ThickElementSize);
+
+            TextMeshProUGUI lbl = go.AddComponent<TextMeshProUGUI>();
+            lbl.text = "New Text";
+            SetDefaultTextValues(lbl);
+
+            return go;
+        }
+
+
+        public static GameObject CreateInputField(Resources resources)
+        {
+            GameObject root = CreateUIElementRoot("InputField (TMP)", s_ThickElementSize);
+
+            GameObject textArea = CreateUIObject("Text Area", root);
+            GameObject childPlaceholder = CreateUIObject("Placeholder", textArea);
+            GameObject childText = CreateUIObject("Text", textArea);
+
+            Image image = root.AddComponent<Image>();
+            image.sprite = resources.inputField;
+            image.type = Image.Type.Sliced;
+            image.color = s_DefaultSelectableColor;
+
+            TMP_InputField inputField = root.AddComponent<TMP_InputField>();
+            SetDefaultColorTransitionValues(inputField);
+
+            // Use UI.Mask for Unity 5.0 - 5.1 and 2D RectMask for Unity 5.2 and up
+            textArea.AddComponent<RectMask2D>();
+
+            RectTransform textAreaRectTransform = textArea.GetComponent<RectTransform>();
+            textAreaRectTransform.anchorMin = Vector2.zero;
+            textAreaRectTransform.anchorMax = Vector2.one;
+            textAreaRectTransform.sizeDelta = Vector2.zero;
+            textAreaRectTransform.offsetMin = new Vector2(10, 6);
+            textAreaRectTransform.offsetMax = new Vector2(-10, -7);
+
+
+            TextMeshProUGUI text = childText.AddComponent<TextMeshProUGUI>();
+            text.text = "";
+            text.enableWordWrapping = false;
+            text.extraPadding = true;
+            text.richText = true;
+            SetDefaultTextValues(text);
+
+            TextMeshProUGUI placeholder = childPlaceholder.AddComponent<TextMeshProUGUI>();
+            placeholder.text = "Enter text...";
+            placeholder.fontSize = 14;
+            placeholder.fontStyle = FontStyles.Italic;
+            placeholder.enableWordWrapping = false;
+            placeholder.extraPadding = true;
+
+            // Make placeholder color half as opaque as normal text color.
+            Color placeholderColor = text.color;
+            placeholderColor.a *= 0.5f;
+            placeholder.color = placeholderColor;
+
+            RectTransform textRectTransform = childText.GetComponent<RectTransform>();
+            textRectTransform.anchorMin = Vector2.zero;
+            textRectTransform.anchorMax = Vector2.one;
+            textRectTransform.sizeDelta = Vector2.zero;
+            textRectTransform.offsetMin = new Vector2(0, 0);
+            textRectTransform.offsetMax = new Vector2(0, 0);
+
+            RectTransform placeholderRectTransform = childPlaceholder.GetComponent<RectTransform>();
+            placeholderRectTransform.anchorMin = Vector2.zero;
+            placeholderRectTransform.anchorMax = Vector2.one;
+            placeholderRectTransform.sizeDelta = Vector2.zero;
+            placeholderRectTransform.offsetMin = new Vector2(0, 0);
+            placeholderRectTransform.offsetMax = new Vector2(0, 0);
+
+            inputField.textViewport = textAreaRectTransform;
+            inputField.textComponent = text;
+            inputField.placeholder = placeholder;
+            inputField.fontAsset = text.font;
+
+            return root;
+        }
+
+        public static GameObject CreateDropdown(Resources resources)
+        {
+            GameObject root = CreateUIElementRoot("Dropdown", s_ThickElementSize);
+
+            GameObject label = CreateUIObject("Label", root);
+            GameObject arrow = CreateUIObject("Arrow", root);
+            GameObject template = CreateUIObject("Template", root);
+            GameObject viewport = CreateUIObject("Viewport", template);
+            GameObject content = CreateUIObject("Content", viewport);
+            GameObject item = CreateUIObject("Item", content);
+            GameObject itemBackground = CreateUIObject("Item Background", item);
+            GameObject itemCheckmark = CreateUIObject("Item Checkmark", item);
+            GameObject itemLabel = CreateUIObject("Item Label", item);
+
+            // Sub controls.
+
+            GameObject scrollbar = CreateScrollbar(resources);
+            scrollbar.name = "Scrollbar";
+            SetParentAndAlign(scrollbar, template);
+
+            Scrollbar scrollbarScrollbar = scrollbar.GetComponent<Scrollbar>();
+            scrollbarScrollbar.SetDirection(Scrollbar.Direction.BottomToTop, true);
+
+            RectTransform vScrollbarRT = scrollbar.GetComponent<RectTransform>();
+            vScrollbarRT.anchorMin = Vector2.right;
+            vScrollbarRT.anchorMax = Vector2.one;
+            vScrollbarRT.pivot = Vector2.one;
+            vScrollbarRT.sizeDelta = new Vector2(vScrollbarRT.sizeDelta.x, 0);
+
+            // Setup item UI components.
+
+            TextMeshProUGUI itemLabelText = itemLabel.AddComponent<TextMeshProUGUI>();
+            SetDefaultTextValues(itemLabelText);
+            itemLabelText.alignment = TextAlignmentOptions.Left;
+
+            Image itemBackgroundImage = itemBackground.AddComponent<Image>();
+            itemBackgroundImage.color = new Color32(245, 245, 245, 255);
+
+            Image itemCheckmarkImage = itemCheckmark.AddComponent<Image>();
+            itemCheckmarkImage.sprite = resources.checkmark;
+
+            Toggle itemToggle = item.AddComponent<Toggle>();
+            itemToggle.targetGraphic = itemBackgroundImage;
+            itemToggle.graphic = itemCheckmarkImage;
+            itemToggle.isOn = true;
+
+            // Setup template UI components.
+
+            Image templateImage = template.AddComponent<Image>();
+            templateImage.sprite = resources.standard;
+            templateImage.type = Image.Type.Sliced;
+
+            ScrollRect templateScrollRect = template.AddComponent<ScrollRect>();
+            templateScrollRect.content = (RectTransform)content.transform;
+            templateScrollRect.viewport = (RectTransform)viewport.transform;
+            templateScrollRect.horizontal = false;
+            templateScrollRect.movementType = ScrollRect.MovementType.Clamped;
+            templateScrollRect.verticalScrollbar = scrollbarScrollbar;
+            templateScrollRect.verticalScrollbarVisibility = ScrollRect.ScrollbarVisibility.AutoHideAndExpandViewport;
+            templateScrollRect.verticalScrollbarSpacing = -3;
+
+            Mask scrollRectMask = viewport.AddComponent<Mask>();
+            scrollRectMask.showMaskGraphic = false;
+
+            Image viewportImage = viewport.AddComponent<Image>();
+            viewportImage.sprite = resources.mask;
+            viewportImage.type = Image.Type.Sliced;
+
+            // Setup dropdown UI components.
+
+            TextMeshProUGUI labelText = label.AddComponent<TextMeshProUGUI>();
+            SetDefaultTextValues(labelText);
+            labelText.alignment = TextAlignmentOptions.Left;
+
+            Image arrowImage = arrow.AddComponent<Image>();
+            arrowImage.sprite = resources.dropdown;
+
+            Image backgroundImage = root.AddComponent<Image>();
+            backgroundImage.sprite = resources.standard;
+            backgroundImage.color = s_DefaultSelectableColor;
+            backgroundImage.type = Image.Type.Sliced;
+
+            TMP_Dropdown dropdown = root.AddComponent<TMP_Dropdown>();
+            dropdown.targetGraphic = backgroundImage;
+            SetDefaultColorTransitionValues(dropdown);
+            dropdown.template = template.GetComponent<RectTransform>();
+            dropdown.captionText = labelText;
+            dropdown.itemText = itemLabelText;
+
+            // Setting default Item list.
+            itemLabelText.text = "Option A";
+            dropdown.options.Add(new TMP_Dropdown.OptionData {text = "Option A" });
+            dropdown.options.Add(new TMP_Dropdown.OptionData {text = "Option B" });
+            dropdown.options.Add(new TMP_Dropdown.OptionData {text = "Option C" });
+            dropdown.RefreshShownValue();
+
+            // Set up RectTransforms.
+
+            RectTransform labelRT = label.GetComponent<RectTransform>();
+            labelRT.anchorMin = Vector2.zero;
+            labelRT.anchorMax = Vector2.one;
+            labelRT.offsetMin = new Vector2(10, 6);
+            labelRT.offsetMax = new Vector2(-25, -7);
+
+            RectTransform arrowRT = arrow.GetComponent<RectTransform>();
+            arrowRT.anchorMin = new Vector2(1, 0.5f);
+            arrowRT.anchorMax = new Vector2(1, 0.5f);
+            arrowRT.sizeDelta = new Vector2(20, 20);
+            arrowRT.anchoredPosition = new Vector2(-15, 0);
+
+            RectTransform templateRT = template.GetComponent<RectTransform>();
+            templateRT.anchorMin = new Vector2(0, 0);
+            templateRT.anchorMax = new Vector2(1, 0);
+            templateRT.pivot = new Vector2(0.5f, 1);
+            templateRT.anchoredPosition = new Vector2(0, 2);
+            templateRT.sizeDelta = new Vector2(0, 150);
+
+            RectTransform viewportRT = viewport.GetComponent<RectTransform>();
+            viewportRT.anchorMin = new Vector2(0, 0);
+            viewportRT.anchorMax = new Vector2(1, 1);
+            viewportRT.sizeDelta = new Vector2(-18, 0);
+            viewportRT.pivot = new Vector2(0, 1);
+
+            RectTransform contentRT = content.GetComponent<RectTransform>();
+            contentRT.anchorMin = new Vector2(0f, 1);
+            contentRT.anchorMax = new Vector2(1f, 1);
+            contentRT.pivot = new Vector2(0.5f, 1);
+            contentRT.anchoredPosition = new Vector2(0, 0);
+            contentRT.sizeDelta = new Vector2(0, 28);
+
+            RectTransform itemRT = item.GetComponent<RectTransform>();
+            itemRT.anchorMin = new Vector2(0, 0.5f);
+            itemRT.anchorMax = new Vector2(1, 0.5f);
+            itemRT.sizeDelta = new Vector2(0, 20);
+
+            RectTransform itemBackgroundRT = itemBackground.GetComponent<RectTransform>();
+            itemBackgroundRT.anchorMin = Vector2.zero;
+            itemBackgroundRT.anchorMax = Vector2.one;
+            itemBackgroundRT.sizeDelta = Vector2.zero;
+
+            RectTransform itemCheckmarkRT = itemCheckmark.GetComponent<RectTransform>();
+            itemCheckmarkRT.anchorMin = new Vector2(0, 0.5f);
+            itemCheckmarkRT.anchorMax = new Vector2(0, 0.5f);
+            itemCheckmarkRT.sizeDelta = new Vector2(20, 20);
+            itemCheckmarkRT.anchoredPosition = new Vector2(10, 0);
+
+            RectTransform itemLabelRT = itemLabel.GetComponent<RectTransform>();
+            itemLabelRT.anchorMin = Vector2.zero;
+            itemLabelRT.anchorMax = Vector2.one;
+            itemLabelRT.offsetMin = new Vector2(20, 1);
+            itemLabelRT.offsetMax = new Vector2(-10, -2);
+
+            template.SetActive(false);
+
+            return root;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7d4ac6f7faa693530c0a4714f5945da82d21a3da
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_DefaultControls.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 322392995be44d23a3c86cfd972f838f
+timeCreated: 1446378357
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4d32213e17f0e1d252585473fde7e9cfb6abe41b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs
@@ -0,0 +1,1059 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+using UnityEngine.EventSystems;
+using UnityEngine.UI.CoroutineTween;
+
+namespace TMPro
+{
+    [AddComponentMenu("UI/Dropdown - TextMeshPro", 35)]
+    [RequireComponent(typeof(RectTransform))]
+    /// <summary>
+    ///   A standard dropdown that presents a list of options when clicked, of which one can be chosen.
+    /// </summary>
+    /// <remarks>
+    /// The dropdown component is a Selectable. When an option is chosen, the label and/or image of the control changes to show the chosen option.
+    ///
+    /// When a dropdown event occurs a callback is sent to any registered listeners of onValueChanged.
+    /// </remarks>
+    public class TMP_Dropdown : Selectable, IPointerClickHandler, ISubmitHandler, ICancelHandler
+    {
+        protected internal class DropdownItem : MonoBehaviour, IPointerEnterHandler, ICancelHandler
+        {
+            [SerializeField]
+            private TMP_Text m_Text;
+            [SerializeField]
+            private Image m_Image;
+            [SerializeField]
+            private RectTransform m_RectTransform;
+            [SerializeField]
+            private Toggle m_Toggle;
+
+            public TMP_Text text { get { return m_Text; } set { m_Text = value; } }
+            public Image image { get { return m_Image; } set { m_Image = value; } }
+            public RectTransform rectTransform { get { return m_RectTransform; } set { m_RectTransform = value; } }
+            public Toggle toggle { get { return m_Toggle; } set { m_Toggle = value; } }
+
+            public virtual void OnPointerEnter(PointerEventData eventData)
+            {
+                EventSystem.current.SetSelectedGameObject(gameObject);
+            }
+
+            public virtual void OnCancel(BaseEventData eventData)
+            {
+                TMP_Dropdown dropdown = GetComponentInParent<TMP_Dropdown>();
+                if (dropdown)
+                    dropdown.Hide();
+            }
+        }
+
+        [Serializable]
+        /// <summary>
+        /// Class to store the text and/or image of a single option in the dropdown list.
+        /// </summary>
+        public class OptionData
+        {
+            [SerializeField]
+            private string m_Text;
+            [SerializeField]
+            private Sprite m_Image;
+
+            /// <summary>
+            /// The text associated with the option.
+            /// </summary>
+            public string text { get { return m_Text; } set { m_Text = value; } }
+
+            /// <summary>
+            /// The image associated with the option.
+            /// </summary>
+            public Sprite image { get { return m_Image; } set { m_Image = value; } }
+
+            public OptionData() { }
+
+            public OptionData(string text)
+            {
+                this.text = text;
+            }
+
+            public OptionData(Sprite image)
+            {
+                this.image = image;
+            }
+
+            /// <summary>
+            /// Create an object representing a single option for the dropdown list.
+            /// </summary>
+            /// <param name="text">Optional text for the option.</param>
+            /// <param name="image">Optional image for the option.</param>
+            public OptionData(string text, Sprite image)
+            {
+                this.text = text;
+                this.image = image;
+            }
+        }
+
+        [Serializable]
+        /// <summary>
+        /// Class used internally to store the list of options for the dropdown list.
+        /// </summary>
+        /// <remarks>
+        /// The usage of this class is not exposed in the runtime API. It's only relevant for the PropertyDrawer drawing the list of options.
+        /// </remarks>
+        public class OptionDataList
+        {
+            [SerializeField]
+            private List<OptionData> m_Options;
+
+            /// <summary>
+            /// The list of options for the dropdown list.
+            /// </summary>
+            public List<OptionData> options { get { return m_Options; } set { m_Options = value; } }
+
+
+            public OptionDataList()
+            {
+                options = new List<OptionData>();
+            }
+        }
+
+        [Serializable]
+        /// <summary>
+        /// UnityEvent callback for when a dropdown current option is changed.
+        /// </summary>
+        public class DropdownEvent : UnityEvent<int> { }
+
+        // Template used to create the dropdown.
+        [SerializeField]
+        private RectTransform m_Template;
+
+        /// <summary>
+        /// The Rect Transform of the template for the dropdown list.
+        /// </summary>
+        public RectTransform template { get { return m_Template; } set { m_Template = value; RefreshShownValue(); } }
+
+        // Text to be used as a caption for the current value. It's not required, but it's kept here for convenience.
+        [SerializeField]
+        private TMP_Text m_CaptionText;
+
+        /// <summary>
+        /// The Text component to hold the text of the currently selected option.
+        /// </summary>
+        public TMP_Text captionText { get { return m_CaptionText; } set { m_CaptionText = value; RefreshShownValue(); } }
+
+        [SerializeField]
+        private Image m_CaptionImage;
+
+        /// <summary>
+        /// The Image component to hold the image of the currently selected option.
+        /// </summary>
+        public Image captionImage { get { return m_CaptionImage; } set { m_CaptionImage = value; RefreshShownValue(); } }
+
+        [Space]
+
+        [SerializeField]
+        private TMP_Text m_ItemText;
+
+        /// <summary>
+        /// The Text component to hold the text of the item.
+        /// </summary>
+        public TMP_Text itemText { get { return m_ItemText; } set { m_ItemText = value; RefreshShownValue(); } }
+
+        [SerializeField]
+        private Image m_ItemImage;
+
+        /// <summary>
+        /// The Image component to hold the image of the item
+        /// </summary>
+        public Image itemImage { get { return m_ItemImage; } set { m_ItemImage = value; RefreshShownValue(); } }
+
+        [Space]
+
+        [SerializeField]
+        private int m_Value;
+
+        [Space]
+
+        // Items that will be visible when the dropdown is shown.
+        // We box this into its own class so we can use a Property Drawer for it.
+        [SerializeField]
+        private OptionDataList m_Options = new OptionDataList();
+
+        /// <summary>
+        /// The list of possible options. A text string and an image can be specified for each option.
+        /// </summary>
+        /// <remarks>
+        /// This is the list of options within the Dropdown. Each option contains Text and/or image data that you can specify using UI.Dropdown.OptionData before adding to the Dropdown list.
+        /// This also unlocks the ability to edit the Dropdown, including the insertion, removal, and finding of options, as well as other useful tools
+        /// </remarks>
+        /// /// <example>
+        /// <code>
+        /// //Create a new Dropdown GameObject by going to the Hierarchy and clicking Create>UI>Dropdown - TextMeshPro. Attach this script to the Dropdown GameObject.
+        ///
+        /// using UnityEngine;
+        /// using UnityEngine.UI;
+        /// using System.Collections.Generic;
+        /// using TMPro;
+        ///
+        /// public class Example : MonoBehaviour
+        /// {
+        ///     //Use these for adding options to the Dropdown List
+        ///     TMP_Dropdown.OptionData m_NewData, m_NewData2;
+        ///     //The list of messages for the Dropdown
+        ///     List<TMP_Dropdown.OptionData> m_Messages = new List<TMP_Dropdown.OptionData>();
+        ///
+        ///
+        ///     //This is the Dropdown
+        ///     TMP_Dropdown m_Dropdown;
+        ///     string m_MyString;
+        ///     int m_Index;
+        ///
+        ///     void Start()
+        ///     {
+        ///         //Fetch the Dropdown GameObject the script is attached to
+        ///         m_Dropdown = GetComponent<TMP_Dropdown>();
+        ///         //Clear the old options of the Dropdown menu
+        ///         m_Dropdown.ClearOptions();
+        ///
+        ///         //Create a new option for the Dropdown menu which reads "Option 1" and add to messages List
+        ///         m_NewData = new TMP_Dropdown.OptionData();
+        ///         m_NewData.text = "Option 1";
+        ///         m_Messages.Add(m_NewData);
+        ///
+        ///         //Create a new option for the Dropdown menu which reads "Option 2" and add to messages List
+        ///         m_NewData2 = new TMP_Dropdown.OptionData();
+        ///         m_NewData2.text = "Option 2";
+        ///         m_Messages.Add(m_NewData2);
+        ///
+        ///         //Take each entry in the message List
+        ///         foreach (TMP_Dropdown.OptionData message in m_Messages)
+        ///         {
+        ///             //Add each entry to the Dropdown
+        ///             m_Dropdown.options.Add(message);
+        ///             //Make the index equal to the total number of entries
+        ///             m_Index = m_Messages.Count - 1;
+        ///         }
+        ///     }
+        ///
+        ///     //This OnGUI function is used here for a quick demonstration. See the [[wiki:UISystem|UI Section]] for more information about setting up your own UI.
+        ///     void OnGUI()
+        ///     {
+        ///         //TextField for user to type new entry to add to Dropdown
+        ///         m_MyString = GUI.TextField(new Rect(0, 40, 100, 40), m_MyString);
+        ///
+        ///         //Press the "Add" Button to add a new entry to the Dropdown
+        ///         if (GUI.Button(new Rect(0, 0, 100, 40), "Add"))
+        ///         {
+        ///             //Make the index the last number of entries
+        ///             m_Index = m_Messages.Count;
+        ///             //Create a temporary option
+        ///             TMP_Dropdown.OptionData temp = new TMP_Dropdown.OptionData();
+        ///             //Make the option the data from the TextField
+        ///             temp.text = m_MyString;
+        ///
+        ///             //Update the messages list with the TextField data
+        ///             m_Messages.Add(temp);
+        ///
+        ///             //Add the Textfield data to the Dropdown
+        ///             m_Dropdown.options.Insert(m_Index, temp);
+        ///         }
+        ///
+        ///         //Press the "Remove" button to delete the selected option
+        ///         if (GUI.Button(new Rect(110, 0, 100, 40), "Remove"))
+        ///         {
+        ///             //Remove the current selected item from the Dropdown from the messages List
+        ///             m_Messages.RemoveAt(m_Dropdown.value);
+        ///             //Remove the current selection from the Dropdown
+        ///             m_Dropdown.options.RemoveAt(m_Dropdown.value);
+        ///         }
+        ///     }
+        /// }
+        /// </code>
+        /// </example>
+        public List<OptionData> options
+        {
+            get { return m_Options.options; }
+            set { m_Options.options = value; RefreshShownValue(); }
+        }
+
+        [Space]
+
+        // Notification triggered when the dropdown changes.
+        [SerializeField]
+        private DropdownEvent m_OnValueChanged = new DropdownEvent();
+
+        /// <summary>
+        /// A UnityEvent that is invoked when a user has clicked one of the options in the dropdown list.
+        /// </summary>
+        /// <remarks>
+        /// Use this to detect when a user selects one or more options in the Dropdown. Add a listener to perform an action when this UnityEvent detects a selection by the user. See https://unity3d.com/learn/tutorials/topics/scripting/delegates for more information on delegates.
+        /// </remarks>
+        /// <example>
+        ///  <code>
+        /// //Create a new Dropdown GameObject by going to the Hierarchy and clicking Create>UI>Dropdown - TextMeshPro. Attach this script to the Dropdown GameObject.
+        /// //Set your own Text in the Inspector window
+        ///
+        /// using UnityEngine;
+        /// using UnityEngine.UI;
+        /// using TMPro;
+        ///
+        /// public class Example : MonoBehaviour
+        /// {
+        ///     TMP_Dropdown m_Dropdown;
+        ///     public Text m_Text;
+        ///
+        ///     void Start()
+        ///     {
+        ///         //Fetch the Dropdown GameObject
+        ///         m_Dropdown = GetComponent<TMP_Dropdown>();
+        ///         //Add listener for when the value of the Dropdown changes, to take action
+        ///         m_Dropdown.onValueChanged.AddListener(delegate {
+        ///                 DropdownValueChanged(m_Dropdown);
+        ///             });
+        ///
+        ///         //Initialize the Text to say the first value of the Dropdown
+        ///         m_Text.text = "First Value : " + m_Dropdown.value;
+        ///     }
+        ///
+        ///     //Output the new value of the Dropdown into Text
+        ///     void DropdownValueChanged(TMP_Dropdown change)
+        ///     {
+        ///         m_Text.text =  "New Value : " + change.value;
+        ///     }
+        /// }
+        /// </code>
+        /// </example>
+        public DropdownEvent onValueChanged { get { return m_OnValueChanged; } set { m_OnValueChanged = value; } }
+
+        private GameObject m_Dropdown;
+        private GameObject m_Blocker;
+        private List<DropdownItem> m_Items = new List<DropdownItem>();
+        private TweenRunner<FloatTween> m_AlphaTweenRunner;
+        private bool validTemplate = false;
+
+        private static OptionData s_NoOptionData = new OptionData();
+
+        /// <summary>
+        /// The Value is the index number of the current selection in the Dropdown. 0 is the first option in the Dropdown, 1 is the second, and so on.
+        /// </summary>
+        /// <example>
+        /// <code>
+        /// //Create a new Dropdown GameObject by going to the Hierarchy and clicking Create>UI>Dropdown - TextMeshPro. Attach this script to the Dropdown GameObject.
+        /// //Set your own Text in the Inspector window
+        ///
+        /// using UnityEngine;
+        /// using UnityEngine.UI;
+        /// using TMPro;
+        ///
+        /// public class Example : MonoBehaviour
+        /// {
+        ///     //Attach this script to a Dropdown GameObject
+        ///     TMP_Dropdown m_Dropdown;
+        ///     //This is the string that stores the current selection m_Text of the Dropdown
+        ///     string m_Message;
+        ///     //This Text outputs the current selection to the screen
+        ///     public Text m_Text;
+        ///     //This is the index value of the Dropdown
+        ///     int m_DropdownValue;
+        ///
+        ///     void Start()
+        ///     {
+        ///         //Fetch the DropDown component from the GameObject
+        ///         m_Dropdown = GetComponent<TMP_Dropdown>();
+        ///         //Output the first Dropdown index value
+        ///         Debug.Log("Starting Dropdown Value : " + m_Dropdown.value);
+        ///     }
+        ///
+        ///     void Update()
+        ///     {
+        ///         //Keep the current index of the Dropdown in a variable
+        ///         m_DropdownValue = m_Dropdown.value;
+        ///         //Change the message to say the name of the current Dropdown selection using the value
+        ///         m_Message = m_Dropdown.options[m_DropdownValue].text;
+        ///         //Change the on screen Text to reflect the current Dropdown selection
+        ///         m_Text.text = m_Message;
+        ///     }
+        /// }
+        /// </code>
+        /// </example>
+        public int value
+        {
+            get
+            {
+                return m_Value;
+            }
+            set
+            {
+                SetValue(value);
+            }
+        }
+
+        /// <summary>
+        /// Set index number of the current selection in the Dropdown without invoking onValueChanged callback.
+        /// </summary>
+        /// <param name="input">The new index for the current selection.</param>
+        public void SetValueWithoutNotify(int input)
+        {
+            SetValue(input, false);
+        }
+
+        void SetValue(int value, bool sendCallback = true)
+        {
+            if (Application.isPlaying && (value == m_Value || options.Count == 0))
+                return;
+
+            m_Value = Mathf.Clamp(value, 0, options.Count - 1);
+            RefreshShownValue();
+
+            if (sendCallback)
+            {
+                // Notify all listeners
+                UISystemProfilerApi.AddMarker("Dropdown.value", this);
+                m_OnValueChanged.Invoke(m_Value);
+            }
+        }
+
+        public bool IsExpanded { get { return m_Dropdown != null; } }
+
+        protected TMP_Dropdown() { }
+
+        protected override void Awake()
+        {
+            #if UNITY_EDITOR
+            if (!Application.isPlaying)
+                return;
+            #endif
+
+            m_AlphaTweenRunner = new TweenRunner<FloatTween>();
+            m_AlphaTweenRunner.Init(this);
+
+            if (m_CaptionImage)
+                m_CaptionImage.enabled = (m_CaptionImage.sprite != null);
+
+            if (m_Template)
+                m_Template.gameObject.SetActive(false);
+        }
+
+        protected override void Start()
+        {
+            base.Start();
+
+            RefreshShownValue();
+        }
+
+        #if UNITY_EDITOR
+        protected override void OnValidate()
+        {
+            base.OnValidate();
+
+            if (!IsActive())
+                return;
+
+            RefreshShownValue();
+        }
+        #endif
+
+        protected override void OnDisable()
+        {
+            //Destroy dropdown and blocker in case user deactivates the dropdown when they click an option (case 935649)
+            ImmediateDestroyDropdownList();
+
+            if (m_Blocker != null)
+                DestroyBlocker(m_Blocker);
+            m_Blocker = null;
+        }
+
+        /// <summary>
+        /// Refreshes the text and image (if available) of the currently selected option.
+        /// </summary>
+        /// <remarks>
+        /// If you have modified the list of options, you should call this method afterwards to ensure that the visual state of the dropdown corresponds to the updated options.
+        /// </remarks>
+        public void RefreshShownValue()
+        {
+            OptionData data = s_NoOptionData;
+
+            if (options.Count > 0)
+                data = options[Mathf.Clamp(m_Value, 0, options.Count - 1)];
+
+            if (m_CaptionText)
+            {
+                if (data != null && data.text != null)
+                    m_CaptionText.text = data.text;
+                else
+                    m_CaptionText.text = "";
+            }
+
+            if (m_CaptionImage)
+            {
+                if (data != null)
+                    m_CaptionImage.sprite = data.image;
+                else
+                    m_CaptionImage.sprite = null;
+                m_CaptionImage.enabled = (m_CaptionImage.sprite != null);
+            }
+        }
+
+        /// <summary>
+        /// Add multiple options to the options of the Dropdown based on a list of OptionData objects.
+        /// </summary>
+        /// <param name="options">The list of OptionData to add.</param>
+        /// /// <remarks>
+        /// See AddOptions(List<string> options) for code example of usages.
+        /// </remarks>
+        public void AddOptions(List<OptionData> options)
+        {
+            this.options.AddRange(options);
+            RefreshShownValue();
+        }
+
+        /// <summary>
+        /// Add multiple text-only options to the options of the Dropdown based on a list of strings.
+        /// </summary>
+        /// <remarks>
+        /// Add a List of string messages to the Dropdown. The Dropdown shows each member of the list as a separate option.
+        /// </remarks>
+        /// <param name="options">The list of text strings to add.</param>
+        /// <example>
+        /// <code>
+        /// //Create a new Dropdown GameObject by going to the Hierarchy and clicking Create>UI>Dropdown - TextMeshPro. Attach this script to the Dropdown GameObject.
+        ///
+        /// using System.Collections.Generic;
+        /// using UnityEngine;
+        /// using UnityEngine.UI;
+        /// using TMPro;
+        ///
+        /// public class Example : MonoBehaviour
+        /// {
+        ///     //Create a List of new Dropdown options
+        ///     List<string> m_DropOptions = new List<string> { "Option 1", "Option 2"};
+        ///     //This is the Dropdown
+        ///     TMP_Dropdown m_Dropdown;
+        ///
+        ///     void Start()
+        ///     {
+        ///         //Fetch the Dropdown GameObject the script is attached to
+        ///         m_Dropdown = GetComponent<TMP_Dropdown>();
+        ///         //Clear the old options of the Dropdown menu
+        ///         m_Dropdown.ClearOptions();
+        ///         //Add the options created in the List above
+        ///         m_Dropdown.AddOptions(m_DropOptions);
+        ///     }
+        /// }
+        /// </code>
+        /// </example>
+        public void AddOptions(List<string> options)
+        {
+            for (int i = 0; i < options.Count; i++)
+                this.options.Add(new OptionData(options[i]));
+
+            RefreshShownValue();
+        }
+
+        /// <summary>
+        /// Add multiple image-only options to the options of the Dropdown based on a list of Sprites.
+        /// </summary>
+        /// <param name="options">The list of Sprites to add.</param>
+        /// <remarks>
+        /// See AddOptions(List<string> options) for code example of usages.
+        /// </remarks>
+        public void AddOptions(List<Sprite> options)
+        {
+            for (int i = 0; i < options.Count; i++)
+                this.options.Add(new OptionData(options[i]));
+
+            RefreshShownValue();
+        }
+
+        /// <summary>
+        /// Clear the list of options in the Dropdown.
+        /// </summary>
+        public void ClearOptions()
+        {
+            options.Clear();
+            m_Value = 0;
+            RefreshShownValue();
+        }
+
+        private void SetupTemplate()
+        {
+            validTemplate = false;
+
+            if (!m_Template)
+            {
+                Debug.LogError("The dropdown template is not assigned. The template needs to be assigned and must have a child GameObject with a Toggle component serving as the item.", this);
+                return;
+            }
+
+            GameObject templateGo = m_Template.gameObject;
+            templateGo.SetActive(true);
+            Toggle itemToggle = m_Template.GetComponentInChildren<Toggle>();
+
+            validTemplate = true;
+            if (!itemToggle || itemToggle.transform == template)
+            {
+                validTemplate = false;
+                Debug.LogError("The dropdown template is not valid. The template must have a child GameObject with a Toggle component serving as the item.", template);
+            }
+            else if (!(itemToggle.transform.parent is RectTransform))
+            {
+                validTemplate = false;
+                Debug.LogError("The dropdown template is not valid. The child GameObject with a Toggle component (the item) must have a RectTransform on its parent.", template);
+            }
+            else if (itemText != null && !itemText.transform.IsChildOf(itemToggle.transform))
+            {
+                validTemplate = false;
+                Debug.LogError("The dropdown template is not valid. The Item Text must be on the item GameObject or children of it.", template);
+            }
+            else if (itemImage != null && !itemImage.transform.IsChildOf(itemToggle.transform))
+            {
+                validTemplate = false;
+                Debug.LogError("The dropdown template is not valid. The Item Image must be on the item GameObject or children of it.", template);
+            }
+
+            if (!validTemplate)
+            {
+                templateGo.SetActive(false);
+                return;
+            }
+
+            DropdownItem item = itemToggle.gameObject.AddComponent<DropdownItem>();
+            item.text = m_ItemText;
+            item.image = m_ItemImage;
+            item.toggle = itemToggle;
+            item.rectTransform = (RectTransform)itemToggle.transform;
+
+            Canvas popupCanvas = GetOrAddComponent<Canvas>(templateGo);
+            popupCanvas.overrideSorting = true;
+            popupCanvas.sortingOrder = 30000;
+
+            GetOrAddComponent<GraphicRaycaster>(templateGo);
+            GetOrAddComponent<CanvasGroup>(templateGo);
+            templateGo.SetActive(false);
+
+            validTemplate = true;
+        }
+
+        private static T GetOrAddComponent<T>(GameObject go) where T : Component
+        {
+            T comp = go.GetComponent<T>();
+            if (!comp)
+                comp = go.AddComponent<T>();
+            return comp;
+        }
+
+        /// <summary>
+        /// Handling for when the dropdown is initially 'clicked'. Typically shows the dropdown
+        /// </summary>
+        /// <param name="eventData">The associated event data.</param>
+        public virtual void OnPointerClick(PointerEventData eventData)
+        {
+            Show();
+        }
+
+        /// <summary>
+        /// Handling for when the dropdown is selected and a submit event is processed. Typically shows the dropdown
+        /// </summary>
+        /// <param name="eventData">The associated event data.</param>
+        public virtual void OnSubmit(BaseEventData eventData)
+        {
+            Show();
+        }
+
+        /// <summary>
+        /// This will hide the dropdown list.
+        /// </summary>
+        /// <remarks>
+        /// Called by a BaseInputModule when a Cancel event occurs.
+        /// </remarks>
+        /// <param name="eventData">The associated event data.</param>
+        public virtual void OnCancel(BaseEventData eventData)
+        {
+            Hide();
+        }
+
+        /// <summary>
+        /// Show the dropdown.
+        ///
+        /// Plan for dropdown scrolling to ensure dropdown is contained within screen.
+        ///
+        /// We assume the Canvas is the screen that the dropdown must be kept inside.
+        /// This is always valid for screen space canvas modes.
+        /// For world space canvases we don't know how it's used, but it could be e.g. for an in-game monitor.
+        /// We consider it a fair constraint that the canvas must be big enough to contain dropdowns.
+        /// </summary>
+        public void Show()
+        {
+            if (!IsActive() || !IsInteractable() || m_Dropdown != null)
+                return;
+
+            // Get root Canvas.
+            var list = TMP_ListPool<Canvas>.Get();
+            gameObject.GetComponentsInParent(false, list);
+            if (list.Count == 0)
+                return;
+
+            Canvas rootCanvas = list[list.Count - 1];
+            for (int i = 0; i < list.Count; i++)
+            {
+                if (list[i].isRootCanvas)
+                {
+                    rootCanvas = list[i];
+                    break;
+                }
+            }
+
+            TMP_ListPool<Canvas>.Release(list);
+
+            if (!validTemplate)
+            {
+                SetupTemplate();
+                if (!validTemplate)
+                    return;
+            }
+
+            m_Template.gameObject.SetActive(true);
+
+            // popupCanvas used to assume the root canvas had the default sorting Layer, next line fixes (case 958281 - [UI] Dropdown list does not copy the parent canvas layer when the panel is opened)
+            m_Template.GetComponent<Canvas>().sortingLayerID = rootCanvas.sortingLayerID;
+
+            // Instantiate the drop-down template
+            m_Dropdown = CreateDropdownList(m_Template.gameObject);
+            m_Dropdown.name = "Dropdown List";
+            m_Dropdown.SetActive(true);
+
+            // Make drop-down RectTransform have same values as original.
+            RectTransform dropdownRectTransform = m_Dropdown.transform as RectTransform;
+            dropdownRectTransform.SetParent(m_Template.transform.parent, false);
+
+            // Instantiate the drop-down list items
+
+            // Find the dropdown item and disable it.
+            DropdownItem itemTemplate = m_Dropdown.GetComponentInChildren<DropdownItem>();
+
+            GameObject content = itemTemplate.rectTransform.parent.gameObject;
+            RectTransform contentRectTransform = content.transform as RectTransform;
+            itemTemplate.rectTransform.gameObject.SetActive(true);
+
+            // Get the rects of the dropdown and item
+            Rect dropdownContentRect = contentRectTransform.rect;
+            Rect itemTemplateRect = itemTemplate.rectTransform.rect;
+
+            // Calculate the visual offset between the item's edges and the background's edges
+            Vector2 offsetMin = itemTemplateRect.min - dropdownContentRect.min + (Vector2)itemTemplate.rectTransform.localPosition;
+            Vector2 offsetMax = itemTemplateRect.max - dropdownContentRect.max + (Vector2)itemTemplate.rectTransform.localPosition;
+            Vector2 itemSize = itemTemplateRect.size;
+
+            m_Items.Clear();
+
+            Toggle prev = null;
+            for (int i = 0; i < options.Count; ++i)
+            {
+                OptionData data = options[i];
+                DropdownItem item = AddItem(data, value == i, itemTemplate, m_Items);
+                if (item == null)
+                    continue;
+
+                // Automatically set up a toggle state change listener
+                item.toggle.isOn = value == i;
+                item.toggle.onValueChanged.AddListener(x => OnSelectItem(item.toggle));
+
+                // Select current option
+                if (item.toggle.isOn)
+                    item.toggle.Select();
+
+                // Automatically set up explicit navigation
+                if (prev != null)
+                {
+                    Navigation prevNav = prev.navigation;
+                    Navigation toggleNav = item.toggle.navigation;
+                    prevNav.mode = Navigation.Mode.Explicit;
+                    toggleNav.mode = Navigation.Mode.Explicit;
+
+                    prevNav.selectOnDown = item.toggle;
+                    prevNav.selectOnRight = item.toggle;
+                    toggleNav.selectOnLeft = prev;
+                    toggleNav.selectOnUp = prev;
+
+                    prev.navigation = prevNav;
+                    item.toggle.navigation = toggleNav;
+                }
+                prev = item.toggle;
+            }
+
+            // Reposition all items now that all of them have been added
+            Vector2 sizeDelta = contentRectTransform.sizeDelta;
+            sizeDelta.y = itemSize.y * m_Items.Count + offsetMin.y - offsetMax.y;
+            contentRectTransform.sizeDelta = sizeDelta;
+
+            float extraSpace = dropdownRectTransform.rect.height - contentRectTransform.rect.height;
+            if (extraSpace > 0)
+                dropdownRectTransform.sizeDelta = new Vector2(dropdownRectTransform.sizeDelta.x, dropdownRectTransform.sizeDelta.y - extraSpace);
+
+            // Invert anchoring and position if dropdown is partially or fully outside of canvas rect.
+            // Typically this will have the effect of placing the dropdown above the button instead of below,
+            // but it works as inversion regardless of initial setup.
+            Vector3[] corners = new Vector3[4];
+            dropdownRectTransform.GetWorldCorners(corners);
+
+            RectTransform rootCanvasRectTransform = rootCanvas.transform as RectTransform;
+            Rect rootCanvasRect = rootCanvasRectTransform.rect;
+            for (int axis = 0; axis < 2; axis++)
+            {
+                bool outside = false;
+                for (int i = 0; i < 4; i++)
+                {
+                    Vector3 corner = rootCanvasRectTransform.InverseTransformPoint(corners[i]);
+                    if ((corner[axis] < rootCanvasRect.min[axis] && !Mathf.Approximately(corner[axis], rootCanvasRect.min[axis])) ||
+                        (corner[axis] > rootCanvasRect.max[axis] && !Mathf.Approximately(corner[axis], rootCanvasRect.max[axis])))
+                    {
+                        outside = true;
+                        break;
+                    }
+                }
+                if (outside)
+                    RectTransformUtility.FlipLayoutOnAxis(dropdownRectTransform, axis, false, false);
+            }
+
+            for (int i = 0; i < m_Items.Count; i++)
+            {
+                RectTransform itemRect = m_Items[i].rectTransform;
+                itemRect.anchorMin = new Vector2(itemRect.anchorMin.x, 0);
+                itemRect.anchorMax = new Vector2(itemRect.anchorMax.x, 0);
+                itemRect.anchoredPosition = new Vector2(itemRect.anchoredPosition.x, offsetMin.y + itemSize.y * (m_Items.Count - 1 - i) + itemSize.y * itemRect.pivot.y);
+                itemRect.sizeDelta = new Vector2(itemRect.sizeDelta.x, itemSize.y);
+            }
+
+            // Fade in the popup
+            AlphaFadeList(0.15f, 0f, 1f);
+
+            // Make drop-down template and item template inactive
+            m_Template.gameObject.SetActive(false);
+            itemTemplate.gameObject.SetActive(false);
+
+            m_Blocker = CreateBlocker(rootCanvas);
+        }
+
+        /// <summary>
+        /// Create a blocker that blocks clicks to other controls while the dropdown list is open.
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to obtain a blocker GameObject.
+        /// </remarks>
+        /// <param name="rootCanvas">The root canvas the dropdown is under.</param>
+        /// <returns>The created blocker object</returns>
+        protected virtual GameObject CreateBlocker(Canvas rootCanvas)
+        {
+            // Create blocker GameObject.
+            GameObject blocker = new GameObject("Blocker");
+
+            // Setup blocker RectTransform to cover entire root canvas area.
+            RectTransform blockerRect = blocker.AddComponent<RectTransform>();
+            blockerRect.SetParent(rootCanvas.transform, false);
+            blockerRect.anchorMin = Vector3.zero;
+            blockerRect.anchorMax = Vector3.one;
+            blockerRect.sizeDelta = Vector2.zero;
+
+            // Make blocker be in separate canvas in same layer as dropdown and in layer just below it.
+            Canvas blockerCanvas = blocker.AddComponent<Canvas>();
+            blockerCanvas.overrideSorting = true;
+            Canvas dropdownCanvas = m_Dropdown.GetComponent<Canvas>();
+            blockerCanvas.sortingLayerID = dropdownCanvas.sortingLayerID;
+            blockerCanvas.sortingOrder = dropdownCanvas.sortingOrder - 1;
+
+            // Add raycaster since it's needed to block.
+            blocker.AddComponent<GraphicRaycaster>();
+
+            // Add image since it's needed to block, but make it clear.
+            Image blockerImage = blocker.AddComponent<Image>();
+            blockerImage.color = Color.clear;
+
+            // Add button since it's needed to block, and to close the dropdown when blocking area is clicked.
+            Button blockerButton = blocker.AddComponent<Button>();
+            blockerButton.onClick.AddListener(Hide);
+
+            return blocker;
+        }
+
+        /// <summary>
+        /// Convenience method to explicitly destroy the previously generated blocker object
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to dispose of a blocker GameObject that blocks clicks to other controls while the dropdown list is open.
+        /// </remarks>
+        /// <param name="blocker">The blocker object to destroy.</param>
+        protected virtual void DestroyBlocker(GameObject blocker)
+        {
+            Destroy(blocker);
+        }
+
+        /// <summary>
+        /// Create the dropdown list to be shown when the dropdown is clicked. The dropdown list should correspond to the provided template GameObject, equivalent to instantiating a copy of it.
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to obtain a dropdown list GameObject.
+        /// </remarks>
+        /// <param name="template">The template to create the dropdown list from.</param>
+        /// <returns>The created drop down list gameobject.</returns>
+        protected virtual GameObject CreateDropdownList(GameObject template)
+        {
+            return (GameObject)Instantiate(template);
+        }
+
+        /// <summary>
+        /// Convenience method to explicitly destroy the previously generated dropdown list
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to dispose of a dropdown list GameObject.
+        /// </remarks>
+        /// <param name="dropdownList">The dropdown list GameObject to destroy</param>
+        protected virtual void DestroyDropdownList(GameObject dropdownList)
+        {
+            Destroy(dropdownList);
+        }
+
+        /// <summary>
+        /// Create a dropdown item based upon the item template.
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to obtain an option item.
+        /// The option item should correspond to the provided template DropdownItem and its GameObject, equivalent to instantiating a copy of it.
+        /// </remarks>
+        /// <param name="itemTemplate">e template to create the option item from.</param>
+        /// <returns>The created dropdown item component</returns>
+        protected virtual DropdownItem CreateItem(DropdownItem itemTemplate)
+        {
+            return (DropdownItem)Instantiate(itemTemplate);
+        }
+
+        /// <summary>
+        ///  Convenience method to explicitly destroy the previously generated Items.
+        /// </summary>
+        /// <remarks>
+        /// Override this method to implement a different way to dispose of an option item.
+        /// Likely no action needed since destroying the dropdown list destroys all contained items as well.
+        /// </remarks>
+        /// <param name="item">The Item to destroy.</param>
+        protected virtual void DestroyItem(DropdownItem item) { }
+
+        // Add a new drop-down list item with the specified values.
+        private DropdownItem AddItem(OptionData data, bool selected, DropdownItem itemTemplate, List<DropdownItem> items)
+        {
+            // Add a new item to the dropdown.
+            DropdownItem item = CreateItem(itemTemplate);
+            item.rectTransform.SetParent(itemTemplate.rectTransform.parent, false);
+
+            item.gameObject.SetActive(true);
+            item.gameObject.name = "Item " + items.Count + (data.text != null ? ": " + data.text : "");
+
+            if (item.toggle != null)
+            {
+                item.toggle.isOn = false;
+            }
+
+            // Set the item's data
+            if (item.text)
+                item.text.text = data.text;
+            if (item.image)
+            {
+                item.image.sprite = data.image;
+                item.image.enabled = (item.image.sprite != null);
+            }
+
+            items.Add(item);
+            return item;
+        }
+
+        private void AlphaFadeList(float duration, float alpha)
+        {
+            CanvasGroup group = m_Dropdown.GetComponent<CanvasGroup>();
+            AlphaFadeList(duration, group.alpha, alpha);
+        }
+
+        private void AlphaFadeList(float duration, float start, float end)
+        {
+            if (end.Equals(start))
+                return;
+
+            FloatTween tween = new FloatTween { duration = duration, startValue = start, targetValue = end };
+            tween.AddOnChangedCallback(SetAlpha);
+            tween.ignoreTimeScale = true;
+            m_AlphaTweenRunner.StartTween(tween);
+        }
+
+        private void SetAlpha(float alpha)
+        {
+            if (!m_Dropdown)
+                return;
+            CanvasGroup group = m_Dropdown.GetComponent<CanvasGroup>();
+            group.alpha = alpha;
+        }
+
+        /// <summary>
+        /// Hide the dropdown list. I.e. close it.
+        /// </summary>
+        public void Hide()
+        {
+            if (m_Dropdown != null)
+            {
+                AlphaFadeList(0.15f, 0f);
+
+                // User could have disabled the dropdown during the OnValueChanged call.
+                if (IsActive())
+                    StartCoroutine(DelayedDestroyDropdownList(0.15f));
+            }
+            if (m_Blocker != null)
+                DestroyBlocker(m_Blocker);
+            m_Blocker = null;
+            Select();
+        }
+
+        private IEnumerator DelayedDestroyDropdownList(float delay)
+        {
+            yield return new WaitForSecondsRealtime(delay);
+            ImmediateDestroyDropdownList();
+        }
+
+        private void ImmediateDestroyDropdownList()
+        {
+            for (int i = 0; i < m_Items.Count; i++)
+            {
+                if (m_Items[i] != null)
+                    DestroyItem(m_Items[i]);
+            }
+            m_Items.Clear();
+
+            if (m_Dropdown != null)
+                DestroyDropdownList(m_Dropdown);
+            m_Dropdown = null;
+        }
+
+        // Change the value and hide the dropdown.
+        private void OnSelectItem(Toggle toggle)
+        {
+            if (!toggle.isOn)
+                toggle.isOn = true;
+
+            int selectedIndex = -1;
+            Transform tr = toggle.transform;
+            Transform parent = tr.parent;
+            for (int i = 0; i < parent.childCount; i++)
+            {
+                if (parent.GetChild(i) == tr)
+                {
+                    // Subtract one to account for template child.
+                    selectedIndex = i - 1;
+                    break;
+                }
+            }
+
+            if (selectedIndex < 0)
+                return;
+
+            value = selectedIndex;
+            Hide();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b8a861096cbed00c7ca49ab4335920fa68af51e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Dropdown.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b743370ac3e4ec2a1668f5455a8ef8a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: a7ec9e7ad8b847b7ae4510af83c5d868, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cbe4871e1524dd37865eef48bca67ea29574f107
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs
@@ -0,0 +1,142 @@
+#if UNITY_EDITOR
+
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+
+namespace TMPro
+{
+    public class TMP_EditorResourceManager
+    {
+        private static TMP_EditorResourceManager s_Instance;
+
+        private readonly List<Object> m_ObjectUpdateQueue = new List<Object>();
+        private Dictionary<int, int> m_ObjectUpdateQueueLookup = new Dictionary<int, int>();
+
+        private readonly List<Object> m_ObjectReImportQueue = new List<Object>();
+        private Dictionary<int, int> m_ObjectReImportQueueLookup = new Dictionary<int, int>();
+
+        /// <summary>
+        /// Get a singleton instance of the manager.
+        /// </summary>
+        public static TMP_EditorResourceManager instance
+        {
+            get
+            {
+                if (s_Instance == null)
+                    s_Instance = new TMP_EditorResourceManager();
+
+                return s_Instance;
+            }
+        }
+
+        /// <summary>
+        /// Register to receive rendering callbacks.
+        /// </summary>
+        private TMP_EditorResourceManager()
+        {
+            Camera.onPostRender += OnCameraPostRender;
+        }
+
+
+        void OnCameraPostRender(Camera cam)
+        {
+            // Exclude the PreRenderCamera
+            if (cam.cameraType == CameraType.Preview)
+                return;
+
+            DoUpdates();
+        }
+
+        /// <summary>
+        /// Register resource for re-import.
+        /// </summary>
+        /// <param name="obj"></param>
+        internal static void RegisterResourceForReimport(Object obj)
+        {
+            instance.InternalRegisterResourceForReimport(obj);
+        }
+
+        private void InternalRegisterResourceForReimport(Object obj)
+        {
+            int id = obj.GetInstanceID();
+
+            if (m_ObjectReImportQueueLookup.ContainsKey(id))
+                return;
+
+            m_ObjectReImportQueueLookup[id] = id;
+            m_ObjectReImportQueue.Add(obj);
+
+            return;
+        }
+
+        /// <summary>
+        /// Register resource to be updated.
+        /// </summary>
+        /// <param name="textObject"></param>
+        internal static void RegisterResourceForUpdate(Object obj)
+        {
+            instance.InternalRegisterResourceForUpdate(obj);
+        }
+
+        private void InternalRegisterResourceForUpdate(Object obj)
+        {
+            int id = obj.GetInstanceID();
+
+            if (m_ObjectUpdateQueueLookup.ContainsKey(id))
+                return;
+
+            m_ObjectUpdateQueueLookup[id] = id;
+            m_ObjectUpdateQueue.Add(obj);
+
+            return;
+        }
+
+
+        void DoUpdates()
+        {
+            // Handle objects that need updating
+            int objUpdateCount = m_ObjectUpdateQueue.Count;
+
+            for (int i = 0; i < objUpdateCount; i++)
+            {
+                Object obj = m_ObjectUpdateQueue[i];
+                if (obj != null)
+                {
+                    EditorUtility.SetDirty(obj);
+                }
+            }
+
+            if (objUpdateCount > 0)
+            {
+                //Debug.Log("Saving assets");
+                //AssetDatabase.SaveAssets();
+
+                m_ObjectUpdateQueue.Clear();
+                m_ObjectUpdateQueueLookup.Clear();
+            }
+
+            // Handle objects that need re-importing
+            int objReImportCount = m_ObjectReImportQueue.Count;
+
+            for (int i = 0; i < objReImportCount; i++)
+            {
+                Object obj = m_ObjectReImportQueue[i];
+                if (obj != null)
+                {
+                    //Debug.Log("Re-importing [" + obj.name + "]");
+                    AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(obj));
+                }
+            }
+
+            if (objReImportCount > 0)
+            {
+                m_ObjectReImportQueue.Clear();
+                m_ObjectReImportQueueLookup.Clear();
+            }
+        }
+
+    }
+}
+#endif
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0759a53a8df3b3aa45fd874121f6ec357a184fb9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_EditorResourceManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6b259c4003a802847b9ada90744e34c5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs
new file mode 100644
index 0000000000000000000000000000000000000000..aef3087fc18d437c9da322a19a982e82f817fa7e
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs
@@ -0,0 +1,1974 @@
+using System;
+using UnityEngine;
+using UnityEngine.Serialization;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using UnityEngine.Profiling;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+
+namespace TMPro
+{
+    public enum AtlasPopulationMode
+    {
+        Static = 0x0,
+        Dynamic = 0x1,
+    }
+
+
+    [Serializable]
+    public class TMP_FontAsset : TMP_Asset
+    {
+        /// <summary>
+        /// The version of the font asset class.
+        /// Version 1.1.0 adds support for the new TextCore.FontEngine and Dynamic SDF system.
+        /// </summary>
+        public string version
+        {
+            get { return m_Version; }
+            internal set { m_Version = value; }
+        }
+        [SerializeField]
+        private string m_Version;
+
+        /// <summary>
+        /// This field is set when the font asset is first created.
+        /// </summary>
+        [SerializeField]
+        internal string m_SourceFontFileGUID;
+        
+        #if UNITY_EDITOR
+        /// <summary>
+        /// Persistent reference to the source font file maintained in the editor.
+        /// </summary>
+        [SerializeField]
+        internal Font m_SourceFontFile_EditorRef;
+        #endif
+
+        /// <summary>
+        /// Source font file when atlas population mode is set to dynamic. Null when the atlas population mode is set to static. 
+        /// </summary>
+        public Font sourceFontFile
+        {
+            get { return m_SourceFontFile; }
+            internal set { m_SourceFontFile = value; }
+        }
+        [SerializeField]
+        private Font m_SourceFontFile;
+
+        public AtlasPopulationMode atlasPopulationMode
+        {
+            get { return m_AtlasPopulationMode; }
+
+            set
+            {
+                m_AtlasPopulationMode = value;
+
+                #if UNITY_EDITOR
+                if (m_AtlasPopulationMode == AtlasPopulationMode.Static)
+                    m_SourceFontFile = null;
+                else if (m_AtlasPopulationMode == AtlasPopulationMode.Dynamic)
+                    m_SourceFontFile = m_SourceFontFile_EditorRef;
+                #endif
+            }
+        }
+        [SerializeField]
+        private AtlasPopulationMode m_AtlasPopulationMode;
+
+
+        /// <summary>
+        /// Information about the font face.
+        /// </summary>
+        public FaceInfo faceInfo
+        {
+            get { return m_FaceInfo; }
+            internal set { m_FaceInfo = value; }
+        }
+        [SerializeField]
+        private FaceInfo m_FaceInfo;
+
+
+        /// <summary>
+        /// List of glyphs contained in the font asset.
+        /// </summary>
+        public List<Glyph> glyphTable
+        {
+            get { return m_GlyphTable; }
+            internal set { m_GlyphTable = value; }
+        }
+        [SerializeField]
+        private List<Glyph> m_GlyphTable = new List<Glyph>();
+
+        /// <summary>
+        /// Dictionary used to lookup glyphs contained in the font asset by their index.
+        /// </summary>
+        public Dictionary<uint, Glyph> glyphLookupTable
+        {
+            get
+            {
+                if (m_GlyphLookupDictionary == null)
+                    ReadFontAssetDefinition();
+
+                return m_GlyphLookupDictionary;
+            }
+        }
+        private Dictionary<uint, Glyph> m_GlyphLookupDictionary;
+
+
+        /// <summary>
+        /// List containing the characters of the given font asset.
+        /// </summary>
+        public List<TMP_Character> characterTable
+        {
+            get { return m_CharacterTable; }
+            internal set { m_CharacterTable = value; }
+        }
+        [SerializeField]
+        private List<TMP_Character> m_CharacterTable = new List<TMP_Character>();
+
+        /// <summary>
+        /// Dictionary used to lookup characters contained in the font asset by their unicode values.
+        /// </summary>
+        public Dictionary<uint, TMP_Character> characterLookupTable
+        {
+            get
+            {
+                if (m_CharacterLookupDictionary == null)
+                    ReadFontAssetDefinition();
+
+
+                return m_CharacterLookupDictionary;
+            }
+        }
+        private Dictionary<uint, TMP_Character> m_CharacterLookupDictionary;
+
+
+        /// <summary>
+        /// The font atlas used by this font asset.
+        /// This is always the texture at index [0] of the fontAtlasTextures.
+        /// </summary>
+        public Texture2D atlasTexture
+        {
+            get
+            {
+                if (m_AtlasTexture == null)
+                {
+                    m_AtlasTexture = atlasTextures[0];
+                }
+
+                return m_AtlasTexture;
+            }
+        }
+        private Texture2D m_AtlasTexture;
+
+        /// <summary>
+        /// Array of atlas textures that contain the glyphs used by this font asset.
+        /// </summary>
+        public Texture2D[] atlasTextures
+        {
+            get
+            {
+                if (m_AtlasTextures == null)
+                {
+                    //
+                }
+
+                return m_AtlasTextures;
+            }
+
+            set
+            {
+                m_AtlasTextures = value;
+            }
+        }
+        [SerializeField]
+        private Texture2D[] m_AtlasTextures;
+
+        /// <summary>
+        /// Index of the font atlas texture that still has available space to add new glyphs.
+        /// </summary>
+        [SerializeField]
+        internal int m_AtlasTextureIndex;
+
+        /// <summary>
+        /// List of spaces occupied by glyphs in a given texture.
+        /// </summary>
+        internal List<GlyphRect> usedGlyphRects
+        {
+            get { return m_UsedGlyphRects; }
+            set { m_UsedGlyphRects = value; }
+        }
+        [SerializeField]
+        private List<GlyphRect> m_UsedGlyphRects;
+
+        /// <summary>
+        /// List of spaces available in a given texture to add new glyphs.
+        /// </summary>
+        internal List<GlyphRect> freeGlyphRects
+        {
+            get { return m_FreeGlyphRects; }
+            set { m_FreeGlyphRects = value; }
+        }
+        [SerializeField]
+        private List<GlyphRect> m_FreeGlyphRects;
+
+        /// <summary>
+        /// The general information about the font.
+        /// This property and FaceInfo_Legacy type are not longer used in version 1.1.0 of the font asset.
+        /// </summary>
+		[Obsolete("The fontInfo property and underlying type is now obsolete. Please use the faceInfo property and FaceInfo type instead.")]
+        public FaceInfo_Legacy fontInfo
+        {
+            get { return m_fontInfo; }
+        }
+
+        [SerializeField]
+        private FaceInfo_Legacy m_fontInfo = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [SerializeField]
+        public Texture2D atlas; // Should add a property to make this read-only.
+
+        /// <summary>
+        /// The width of the atlas texture(s) used by this font asset.
+        /// </summary>
+        public int atlasWidth
+        {
+            get { return m_AtlasWidth; }
+            internal set { m_AtlasWidth = value; }
+        }
+        [SerializeField]
+        private int m_AtlasWidth;
+
+        /// <summary>
+        /// The height of the atlas texture(s) used by this font asset.
+        /// </summary>
+        public int atlasHeight
+        {
+            get { return m_AtlasHeight; }
+            internal set { m_AtlasHeight = value; }
+        }
+        [SerializeField]
+        private int m_AtlasHeight;
+
+        /// <summary>
+        /// The padding used between glyphs contained in the atlas texture(s) used by this font asset.
+        /// </summary>
+        public int atlasPadding
+        {
+            get { return m_AtlasPadding; }
+            internal set { m_AtlasPadding = value; }
+        }
+        [SerializeField]
+        private int m_AtlasPadding;
+
+        public GlyphRenderMode atlasRenderMode
+        {
+            get { return m_AtlasRenderMode; }
+            internal set { m_AtlasRenderMode = value; }
+        }
+        [SerializeField]
+        private GlyphRenderMode m_AtlasRenderMode;
+
+        // Legacy field that will eventually be removed.
+        [SerializeField]
+        internal List<TMP_Glyph> m_glyphInfoList;
+
+        [SerializeField]
+        [FormerlySerializedAs("m_kerningInfo")]
+        internal KerningTable m_KerningTable = new KerningTable();
+
+        /// <summary>
+        /// Table containing the various font features of this font asset. 
+        /// </summary>
+        public TMP_FontFeatureTable fontFeatureTable
+        {
+            get { return m_FontFeatureTable; }
+            internal set { m_FontFeatureTable = value; }
+        }
+        [SerializeField]
+        private TMP_FontFeatureTable m_FontFeatureTable = new TMP_FontFeatureTable();
+
+        // Legacy field that will eventually be removed
+        [SerializeField]
+        #pragma warning disable 0649
+        private List<TMP_FontAsset> fallbackFontAssets;
+
+        /// <summary>
+        /// List containing the Fallback font assets for this font.
+        /// </summary>
+        public List<TMP_FontAsset> fallbackFontAssetTable
+        {
+            get { return m_FallbackFontAssetTable; }
+            set { m_FallbackFontAssetTable = value; }
+        }
+        [SerializeField]
+        public List<TMP_FontAsset> m_FallbackFontAssetTable;
+
+        /// <summary>
+        /// The settings used in the Font Asset Creator when this font asset was created or edited.
+        /// </summary>
+        public FontAssetCreationSettings creationSettings
+        {
+            get { return m_CreationSettings; }
+            set { m_CreationSettings = value; }
+        }
+        [SerializeField]
+        internal FontAssetCreationSettings m_CreationSettings;
+
+        /// <summary>
+        /// Array containing font assets to be used as alternative typefaces for the various potential font weights of this font asset.
+        /// </summary>
+        public TMP_FontWeightPair[] fontWeightTable
+        {
+            get { return m_FontWeightTable; }
+            internal set { m_FontWeightTable = value; }
+        }
+        [SerializeField]
+        private TMP_FontWeightPair[] m_FontWeightTable = new TMP_FontWeightPair[10];
+
+        // FONT WEIGHTS
+        /// <summary>
+        /// Font weights used by font asset prior to version 1.1.0.
+        /// This is legacy and will be removed at some point in the future.
+        /// </summary>
+        [SerializeField]
+        private TMP_FontWeightPair[] fontWeights = null;
+
+        //private int[] m_characterSet; // Array containing all the characters in this font asset.
+
+        /// <summary>
+        /// Defines the dilation of the text when using regular style.
+        /// </summary>
+        public float normalStyle = 0;
+
+        /// <summary>
+        /// The spacing between characters when using regular style.
+        /// </summary>
+        public float normalSpacingOffset = 0;
+
+        /// <summary>
+        /// Defines the dilation of the text when using bold style.
+        /// </summary>
+        public float boldStyle = 0.75f;
+
+        /// <summary>
+        /// The spacing between characters when using regular style.
+        /// </summary>
+        public float boldSpacing = 7f;
+
+        /// <summary>
+        /// Defines the slant of the text when using italic style.
+        /// </summary>
+        public byte italicStyle = 35;
+
+        public byte tabSize = 10;
+
+        private byte m_oldTabSize;
+        internal bool m_IsFontAssetLookupTablesDirty = false;
+
+        /// <summary>
+        /// Create new instance of a font asset using default settings.
+        /// </summary>
+        /// <param name="font"></param>
+        /// <returns></returns>
+        public static TMP_FontAsset CreateFontAsset(Font font)
+        {
+            return CreateFontAsset(font, 90, 9, GlyphRenderMode.SDFAA, 1024, 1024, AtlasPopulationMode.Dynamic);
+        }
+
+        /// <summary>
+        /// Create new instance of a font asset.
+        /// </summary>
+        /// <param name="font">The source font file.</param>
+        /// <param name="samplingPointSize">The sampling point size.</param>
+        /// <param name="atlasPadding">The padding / spread between individual glyphs in the font asset.</param>
+        /// <param name="renderMode"></param>
+        /// <param name="atlasWidth">The atlas texture width.</param>
+        /// <param name="atlasHeight">The atlas texture height.</param>
+        /// <param name="atlasPopulationMode"></param>
+        /// <returns></returns>
+        public static TMP_FontAsset CreateFontAsset(Font font, int samplingPointSize, int atlasPadding, GlyphRenderMode renderMode, int atlasWidth, int atlasHeight, AtlasPopulationMode atlasPopulationMode = AtlasPopulationMode.Dynamic)
+        {
+            TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
+
+            fontAsset.m_Version = "1.1.0";
+
+            // Set face information
+            FontEngine.InitializeFontEngine();
+            FontEngine.LoadFontFace(font, samplingPointSize);
+
+            fontAsset.faceInfo = FontEngine.GetFaceInfo();
+
+            // Set font reference and GUID
+            if (atlasPopulationMode == AtlasPopulationMode.Dynamic)
+                fontAsset.sourceFontFile = font;
+
+            // Set persistent reference to source font file in the Editor only.
+            #if UNITY_EDITOR
+            string guid;
+            long localID;
+
+            UnityEditor.AssetDatabase.TryGetGUIDAndLocalFileIdentifier(font, out guid, out localID);
+            fontAsset.m_SourceFontFileGUID = guid;
+            fontAsset.m_SourceFontFile_EditorRef = font;
+            #endif
+
+            fontAsset.atlasPopulationMode = atlasPopulationMode;
+
+            fontAsset.atlasWidth = atlasWidth;
+            fontAsset.atlasHeight = atlasHeight;
+            fontAsset.atlasPadding = atlasPadding;
+            fontAsset.atlasRenderMode = renderMode;
+
+            // Initialize array for the font atlas textures.
+            fontAsset.atlasTextures = new Texture2D[1];
+
+            // Create and add font atlas texture.
+            Texture2D texture = new Texture2D(0, 0, TextureFormat.Alpha8, false);
+
+            //texture.name = assetName + " Atlas";
+            fontAsset.atlasTextures[0] = texture;
+
+            // Add free rectangle of the size of the texture.
+            int packingModifier;
+            if (((GlyphRasterModes)renderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP)
+            {
+                packingModifier = 0;
+
+                // Optimize by adding static ref to shader.
+                Material tmp_material = new Material(ShaderUtilities.ShaderRef_MobileBitmap);
+
+                //tmp_material.name = texture.name + " Material";
+                tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+                fontAsset.material = tmp_material;
+            }
+            else
+            {
+                packingModifier = 1;
+
+                // Optimize by adding static ref to shader.
+                Material tmp_material = new Material(ShaderUtilities.ShaderRef_MobileSDF);
+
+                //tmp_material.name = texture.name + " Material";
+                tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+                tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+                tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
+
+                tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+                tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+                fontAsset.material = tmp_material;
+            }
+
+            fontAsset.freeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) };
+            fontAsset.usedGlyphRects = new List<GlyphRect>();
+
+            // TODO: Consider adding support for extracting glyph positioning data
+
+            fontAsset.ReadFontAssetDefinition();
+
+            return fontAsset;
+        }
+
+
+        void Awake()
+        {
+            //Debug.Log("TMP Font Asset [" + this.name + "] with Version #" + m_Version + " has been enabled!");
+
+            // Check version number of font asset to see if it needs to be upgraded.
+            if (this.material != null && string.IsNullOrEmpty(m_Version))
+                UpgradeFontAsset();
+        }
+
+
+        #if UNITY_EDITOR
+        void OnValidate()
+        {
+            //if (m_oldTabSize != tabSize)
+            //{
+            //    m_oldTabSize = tabSize;
+            //    ReadFontAssetDefinition();
+            //}
+
+            // Handle changes to atlas population mode
+            //if (m_AtlasPopulationMode == AtlasPopulationMode.Static)
+            //    m_SourceFontFile = null;
+            //else
+            //{
+            //    string path = UnityEditor.AssetDatabase.GUIDToAssetPath(m_SourceFontFileGUID);
+
+            //    if (path != string.Empty)
+            //        m_SourceFontFile = UnityEditor.AssetDatabase.LoadAssetAtPath<Font>(path);
+            //}
+        }
+        #endif
+
+        /// <summary>
+        /// Read the various data tables of the font asset to populate its different dictionaries to allow for faster lookup of related font asset data.
+        /// </summary>
+        internal void InitializeDictionaryLookupTables()
+        {
+            // Create new instance of the glyph lookup dictionary or clear the existing one.
+            if (m_GlyphLookupDictionary == null)
+                m_GlyphLookupDictionary = new Dictionary<uint, Glyph>();
+            else
+                m_GlyphLookupDictionary.Clear();
+
+            int glyphCount = m_GlyphTable.Count;
+
+            // Initialize glyph index array or clear the existing one.
+            if (m_GlyphIndexList == null)
+                m_GlyphIndexList = new List<uint>();
+            else
+                m_GlyphIndexList.Clear();
+
+            // Add the characters contained in the character table into the dictionary for faster lookup.
+            for (int i = 0; i < glyphCount; i++)
+            {
+                Glyph glyph = m_GlyphTable[i];
+
+                uint index = glyph.index;
+
+                // TODO: Not sure it is necessary to check here.
+                if (m_GlyphLookupDictionary.ContainsKey(index) == false)
+                {
+                    m_GlyphLookupDictionary.Add(index, glyph);
+                    m_GlyphIndexList.Add(index);
+                }
+            }
+
+            // Create new instance of the character lookup dictionary or clear the existing one.
+            if (m_CharacterLookupDictionary == null)
+                m_CharacterLookupDictionary = new Dictionary<uint, TMP_Character>();
+            else
+                m_CharacterLookupDictionary.Clear();
+
+            // Add the characters contained in the character table into the dictionary for faster lookup.
+            for (int i = 0; i < m_CharacterTable.Count; i++)
+            {
+                TMP_Character character = m_CharacterTable[i];
+
+                uint unicode = character.unicode;
+                uint glyphIndex = character.glyphIndex;
+
+                if (m_CharacterLookupDictionary.ContainsKey(unicode) == false)
+                    m_CharacterLookupDictionary.Add(unicode, character);
+
+                if (m_GlyphLookupDictionary.ContainsKey(glyphIndex))
+                {
+                    character.glyph = m_GlyphLookupDictionary[glyphIndex];
+                }
+            }
+
+            // Upgrade Glyph Adjustment Table to the new Font Feature table and Glyph Pair Adjustment Records
+            if (m_KerningTable != null && m_KerningTable.kerningPairs != null && m_KerningTable.kerningPairs.Count > 0)
+                UpgradeGlyphAdjustmentTableToFontFeatureTable();
+
+            // Read Font Features which will include kerning data.
+            if (m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary == null)
+                m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary = new Dictionary<long, TMP_GlyphPairAdjustmentRecord>();
+            else
+                m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Clear();
+
+            List<TMP_GlyphPairAdjustmentRecord> glyphPairAdjustmentRecords = m_FontFeatureTable.m_GlyphPairAdjustmentRecords;
+            if (glyphPairAdjustmentRecords != null)
+            {
+                for (int i = 0; i < glyphPairAdjustmentRecords.Count; i++)
+                {
+                    TMP_GlyphPairAdjustmentRecord record = glyphPairAdjustmentRecords[i];
+
+                    long key = new GlyphPairKey(record).key;
+
+                    m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Add(key, record);
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void ReadFontAssetDefinition()
+        {
+            //Debug.Log("Reading Font Definition for " + this.name + ".");
+
+            // Check version number of font asset to see if it needs to be upgraded.
+            if (this.material != null && string.IsNullOrEmpty(m_Version))
+                UpgradeFontAsset();
+
+            // Initialize lookup tables for characters and glyphs.
+            InitializeDictionaryLookupTables();
+
+            // Add Tab char(9) to Dictionary.
+            if (m_CharacterLookupDictionary.ContainsKey(9) == false)
+            {
+                Glyph glyph = new Glyph(0, new GlyphMetrics(0, 0, 0, 0, m_FaceInfo.tabWidth * tabSize), GlyphRect.zero, 1.0f, 0);
+                m_CharacterLookupDictionary.Add(9, new TMP_Character(9, glyph));
+            }
+
+            // Add Linefeed LF char(10) and Carriage Return CR char(13)
+            if (m_CharacterLookupDictionary.ContainsKey(10) == false)
+            {
+                Glyph glyph = new Glyph(0, new GlyphMetrics(10, 0, 0, 0, 0), GlyphRect.zero, 1.0f, 0);
+                m_CharacterLookupDictionary.Add(10, new TMP_Character(10, glyph));
+
+                if (!m_CharacterLookupDictionary.ContainsKey(13))
+                    m_CharacterLookupDictionary.Add(13, new TMP_Character(13, glyph));
+            }
+
+            // Add Zero Width Space 8203 (0x200B)
+            if (m_CharacterLookupDictionary.ContainsKey(8203) == false)
+            {
+                Glyph glyph = new Glyph(0, new GlyphMetrics(0, 0, 0, 0, 0), GlyphRect.zero, 1.0f, 0);
+                m_CharacterLookupDictionary.Add(8203, new TMP_Character(8203, glyph));
+            }
+
+            // Add Zero Width Non-Breaking Space 8288 (0x2060)
+            if (m_CharacterLookupDictionary.ContainsKey(8288) == false)
+            {
+                Glyph glyph = new Glyph(0, new GlyphMetrics(0, 0, 0, 0, 0), GlyphRect.zero, 1.0f, 0);
+                m_CharacterLookupDictionary.Add(8288, new TMP_Character(8288, glyph));
+            }
+
+            // Add Non-Breaking Hyphen 8209 (0x2011)
+            if (m_CharacterLookupDictionary.ContainsKey(8209) == false)
+            {
+                TMP_Character character;
+
+                if (m_CharacterLookupDictionary.TryGetValue(45, out character))
+                    m_CharacterLookupDictionary.Add(8209, new TMP_Character(8209, character.glyph));
+            }
+
+
+            // Set Cap Height
+            if (m_FaceInfo.capLine == 0 && m_CharacterLookupDictionary.ContainsKey(72))
+            {
+                uint glyphIndex = m_CharacterLookupDictionary[72].glyphIndex;
+                m_FaceInfo.capLine = m_GlyphLookupDictionary[glyphIndex].metrics.horizontalBearingY;
+            }
+
+            // Adjust Font Scale for compatibility reasons
+            if (m_FaceInfo.scale == 0)
+                m_FaceInfo.scale = 1.0f;
+
+            // Set Strikethrough Offset (if needed)
+            if (m_FaceInfo.strikethroughOffset == 0)
+                m_FaceInfo.strikethroughOffset = m_FaceInfo.capLine / 2.5f;
+
+            // Set Padding value for legacy font assets.
+            if (m_AtlasPadding == 0)
+            {
+                if (material.HasProperty(ShaderUtilities.ID_GradientScale))
+                    m_AtlasPadding = (int)material.GetFloat(ShaderUtilities.ID_GradientScale) - 1;
+            }
+
+            // Compute Hashcode for the font asset name
+            hashCode = TMP_TextUtilities.GetSimpleHashCode(this.name);
+
+            // Compute Hashcode for the material name
+            materialHashCode = TMP_TextUtilities.GetSimpleHashCode(material.name);
+
+            m_IsFontAssetLookupTablesDirty = false;
+        }
+
+
+        /// <summary>
+        /// Sort the Character table by Unicode values.
+        /// </summary>
+        internal void SortCharacterTable()
+        {
+            if (m_CharacterTable != null && m_CharacterTable.Count > 0)
+                m_CharacterTable = m_CharacterTable.OrderBy(c => c.unicode).ToList();
+        }
+
+        /// <summary>
+        /// Sort the Glyph table by index values.
+        /// </summary>
+        internal void SortGlyphTable()
+        {
+            if (m_GlyphTable != null && m_GlyphTable.Count > 0)
+                m_GlyphTable = m_GlyphTable.OrderBy(c => c.index).ToList();
+        }
+
+        /// <summary>
+        /// Sort both glyph and character tables.
+        /// </summary>
+        internal void SortGlyphAndCharacterTables()
+        {
+            SortGlyphTable();
+            SortCharacterTable();
+        }
+
+
+        /// <summary>
+        /// Function to check if a certain character exists in the font asset.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <returns></returns>
+        public bool HasCharacter(int character)
+        {
+            if (m_CharacterLookupDictionary == null)
+                return false;
+
+            if (m_CharacterLookupDictionary.ContainsKey((uint)character))
+                return true;
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if a certain character exists in the font asset.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <returns></returns>
+        public bool HasCharacter(char character)
+        {
+            if (m_CharacterLookupDictionary == null)
+                return false;
+
+            if (m_CharacterLookupDictionary.ContainsKey(character))
+                return true;
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if a character is contained in the font asset with the option to also check through fallback font assets.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <param name="searchFallbacks"></param>
+        /// <returns></returns>
+        public bool HasCharacter(char character, bool searchFallbacks)
+        {
+            // Read font asset definition if it hasn't already been done.
+            if (m_CharacterLookupDictionary == null)
+            {
+                ReadFontAssetDefinition();
+
+                if (m_CharacterLookupDictionary == null)
+                    return false;
+            }
+
+            // Check font asset
+            if (m_CharacterLookupDictionary.ContainsKey(character))
+                return true;
+
+            // Check if font asset is dynamic and if so try to add the requested character to it.
+            if (m_AtlasPopulationMode == AtlasPopulationMode.Dynamic)
+            {
+                TMP_Character returnedCharacter;
+
+                if (TryAddCharacterInternal(character, out returnedCharacter))
+                    return true;
+            }
+
+            if (searchFallbacks)
+            {
+                // Check font asset fallbacks
+                if (fallbackFontAssetTable != null && fallbackFontAssetTable.Count > 0)
+                {
+                    for (int i = 0; i < fallbackFontAssetTable.Count && fallbackFontAssetTable[i] != null; i++)
+                    {
+                        if (fallbackFontAssetTable[i].HasCharacter_Internal(character, searchFallbacks))
+                            return true;
+                    }
+                }
+
+                // Check general fallback font assets.
+                if (TMP_Settings.fallbackFontAssets != null && TMP_Settings.fallbackFontAssets.Count > 0)
+                {
+                    for (int i = 0; i < TMP_Settings.fallbackFontAssets.Count && TMP_Settings.fallbackFontAssets[i] != null; i++)
+                    {
+                        if (TMP_Settings.fallbackFontAssets[i].m_CharacterLookupDictionary == null)
+                            TMP_Settings.fallbackFontAssets[i].ReadFontAssetDefinition();
+
+                        if (TMP_Settings.fallbackFontAssets[i].m_CharacterLookupDictionary != null && TMP_Settings.fallbackFontAssets[i].HasCharacter_Internal(character, searchFallbacks))
+                            return true;
+                    }
+                }
+
+                // Check TMP Settings Default Font Asset
+                if (TMP_Settings.defaultFontAsset != null)
+                {
+                    if (TMP_Settings.defaultFontAsset.m_CharacterLookupDictionary == null)
+                        TMP_Settings.defaultFontAsset.ReadFontAssetDefinition();
+
+                    if (TMP_Settings.defaultFontAsset.m_CharacterLookupDictionary != null && TMP_Settings.defaultFontAsset.HasCharacter_Internal(character, searchFallbacks))
+                        return true;
+                }
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if a character is contained in a font asset with the option to also check through fallback font assets.
+        /// This private implementation does not search the fallback font asset in the TMP Settings file.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <param name="searchFallbacks"></param>
+        /// <returns></returns>
+        bool HasCharacter_Internal(char character, bool searchFallbacks)
+        {
+            // Read font asset definition if it hasn't already been done.
+            if (m_CharacterLookupDictionary == null)
+            {
+                ReadFontAssetDefinition();
+
+                if (m_CharacterLookupDictionary == null)
+                    return false;
+            }
+
+            // Check font asset
+            if (m_CharacterLookupDictionary.ContainsKey(character))
+                return true;
+
+            if (searchFallbacks)
+            {
+                // Check Font Asset Fallback fonts.
+                if (fallbackFontAssetTable != null && fallbackFontAssetTable.Count > 0)
+                {
+                    for (int i = 0; i < fallbackFontAssetTable.Count && fallbackFontAssetTable[i] != null; i++)
+                    {
+                        if (fallbackFontAssetTable[i].HasCharacter_Internal(character, searchFallbacks))
+                            return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if certain characters exists in the font asset. Function returns a list of missing characters.
+        /// </summary>
+        /// <param name="character"></param>
+        /// <returns></returns>
+        public bool HasCharacters(string text, out List<char> missingCharacters)
+        {
+            if (m_CharacterLookupDictionary == null)
+            {
+                missingCharacters = null;
+                return false;
+            }
+
+            missingCharacters = new List<char>();
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                if (!m_CharacterLookupDictionary.ContainsKey(text[i]))
+                    missingCharacters.Add(text[i]);
+            }
+
+            if (missingCharacters.Count == 0)
+                return true;
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Function to check if certain characters exists in the font asset. Function returns false if any characters are missing.
+        /// </summary>
+        /// <param name="text">String containing the characters to check</param>
+        /// <returns></returns>
+        public bool HasCharacters(string text)
+        {
+            if (m_CharacterLookupDictionary == null)
+                return false;
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                if (!m_CharacterLookupDictionary.ContainsKey(text[i]))
+                    return false;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Function to extract all the characters from a font asset.
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        public static string GetCharacters(TMP_FontAsset fontAsset)
+        {
+            string characters = string.Empty;
+
+            for (int i = 0; i < fontAsset.characterTable.Count; i++)
+            {
+                characters += (char)fontAsset.characterTable[i].unicode;
+            }
+
+            return characters;
+        }
+
+
+        /// <summary>
+        /// Function which returns an array that contains all the characters from a font asset.
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        /// <returns></returns>
+        public static int[] GetCharactersArray(TMP_FontAsset fontAsset)
+        {
+            int[] characters = new int[fontAsset.characterTable.Count];
+
+            for (int i = 0; i < fontAsset.characterTable.Count; i++)
+            {
+                characters[i] = (int)fontAsset.characterTable[i].unicode;
+            }
+
+            return characters;
+        }
+
+
+        // ================================================================================
+        // Properties and functions related to character and glyph additions as well as
+        // tacking glyphs that need to be added to various font asset atlas textures.
+        // ================================================================================
+
+        /// <summary>
+        /// Determines if the font asset is already registered to be updated.
+        /// </summary>
+        //private bool m_IsAlreadyRegisteredForUpdate;
+
+        /// <summary>
+        /// List of glyphs that need to be added / packed in atlas texture.
+        /// </summary>
+        private List<Glyph> m_GlyphsToPack = new List<Glyph>();
+
+        /// <summary>
+        /// List of glyphs that have been packed in the atlas texture and ready to be rendered.
+        /// </summary>
+        private List<Glyph> m_GlyphsPacked = new List<Glyph>();
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private List<Glyph> m_GlyphsToRender = new List<Glyph>();
+
+        /// <summary>
+        /// List used in the process of adding new glyphs to the atlas texture.
+        /// </summary>
+        private List<uint> m_GlyphIndexList = new List<uint>();
+        private List<TMP_Character> m_CharactersToAdd = new List<TMP_Character>();
+
+        /// <summary>
+        /// Internal static array used to avoid allocations when using the GetGlyphPairAdjustmentTable().
+        /// </summary>
+        internal static uint[] s_GlyphIndexArray = new uint[16];
+
+        /// <summary>
+        /// Internal static list used to track characters that could not be added to the font asset.
+        /// </summary>
+        internal static List<uint> s_MissingCharacterList = new List<uint>(16);
+
+        /// <summary>
+        /// Try adding the characters from the provided string to the font asset.
+        /// </summary>
+        /// <param name="unicodes">Array that contains the characters to add to the font asset.</param>
+        /// <returns>Returns true if all the characters were successfully added to the font asset. Return false otherwise.</returns>
+        public bool TryAddCharacters(uint[] unicodes)
+        {
+            uint[] missingUnicodes;
+
+            return TryAddCharacters(unicodes, out missingUnicodes);
+        }
+
+        /// <summary>
+        /// Try adding the characters from the provided string to the font asset.
+        /// </summary>
+        /// <param name="unicodes">Array that contains the characters to add to the font asset.</param>
+        /// <param name="missingUnicodes">Array containing the characters that could not be added to the font asset.</param>
+        /// <returns>Returns true if all the characters were successfully added to the font asset. Return false otherwise.</returns>
+        public bool TryAddCharacters(uint[] unicodes, out uint[] missingUnicodes)
+        {
+            s_MissingCharacterList.Clear();
+
+            // Make sure font asset is set to dynamic and that we have a valid list of characters.
+            if (unicodes == null || unicodes.Length == 0 || m_AtlasPopulationMode == AtlasPopulationMode.Static)
+            {
+                if (m_AtlasPopulationMode == AtlasPopulationMode.Static)
+                    Debug.LogWarning("Unable to add characters to font asset [" + this.name + "] because its AtlasPopulationMode is set to Static.", this);
+                else
+                {
+                    Debug.LogWarning("Unable to add characters to font asset [" + this.name + "] because the provided Unicode list is Null or Empty.", this);
+                }
+
+                missingUnicodes = unicodes.ToArray();
+                return false;
+            }
+
+            Profiler.BeginSample("TMP.TryAddCharacter");
+
+            // Load font face.
+            if (FontEngine.LoadFontFace(m_SourceFontFile, m_FaceInfo.pointSize) != FontEngineError.Success)
+            {
+                Profiler.EndSample();
+
+                missingUnicodes = unicodes.ToArray();
+                return false;
+            }
+
+            // Clear data structures used to track which glyph needs to be added to atlas texture.
+            m_GlyphIndexList.Clear();
+            m_CharactersToAdd.Clear();
+
+            bool isMissingCharacters = false;
+            int unicodeCount = unicodes.Length;
+
+            for (int i = 0; i < unicodeCount; i++)
+            {
+                uint unicode = unicodes[i];
+
+                // Check if character is already contained in the character table.
+                if (m_CharacterLookupDictionary.ContainsKey(unicode))
+                    continue;
+
+                // Get the index of the glyph for this unicode value.
+                uint glyphIndex = FontEngine.GetGlyphIndex(unicode);
+
+                if (glyphIndex == 0)
+                {
+                    isMissingCharacters = true;
+                    continue;
+                }
+
+                TMP_Character character = new TMP_Character(unicode, glyphIndex);
+
+                // Check if glyph is already contained in the font asset as the same glyph might be referenced by multiple characters.
+                if (m_GlyphLookupDictionary.ContainsKey(glyphIndex))
+                {
+                    character.glyph = m_GlyphLookupDictionary[glyphIndex];
+                    m_CharacterTable.Add(character);
+                    m_CharacterLookupDictionary.Add(unicode, character);
+
+                    continue;
+                }
+
+                m_GlyphIndexList.Add(glyphIndex);
+                m_CharactersToAdd.Add(character);
+            }
+
+            if (m_GlyphIndexList.Count == 0)
+            {
+                //Debug.LogWarning("No characters will be added to font asset [" + this.name + "] either because they are already present in the font asset or missing from the font file.");
+                Profiler.EndSample();
+
+                missingUnicodes = unicodes.ToArray();
+                return false;
+            }
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                //Debug.Log("Setting initial size of atlas texture used by font asset [" + this.name + "].");
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            Glyph[] glyphs;
+
+            bool allCharactersAdded = FontEngine.TryAddGlyphsToTexture(m_GlyphIndexList, m_AtlasPadding, GlyphPackingMode.BestShortSideFit, m_FreeGlyphRects, m_UsedGlyphRects, m_AtlasRenderMode, m_AtlasTextures[m_AtlasTextureIndex], out glyphs);
+
+            // Add new glyphs to relevant data structures.
+            for (int i = 0; i < glyphs.Length; i++)
+            {
+                Glyph glyph = glyphs[i];
+                uint glyphIndex = glyph.index;
+                
+                // Add new glyph to glyph table.
+                m_GlyphTable.Add(glyph);
+                m_GlyphLookupDictionary.Add(glyphIndex, glyph);
+            }
+
+            // Add new characters to relevant data structures.
+            for (int i = 0; i < m_CharactersToAdd.Count; i++)
+            {
+                TMP_Character character = m_CharactersToAdd[i];
+                Glyph glyph;
+
+                if (m_GlyphLookupDictionary.TryGetValue(character.glyphIndex, out glyph) == false)
+                {
+                    s_MissingCharacterList.Add(character.unicode);
+                    continue;
+                }
+
+                character.glyph = glyph;
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(character.unicode, character);
+            }
+
+            #if UNITY_EDITOR
+            // Makes the changes to the font asset persistent.
+            if (UnityEditor.EditorUtility.IsPersistent(this))
+            {
+                TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+            }
+            #endif
+
+            Profiler.EndSample();
+
+            missingUnicodes = null;
+
+            if (s_MissingCharacterList.Count > 0)
+                missingUnicodes = s_MissingCharacterList.ToArray();
+
+            return allCharactersAdded && !isMissingCharacters;
+        }
+
+        /// <summary>
+        /// Try adding the characters from the provided string to the font asset.
+        /// </summary>
+        /// <param name="characters">String containing the characters to add to the font asset.</param>
+        /// <returns>Returns true if all the characters were successfully added to the font asset. Return false otherwise.</returns>
+        public bool TryAddCharacters(string characters)
+        {
+            string missingCharacters;
+
+            return TryAddCharacters(characters, out missingCharacters);
+        }
+
+
+        /// <summary>
+        /// Try adding the characters from the provided string to the font asset.
+        /// </summary>
+        /// <param name="characters">String containing the characters to add to the font asset.</param>
+        /// <param name="missingCharacters">String containing the characters that could not be added to the font asset.</param>
+        /// <returns>Returns true if all the characters were successfully added to the font asset. Return false otherwise.</returns>
+        public bool TryAddCharacters(string characters, out string missingCharacters)
+        {
+            // Make sure font asset is set to dynamic and that we have a valid list of characters.
+            if (string.IsNullOrEmpty(characters) || m_AtlasPopulationMode == AtlasPopulationMode.Static)
+            {
+                if (m_AtlasPopulationMode == AtlasPopulationMode.Static)
+                    Debug.LogWarning("Unable to add characters to font asset [" + this.name + "] because its AtlasPopulationMode is set to Static.", this);
+                else
+                {
+                    Debug.LogWarning("Unable to add characters to font asset [" + this.name + "] because the provided character list is Null or Empty.", this);
+                }
+
+                missingCharacters = characters;
+                return false;
+            }
+
+            // Load font face.
+            if (FontEngine.LoadFontFace(m_SourceFontFile, m_FaceInfo.pointSize) != FontEngineError.Success)
+            {
+                missingCharacters = characters;
+                return false;
+            }
+
+            // Clear data structures used to track which glyph needs to be added to atlas texture.
+            m_GlyphIndexList.Clear();
+            m_CharactersToAdd.Clear();
+
+            bool isMissingCharacters = false;
+            int characterCount = characters.Length;
+
+            // Iterate over each of the requested characters.
+            for (int i = 0; i < characterCount; i++)
+            {
+                uint unicode = characters[i];
+
+                // Check if character is already contained in the character table.
+                if (m_CharacterLookupDictionary.ContainsKey(unicode))
+                    continue;
+
+                // Get the index of the glyph for this unicode value.
+                uint glyphIndex = FontEngine.GetGlyphIndex(unicode);
+
+                // Skip missing glyphs
+                if (glyphIndex == 0)
+                {
+                    // Might want to keep track and report the missing characters.
+                    isMissingCharacters = true;
+                    continue;
+                }
+
+                TMP_Character character = new TMP_Character(unicode, glyphIndex);
+
+                // Check if glyph is already contained in the font asset as the same glyph might be referenced by multiple characters.
+                if (m_GlyphLookupDictionary.ContainsKey(glyphIndex))
+                {
+                    character.glyph = m_GlyphLookupDictionary[glyphIndex];
+                    m_CharacterTable.Add(character);
+                    m_CharacterLookupDictionary.Add(unicode, character);
+
+                    continue;
+                }
+
+                // Add glyph to list of glyphs to add and glyph lookup map.
+                m_GlyphIndexList.Add(glyphIndex);
+                m_CharactersToAdd.Add(character);
+            }
+
+            if (m_GlyphIndexList.Count == 0)
+            {
+                missingCharacters = characters;
+                return false;
+            }
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                //Debug.Log("Setting initial size of atlas texture used by font asset [" + this.name + "].");
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            Glyph[] glyphs;
+
+            bool allCharactersAdded = FontEngine.TryAddGlyphsToTexture(m_GlyphIndexList, m_AtlasPadding, GlyphPackingMode.BestShortSideFit, m_FreeGlyphRects, m_UsedGlyphRects, m_AtlasRenderMode, m_AtlasTextures[m_AtlasTextureIndex], out glyphs);
+
+            for (int i = 0; i < glyphs.Length; i++)
+            {
+                Glyph glyph = glyphs[i];
+                uint glyphIndex = glyph.index;
+
+                // Add new glyph to glyph table.
+                m_GlyphTable.Add(glyph);
+                m_GlyphLookupDictionary.Add(glyphIndex, glyph);
+            }
+
+            missingCharacters = string.Empty;
+
+            // Add new characters to relevant data structures.
+            for (int i = 0; i < m_CharactersToAdd.Count; i++)
+            {
+                TMP_Character character = m_CharactersToAdd[i];
+                Glyph glyph;
+
+                if (m_GlyphLookupDictionary.TryGetValue(character.glyphIndex, out glyph) == false)
+                {
+                    // TODO: Revise to avoid string concatenation.
+                    missingCharacters += (char)character.unicode;
+                    continue;
+                }
+
+                character.glyph = glyph;
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(character.unicode, character);
+            }
+
+            #if UNITY_EDITOR
+            // Makes the changes to the font asset persistent.
+            if (UnityEditor.EditorUtility.IsPersistent(this))
+            {
+                TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+            }
+            #endif
+
+            return allCharactersAdded && !isMissingCharacters;
+        }
+
+
+        /// <summary>
+        /// NOT USED CURRENTLY - Try adding character using Unicode value to font asset.
+        /// </summary>
+        /// <param name="unicode">The Unicode value of the character.</param>
+        /// <param name="character">The character data if successfully added to the font asset. Null otherwise.</param>
+        /// <returns>Returns true if the character has been added. False otherwise.</returns>
+        internal bool TryAddCharacter_Internal(uint unicode)
+        {
+            TMP_Character character = null;
+            
+            // Check if character is already contained in the character table.
+            if (m_CharacterLookupDictionary.ContainsKey(unicode))
+                return true;
+
+            uint glyphIndex = FontEngine.GetGlyphIndex(unicode);
+            if (glyphIndex == 0)
+                return false;
+
+            // Check if glyph is already contained in the font asset as the same glyph might be referenced by multiple characters.
+            if (m_GlyphLookupDictionary.ContainsKey(glyphIndex))
+            {
+                character = new TMP_Character(unicode, m_GlyphLookupDictionary[glyphIndex]);
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(unicode, character);
+
+                //#if UNITY_EDITOR
+                // Makes the changes to the font asset persistent.
+                // OPTIMIZATION: This could be handled when exiting Play mode if we added any new characters to the asset.
+                // Could also add some update registry to handle this.
+                //SortGlyphTable();
+                //UnityEditor.EditorUtility.SetDirty(this);
+                //#endif
+
+                return true;
+            }
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                //Debug.Log("Setting initial size of atlas texture used by font asset [" + this.name + "].");
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            Glyph glyph;
+
+            if (FontEngine.TryAddGlyphToTexture(glyphIndex, m_AtlasPadding, GlyphPackingMode.BestShortSideFit, m_FreeGlyphRects, m_UsedGlyphRects, m_AtlasRenderMode, m_AtlasTextures[m_AtlasTextureIndex], out glyph))
+            {
+                // Add new glyph to glyph table.
+                m_GlyphTable.Add(glyph);
+                m_GlyphLookupDictionary.Add(glyphIndex, glyph);
+
+                // Add new character
+                character = new TMP_Character(unicode, glyph);
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(unicode, character);
+
+                //#if UNITY_EDITOR
+                // Makes the changes to the font asset persistent.
+                // OPTIMIZATION: This could be handled when exiting Play mode if we added any new characters to the asset.
+                // Could also add some update registry to handle this.
+                //SortGlyphTable();
+                //UnityEditor.EditorUtility.SetDirty(this);
+                //#endif
+
+                return true;
+            }
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// To be removed.
+        /// </summary>
+        /// <param name="unicode"></param>
+        /// <param name="glyph"></param>
+        internal TMP_Character AddCharacter_Internal(uint unicode, Glyph glyph)
+        {
+            // Check if character is already contained in the character table.
+            if (m_CharacterLookupDictionary.ContainsKey(unicode))
+                return m_CharacterLookupDictionary[unicode];
+
+            uint glyphIndex = glyph.index;
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                //Debug.Log("Setting initial size of atlas texture used by font asset [" + this.name + "].");
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            // Check if glyph is already contained in the glyph table.
+            if (m_GlyphLookupDictionary.ContainsKey(glyphIndex) == false)
+            {
+                if (glyph.glyphRect.width == 0 || glyph.glyphRect.width == 0)
+                {
+                    // Glyphs with zero width and / or height can be automatically added to font asset.
+                    m_GlyphTable.Add(glyph);
+                }
+                else
+                {
+                    // Try packing new glyph 
+                    if (FontEngine.TryPackGlyphInAtlas(glyph, m_AtlasPadding, GlyphPackingMode.ContactPointRule, m_AtlasRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects) == false)
+                    {
+                        // TODO: Add handling to create new atlas texture to fit glyph.
+
+                        return null;
+                    }
+
+                    m_GlyphsToRender.Add(glyph);
+                }
+            }
+
+            // Add character to font asset.
+            TMP_Character character = new TMP_Character(unicode, glyph);
+            m_CharacterTable.Add(character);
+            m_CharacterLookupDictionary.Add(unicode, character);
+
+            //Debug.Log("Adding character [" + (char)unicode + "] with Unicode (" + unicode + ") to [" + this.name + "] font asset.");
+
+            // Schedule glyph to be added to the font atlas texture
+            //TM_FontAssetUpdateManager.RegisterFontAssetForUpdate(this);
+            UpdateAtlasTexture(); // Temporary until callback system is revised.
+
+            //#if UNITY_EDITOR
+            // Makes the changes to the font asset persistent.
+            // OPTIMIZATION: This could be handled when exiting Play mode if we added any new characters to the asset.
+            // Could also add some update registry to handle this.
+            //SortGlyphTable();
+            //UnityEditor.EditorUtility.SetDirty(this);
+            //#endif
+
+            return character;
+        }
+
+
+        /// <summary>
+        /// Try adding character using Unicode value to font asset.
+        /// Function assumes internal user has already checked to make sure the character is not already contained in the font asset.
+        /// </summary>
+        /// <param name="unicode">The Unicode value of the character.</param>
+        /// <param name="character">The character data if successfully added to the font asset. Null otherwise.</param>
+        /// <returns>Returns true if the character has been added. False otherwise.</returns>
+        internal bool TryAddCharacterInternal(uint unicode, out TMP_Character character)
+        {
+            character = null;
+
+            // Load font face.
+            if (FontEngine.LoadFontFace(sourceFontFile, m_FaceInfo.pointSize) != FontEngineError.Success)
+                return false;
+
+            uint glyphIndex = FontEngine.GetGlyphIndex(unicode);
+            if (glyphIndex == 0)
+                return false;
+
+            Profiler.BeginSample("TMP.TryAddCharacter");
+
+            // Check if glyph is already contained in the font asset as the same glyph might be referenced by multiple characters.
+            if (m_GlyphLookupDictionary.ContainsKey(glyphIndex))
+            {
+                character = new TMP_Character(unicode, m_GlyphLookupDictionary[glyphIndex]);
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(unicode, character);
+
+                if (TMP_Settings.getFontFeaturesAtRuntime)
+                    UpdateGlyphAdjustmentRecords(unicode, glyphIndex);
+
+                #if UNITY_EDITOR
+                // Makes the changes to the font asset persistent.
+                // OPTIMIZATION: This could be handled when exiting Play mode if we added any new characters to the asset.
+                // Could also add some update registry to handle this.
+                //SortGlyphTable();
+                if (UnityEditor.EditorUtility.IsPersistent(this))
+                {
+                    TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+                }
+                #endif
+
+                Profiler.EndSample();
+
+                return true;
+            }
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                // TODO: Need texture to be readable.
+                if (m_AtlasTextures[m_AtlasTextureIndex].isReadable == false)
+                {
+                    Debug.LogWarning("Unable to add the requested character to font asset [" + this.name + "]'s atlas texture. Please make the texture [" + m_AtlasTextures[m_AtlasTextureIndex].name + "] readable.", m_AtlasTextures[m_AtlasTextureIndex]);
+
+                    Profiler.EndSample();
+                    return false;
+                }
+
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            Glyph glyph;
+
+            if (FontEngine.TryAddGlyphToTexture(glyphIndex, m_AtlasPadding, GlyphPackingMode.BestShortSideFit, m_FreeGlyphRects, m_UsedGlyphRects, m_AtlasRenderMode, m_AtlasTextures[m_AtlasTextureIndex], out glyph))
+            {
+                // Add new glyph to glyph table.
+                m_GlyphTable.Add(glyph);
+                m_GlyphLookupDictionary.Add(glyphIndex, glyph);
+
+                // Add new character
+                character = new TMP_Character(unicode, glyph);
+                m_CharacterTable.Add(character);
+                m_CharacterLookupDictionary.Add(unicode, character);
+
+                m_GlyphIndexList.Add(glyphIndex);
+
+                if (TMP_Settings.getFontFeaturesAtRuntime)
+                    UpdateGlyphAdjustmentRecords(unicode, glyphIndex);
+
+                #if UNITY_EDITOR
+                // Makes the changes to the font asset persistent.
+                // OPTIMIZATION: This could be handled when exiting Play mode if we added any new characters to the asset.
+                // Could also add some update registry to handle this.
+                //SortGlyphTable();
+                if (UnityEditor.EditorUtility.IsPersistent(this))
+                {
+                    TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+                }
+                #endif
+
+                Profiler.EndSample();
+
+                return true;
+            }
+
+            Profiler.EndSample();
+
+            return false;
+        }
+
+
+        /// <summary>
+        /// Internal function used to get the glyph index for the given unicode.
+        /// </summary>
+        /// <param name="unicode"></param>
+        /// <returns></returns>
+        internal uint GetGlyphIndex(uint unicode)
+        {
+            // Load font face.
+            if (FontEngine.LoadFontFace(sourceFontFile, m_FaceInfo.pointSize) != FontEngineError.Success)
+                return 0;
+
+            return FontEngine.GetGlyphIndex(unicode);
+        }
+
+
+        internal void UpdateAtlasTexture()
+        {
+            // Return if we don't have any glyphs to add to atlas texture.
+            // This is possible if UpdateAtlasTexture() was called manually.
+            //if (m_GlyphsToPack.Count == 0)
+            //    return;
+
+            if (m_GlyphsToRender.Count == 0)
+                return;
+
+            //Debug.Log("Updating [" + this.name + "]'s atlas texture.");
+
+            // Pack glyphs in the given atlas texture size. 
+            // TODO: Packing and glyph render modes should be defined in the font asset.
+            //FontEngine.PackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_AtlasPadding, GlyphPackingMode.ContactPointRule, GlyphRenderMode.SDFAA, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects);
+            //FontEngine.RenderGlyphsToTexture(m_GlyphsPacked, m_AtlasPadding, GlyphRenderMode.SDFAA, m_AtlasTextures[m_AtlasTextureIndex]);
+
+            // Resize the Atlas Texture to the appropriate size
+            if (m_AtlasTextures[m_AtlasTextureIndex].width == 0 || m_AtlasTextures[m_AtlasTextureIndex].height == 0)
+            {
+                //Debug.Log("Setting initial size of atlas texture used by font asset [" + this.name + "].");
+                m_AtlasTextures[m_AtlasTextureIndex].Resize(m_AtlasWidth, m_AtlasHeight);
+                FontEngine.ResetAtlasTexture(m_AtlasTextures[m_AtlasTextureIndex]);
+            }
+
+            FontEngine.RenderGlyphsToTexture(m_GlyphsToRender, m_AtlasPadding, m_AtlasRenderMode, m_AtlasTextures[m_AtlasTextureIndex]);
+
+            // Apply changes to atlas texture
+            m_AtlasTextures[m_AtlasTextureIndex].Apply(false, false);
+
+            // Add glyphs that were successfully packed to the glyph table.
+            for (int i = 0; i < m_GlyphsToRender.Count /* m_GlyphsPacked.Count */; i++)
+            {
+                Glyph glyph = m_GlyphsToRender[i]; // m_GlyphsPacked[i];
+
+                // Update atlas texture index
+                glyph.atlasIndex = m_AtlasTextureIndex;
+
+                m_GlyphTable.Add(glyph);
+                m_GlyphLookupDictionary.Add(glyph.index, glyph);
+            }
+
+            // Clear list of glyphs
+            m_GlyphsPacked.Clear();
+            m_GlyphsToRender.Clear();
+
+            // Add any remaining glyphs into new atlas texture if multi texture support if enabled.
+            if (m_GlyphsToPack.Count > 0)
+            {
+                /*
+                // Create new atlas texture 
+                Texture2D tex = new Texture2D(m_AtlasWidth, m_AtlasHeight, TextureFormat.Alpha8, false, true);
+                tex.SetPixels32(new Color32[m_AtlasWidth * m_AtlasHeight]);
+                tex.Apply();
+
+                m_AtlasTextureIndex++;
+
+                if (m_AtlasTextures.Length == m_AtlasTextureIndex)
+                    Array.Resize(ref m_AtlasTextures, Mathf.NextPowerOfTwo(m_AtlasTextureIndex + 1));
+
+                m_AtlasTextures[m_AtlasTextureIndex] = tex;
+                */
+            }
+
+            #if UNITY_EDITOR
+            // Makes the changes to the font asset persistent.
+            SortGlyphAndCharacterTables();
+            TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+            #endif
+        }
+
+
+        internal void UpdateGlyphAdjustmentRecords(uint unicode, uint glyphIndex)
+        {
+            Profiler.BeginSample("TMP.UpdateGlyphAdjustmentRecords");
+
+            int glyphCount = m_GlyphIndexList.Count;
+
+            if (s_GlyphIndexArray.Length <= glyphCount)
+                s_GlyphIndexArray = new uint[Mathf.NextPowerOfTwo(glyphCount + 1)];
+
+            for (int i = 0; i < glyphCount; i++)
+                s_GlyphIndexArray[i] = m_GlyphIndexList[i];
+
+            // Clear unused array elements
+            Array.Clear(s_GlyphIndexArray, glyphCount, s_GlyphIndexArray.Length - glyphCount);
+
+            // Get glyph pair adjustment records from font file.
+            // TODO: Revise FontEngine bindings to use a more efficient function where only the new glyph index is passed.
+            GlyphPairAdjustmentRecord[] pairAdjustmentRecords = FontEngine.GetGlyphPairAdjustmentTable(s_GlyphIndexArray);
+
+            if (pairAdjustmentRecords == null || pairAdjustmentRecords.Length == 0)
+            {
+                Profiler.EndSample();
+                return;
+            }
+
+            if (m_FontFeatureTable == null)
+                m_FontFeatureTable = new TMP_FontFeatureTable();
+
+            for (int i = 0; i < pairAdjustmentRecords.Length && pairAdjustmentRecords[i].firstAdjustmentRecord.glyphIndex != 0; i++)
+            {
+                long pairKey = (long)pairAdjustmentRecords[i].secondAdjustmentRecord.glyphIndex << 32 | pairAdjustmentRecords[i].firstAdjustmentRecord.glyphIndex;
+
+                // Check if table already contains a pair adjustment record for this key.
+                if (m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.ContainsKey(pairKey))
+                    continue;
+
+                TMP_GlyphPairAdjustmentRecord record = new TMP_GlyphPairAdjustmentRecord(pairAdjustmentRecords[i]);
+
+                m_FontFeatureTable.m_GlyphPairAdjustmentRecords.Add(record);
+                m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Add(pairKey, record);
+            }
+
+            #if UNITY_EDITOR
+            m_FontFeatureTable.SortGlyphPairAdjustmentRecords();
+            #endif
+
+            Profiler.EndSample();
+        }
+
+
+        /// <summary>
+        /// Clears font asset data including the glyph and character tables and textures.
+        /// Function might be changed to Internal and only used in tests.
+        /// </summary>
+        /// <param name="setAtlasSizeToZero">Will set the atlas texture size to zero width and height if true.</param>
+        public void ClearFontAssetData(bool setAtlasSizeToZero = false)
+        {
+            #if UNITY_EDITOR
+            // Record full object undo in the Editor.
+            //UnityEditor.Undo.RecordObjects(new UnityEngine.Object[] { this, this.atlasTexture }, "Resetting Font Asset");
+            #endif
+
+            // Clear glyph and character tables
+            if (m_GlyphTable != null)
+                m_GlyphTable.Clear();
+
+            if (m_CharacterTable != null)
+                m_CharacterTable.Clear();
+
+            // Clear glyph rectangles
+            if (m_UsedGlyphRects != null)
+                m_UsedGlyphRects.Clear();
+
+            if (m_FreeGlyphRects != null)
+            {
+                int packingModifier = ((GlyphRasterModes)m_AtlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+                m_FreeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier) };
+            }
+
+            if (m_GlyphsToPack != null)
+                m_GlyphsToPack.Clear();
+
+            if (m_GlyphsPacked != null)
+                m_GlyphsPacked.Clear();
+
+            // Clear Glyph Adjustment Table
+            if (m_FontFeatureTable != null && m_FontFeatureTable.m_GlyphPairAdjustmentRecords != null)
+                m_FontFeatureTable.glyphPairAdjustmentRecords.Clear();
+
+            m_AtlasTextureIndex = 0;
+
+            // Clear atlas textures
+            if (m_AtlasTextures != null)
+            {
+                for (int i = 0; i < m_AtlasTextures.Length; i++)
+                {
+                    Texture2D texture = m_AtlasTextures[i];
+
+                    if (i > 0)
+                        DestroyImmediate(texture, true);
+
+                    if (texture == null)
+                        continue;
+
+                    // TODO: Need texture to be readable.
+                    if (m_AtlasTextures[i].isReadable == false)
+                    {
+                        Debug.LogWarning("Unable to reset font asset [" + this.name + "]'s atlas texture. Please make the texture [" + m_AtlasTextures[i].name + "] readable.", m_AtlasTextures[i]);
+                        continue;
+                    }
+
+                    if (setAtlasSizeToZero)
+                    {
+                        texture.Resize(0, 0, TextureFormat.Alpha8, false);
+                    }
+                    else if (texture.width != m_AtlasWidth || texture.height != m_AtlasHeight)
+                    {
+                        texture.Resize(m_AtlasWidth, m_AtlasHeight, TextureFormat.Alpha8, false);
+                    }
+
+                    // Clear texture atlas
+                    FontEngine.ResetAtlasTexture(texture);
+                    texture.Apply();
+
+                    if (i == 0)
+                        m_AtlasTexture = texture;
+
+                    m_AtlasTextures[i] = texture;
+                }
+            }
+
+            #if UNITY_EDITOR
+            if (UnityEditor.EditorUtility.IsPersistent(this))
+            {
+                TMP_EditorResourceManager.RegisterResourceForReimport(this);
+            }
+            #endif
+
+            ReadFontAssetDefinition();
+        }
+
+
+
+        /// <summary>
+        /// Internal method used to upgrade font asset to support Dynamic SDF.
+        /// </summary>
+        private void UpgradeFontAsset()
+        {
+            m_Version = "1.1.0";
+
+            Debug.Log("Upgrading font asset [" + this.name + "] to version " + m_Version + ".", this);
+
+            m_FaceInfo.familyName = m_fontInfo.Name;
+            m_FaceInfo.styleName = string.Empty;
+
+            m_FaceInfo.pointSize = (int)m_fontInfo.PointSize;
+            m_FaceInfo.scale = m_fontInfo.Scale;
+
+            m_FaceInfo.lineHeight = m_fontInfo.LineHeight;
+            m_FaceInfo.ascentLine = m_fontInfo.Ascender;
+            m_FaceInfo.capLine = m_fontInfo.CapHeight;
+            m_FaceInfo.meanLine = m_fontInfo.CenterLine;
+            m_FaceInfo.baseline = m_fontInfo.Baseline;
+            m_FaceInfo.descentLine = m_fontInfo.Descender;
+
+            m_FaceInfo.superscriptOffset = m_fontInfo.SuperscriptOffset;
+            m_FaceInfo.superscriptSize = m_fontInfo.SubSize;
+            m_FaceInfo.subscriptOffset = m_fontInfo.SubscriptOffset;
+            m_FaceInfo.subscriptSize = m_fontInfo.SubSize;
+
+            m_FaceInfo.underlineOffset = m_fontInfo.Underline;
+            m_FaceInfo.underlineThickness = m_fontInfo.UnderlineThickness;
+            m_FaceInfo.strikethroughOffset = m_fontInfo.strikethrough;
+            m_FaceInfo.strikethroughThickness = m_fontInfo.strikethroughThickness;
+
+            m_FaceInfo.tabWidth = m_fontInfo.TabWidth;
+
+            if (m_AtlasTextures == null || m_AtlasTextures.Length == 0)
+                m_AtlasTextures = new Texture2D[1];
+
+            m_AtlasTextures[0] = atlas;
+
+            //atlas = null;
+
+            m_AtlasWidth = (int)m_fontInfo.AtlasWidth;
+            m_AtlasHeight = (int)m_fontInfo.AtlasHeight;
+            m_AtlasPadding = (int)m_fontInfo.Padding;
+
+            switch(m_CreationSettings.renderMode)
+            {
+                case 0:
+                    m_AtlasRenderMode = GlyphRenderMode.SMOOTH_HINTED;
+                    break;
+                case 1:
+                    m_AtlasRenderMode = GlyphRenderMode.SMOOTH;
+                    break;
+                case 2:
+                    m_AtlasRenderMode = GlyphRenderMode.RASTER_HINTED;
+                    break;
+                case 3:
+                    m_AtlasRenderMode = GlyphRenderMode.RASTER;
+                    break;
+                case 6:
+                    m_AtlasRenderMode = GlyphRenderMode.SDF16;
+                    break;
+                case 7:
+                    m_AtlasRenderMode = GlyphRenderMode.SDF32;
+                    break;
+            }
+
+            //m_fontInfo = null;
+
+            // Convert font weight table
+            if (fontWeights != null)
+            {
+                m_FontWeightTable[4] = fontWeights[4];
+                m_FontWeightTable[7] = fontWeights[7];
+
+                // Clear old fontWeight
+                //fontWeights = null;
+            }
+
+            // Convert font fallbacks
+            if (fallbackFontAssets != null && fallbackFontAssets.Count > 0)
+            {
+                if (m_FallbackFontAssetTable == null)
+                    m_FallbackFontAssetTable = new List<TMP_FontAsset>(fallbackFontAssets.Count);
+
+                for (int i = 0; i < fallbackFontAssets.Count; i++)
+                    m_FallbackFontAssetTable.Add(fallbackFontAssets[i]);
+
+                // Clear old fallbackFontAssets list
+                //fallbackFontAssets = null;
+            }
+
+            // Check if font asset creation settings contains a reference to the source font file GUID
+            if (m_CreationSettings.sourceFontFileGUID != null || m_CreationSettings.sourceFontFileGUID != string.Empty)
+            {
+                m_SourceFontFileGUID = m_CreationSettings.sourceFontFileGUID;
+            }
+            else
+            {
+                Debug.LogWarning("Font asset [" + this.name + "] doesn't have a reference to its source font file. Please assign the appropriate source font file for this asset in the Font Atlas & Material section of font asset inspector.", this);
+            }
+
+            // Convert legacy glyph and character tables to new format
+            m_GlyphTable.Clear();
+            m_CharacterTable.Clear();
+
+            //#if UNITY_EDITOR
+            // TODO: This is causing a crash in Unity and related to AssetDatabase.LoadAssetAtPath and Resources.Load()
+            // Load font to allow us to get the glyph index.
+            //string path = UnityEditor.AssetDatabase.GUIDToAssetPath(m_SourceFontFileGUID);
+
+            //if (path != string.Empty)
+            //{
+                //m_SourceFontFile_EditorRef = UnityEditor.AssetDatabase.LoadAssetAtPath<Font>(path);
+                //FontEngine.LoadFontFace(m_SourceFontFile_EditorRef);
+            //}
+            //#endif
+
+            bool isSpaceCharacterPresent = false;
+            for (int i = 0; i < m_glyphInfoList.Count; i++)
+            {
+                TMP_Glyph oldGlyph = m_glyphInfoList[i];
+
+                Glyph glyph = new Glyph();
+
+                uint glyphIndex = (uint)i + 1;
+                
+                //#if UNITY_EDITOR
+                //if (m_SourceFontFile_EditorRef != null)
+                //    glyphIndex = FontEngine.GetGlyphIndex((uint)oldGlyph.id);
+                //#endif
+
+                glyph.index = glyphIndex;
+                glyph.glyphRect = new GlyphRect((int)oldGlyph.x, m_AtlasHeight - (int)(oldGlyph.y + oldGlyph.height + 0.5f), (int)(oldGlyph.width + 0.5f), (int)(oldGlyph.height + 0.5f));
+                glyph.metrics = new GlyphMetrics(oldGlyph.width, oldGlyph.height, oldGlyph.xOffset, oldGlyph.yOffset, oldGlyph.xAdvance);
+                glyph.scale = oldGlyph.scale;
+                glyph.atlasIndex = 0;
+
+                m_GlyphTable.Add(glyph);
+
+                TMP_Character character = new TMP_Character((uint)oldGlyph.id, glyph);
+
+                if (oldGlyph.id == 32)
+                    isSpaceCharacterPresent = true;
+
+                m_CharacterTable.Add(character);
+            }
+
+            // Special handling for the synthesized space character
+            if (!isSpaceCharacterPresent)
+            {
+                Debug.Log("Synthesizing Space for [" + this.name + "]");
+                Glyph glyph = new Glyph(0, new GlyphMetrics(0, 0, 0, 0, m_FaceInfo.ascentLine / 5), GlyphRect.zero, 1.0f, 0);
+                m_GlyphTable.Add(glyph);
+                m_CharacterTable.Add(new TMP_Character(32, glyph));
+            }
+
+            // Clear legacy glyph info list.
+            //m_glyphInfoList.Clear();
+
+            ReadFontAssetDefinition();
+
+            // Convert atlas textures data to new format
+            // TODO
+            #if UNITY_EDITOR
+            if (UnityEditor.EditorUtility.IsPersistent(this))
+            {
+                TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+            }
+            #endif
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        void UpgradeGlyphAdjustmentTableToFontFeatureTable()
+        {
+            Debug.Log("Upgrading font asset [" + this.name + "] Glyph Adjustment Table.", this);
+
+            if (m_FontFeatureTable == null)
+                m_FontFeatureTable = new TMP_FontFeatureTable();
+
+            int pairCount = m_KerningTable.kerningPairs.Count;
+
+            m_FontFeatureTable.m_GlyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>(pairCount);
+
+            for (int i = 0; i < pairCount; i++)
+            {
+                KerningPair pair = m_KerningTable.kerningPairs[i];
+
+                uint firstGlyphIndex = 0;
+                TMP_Character firstCharacter;
+
+                if (m_CharacterLookupDictionary.TryGetValue(pair.firstGlyph, out firstCharacter))
+                    firstGlyphIndex = firstCharacter.glyphIndex;
+
+                uint secondGlyphIndex = 0;
+                TMP_Character secondCharacter;
+
+                if (m_CharacterLookupDictionary.TryGetValue(pair.secondGlyph, out secondCharacter))
+                    secondGlyphIndex = secondCharacter.glyphIndex;
+
+                TMP_GlyphAdjustmentRecord firstAdjustmentRecord = new TMP_GlyphAdjustmentRecord(firstGlyphIndex, new TMP_GlyphValueRecord(pair.firstGlyphAdjustments.xPlacement, pair.firstGlyphAdjustments.yPlacement, pair.firstGlyphAdjustments.xAdvance, pair.firstGlyphAdjustments.yAdvance));
+                TMP_GlyphAdjustmentRecord secondAdjustmentRecord = new TMP_GlyphAdjustmentRecord(secondGlyphIndex, new TMP_GlyphValueRecord(pair.secondGlyphAdjustments.xPlacement, pair.secondGlyphAdjustments.yPlacement, pair.secondGlyphAdjustments.xAdvance, pair.secondGlyphAdjustments.yAdvance));
+                TMP_GlyphPairAdjustmentRecord record = new TMP_GlyphPairAdjustmentRecord(firstAdjustmentRecord, secondAdjustmentRecord);
+
+                m_FontFeatureTable.m_GlyphPairAdjustmentRecords.Add(record);
+            }
+
+            // TODO: Should clear legacy kerning table.
+            m_KerningTable.kerningPairs = null;
+            m_KerningTable = null;
+
+            #if UNITY_EDITOR
+            if (UnityEditor.EditorUtility.IsPersistent(this))
+            {
+                TMP_EditorResourceManager.RegisterResourceForUpdate(this);
+            }
+            #endif
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3d84d8baadb9293d4eb69f125ebcf3aa20bed1cc
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAsset.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71c1514a6bd24e1e882cebbe1904ce04
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: ee148e281f3c41c5b4ff5f8a5afe5a6c, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0c092aa9cbd20d7a2553cbc575273d2fb986b335
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs
@@ -0,0 +1,456 @@
+using UnityEngine;
+using UnityEngine.Serialization;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Class that contains the basic information about the font.
+    /// </summary>
+    [Serializable]
+    public class FaceInfo_Legacy
+    {
+        public string Name;
+        public float PointSize;
+        public float Scale;
+
+        public int CharacterCount;
+
+        public float LineHeight;
+        public float Baseline;
+        public float Ascender;
+        public float CapHeight;
+        public float Descender;
+        public float CenterLine;
+
+        public float SuperscriptOffset;
+        public float SubscriptOffset;
+        public float SubSize;
+
+        public float Underline;
+        public float UnderlineThickness;
+
+        public float strikethrough;
+        public float strikethroughThickness;
+
+        public float TabWidth;
+
+        public float Padding;
+        public float AtlasWidth;
+        public float AtlasHeight;
+    }
+
+
+    // Class which contains the Glyph Info / Character definition for each character contained in the font asset.
+    [Serializable]
+    public class TMP_Glyph : TMP_TextElement_Legacy
+    {
+        /// <summary>
+        /// Function to create a deep copy of a GlyphInfo.
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        public static TMP_Glyph Clone(TMP_Glyph source)
+        {
+            TMP_Glyph copy = new TMP_Glyph();
+
+            copy.id = source.id;
+            copy.x = source.x;
+            copy.y = source.y;
+            copy.width = source.width;
+            copy.height = source.height;
+            copy.xOffset = source.xOffset;
+            copy.yOffset = source.yOffset;
+            copy.xAdvance = source.xAdvance;
+            copy.scale = source.scale;
+
+            return copy;
+        }
+    }
+
+
+    // Structure which holds the font creation settings
+    [Serializable]
+    public struct FontAssetCreationSettings
+    {
+        public string sourceFontFileName;
+        public string sourceFontFileGUID;
+        public int pointSizeSamplingMode;
+        public int pointSize;
+        public int padding;
+        public int packingMode;
+        public int atlasWidth;
+        public int atlasHeight;
+        public int characterSetSelectionMode;
+        public string characterSequence;
+        public string referencedFontAssetGUID;
+        public string referencedTextAssetGUID;
+        public int fontStyle;
+        public float fontStyleModifier;
+        public int renderMode;
+        public bool includeFontFeatures;
+
+        internal FontAssetCreationSettings(string sourceFontFileGUID, int pointSize, int pointSizeSamplingMode, int padding, int packingMode, int atlasWidth, int atlasHeight, int characterSelectionMode, string characterSet, int renderMode)
+        {
+            this.sourceFontFileName = string.Empty;
+            this.sourceFontFileGUID = sourceFontFileGUID;
+            this.pointSize = pointSize;
+            this.pointSizeSamplingMode = pointSizeSamplingMode;
+            this.padding = padding;
+            this.packingMode = packingMode;
+            this.atlasWidth = atlasWidth;
+            this.atlasHeight = atlasHeight;
+            this.characterSequence = characterSet;
+            this.characterSetSelectionMode = characterSelectionMode;
+            this.renderMode = renderMode;
+
+            this.referencedFontAssetGUID = string.Empty;
+            this.referencedTextAssetGUID = string.Empty;
+            this.fontStyle = 0;
+            this.fontStyleModifier = 0;
+            this.includeFontFeatures = false;
+        }
+    }
+
+    /// <summary>
+    /// Contains the font assets for the regular and italic styles associated with a given font weight.
+    /// </summary>
+    [Serializable]
+    public struct TMP_FontWeightPair
+    {
+        public TMP_FontAsset regularTypeface;
+        public TMP_FontAsset italicTypeface;
+    }
+
+
+    public struct KerningPairKey
+    {
+        public uint ascii_Left;
+        public uint ascii_Right;
+        public uint key;
+
+        public KerningPairKey(uint ascii_left, uint ascii_right)
+        {
+            ascii_Left = ascii_left;
+            ascii_Right = ascii_right;
+            key = (ascii_right << 16) + ascii_left;
+        }
+    }
+
+    /// <summary>
+    /// Positional adjustments of a glyph
+    /// </summary>
+    [Serializable]
+    public struct GlyphValueRecord_Legacy
+    {
+        public float xPlacement;
+        public float yPlacement;
+        public float xAdvance;
+        public float yAdvance;
+
+        internal GlyphValueRecord_Legacy(UnityEngine.TextCore.LowLevel.GlyphValueRecord valueRecord)
+        {
+            this.xPlacement = valueRecord.xPlacement;
+            this.yPlacement = valueRecord.yPlacement;
+            this.xAdvance = valueRecord.xAdvance;
+            this.yAdvance = valueRecord.yAdvance;
+        }
+
+        public static GlyphValueRecord_Legacy operator +(GlyphValueRecord_Legacy a, GlyphValueRecord_Legacy b)
+        {
+            GlyphValueRecord_Legacy c;
+            c.xPlacement = a.xPlacement + b.xPlacement;
+            c.yPlacement = a.yPlacement + b.yPlacement;
+            c.xAdvance = a.xAdvance + b.xAdvance;
+            c.yAdvance = a.yAdvance + b.yAdvance;
+
+            return c;
+        }
+    }
+
+    [Serializable]
+    public class KerningPair
+    {
+        /// <summary>
+        /// The first glyph part of a kerning pair.
+        /// </summary>
+        public uint firstGlyph
+        {
+            get { return m_FirstGlyph; }
+            set { m_FirstGlyph = value; }
+        }
+        [FormerlySerializedAs("AscII_Left")]
+        [SerializeField]
+        private uint m_FirstGlyph;
+
+        /// <summary>
+        /// The positional adjustment of the first glyph.
+        /// </summary>
+        public GlyphValueRecord_Legacy firstGlyphAdjustments
+        {
+            get { return m_FirstGlyphAdjustments; }
+        }
+        [SerializeField]
+        private GlyphValueRecord_Legacy m_FirstGlyphAdjustments;
+
+        /// <summary>
+        /// The second glyph part of a kerning pair.
+        /// </summary>
+        public uint secondGlyph
+        {
+            get { return m_SecondGlyph; }
+            set { m_SecondGlyph = value; }
+        }
+        [FormerlySerializedAs("AscII_Right")]
+        [SerializeField]
+        private uint m_SecondGlyph;
+
+        /// <summary>
+        /// The positional adjustment of the second glyph.
+        /// </summary>
+        public GlyphValueRecord_Legacy secondGlyphAdjustments
+        {
+            get { return m_SecondGlyphAdjustments; }
+        }
+        [SerializeField]
+        private GlyphValueRecord_Legacy m_SecondGlyphAdjustments;
+
+        [FormerlySerializedAs("XadvanceOffset")]
+        public float xOffset;
+
+        internal static KerningPair empty = new KerningPair(0, new GlyphValueRecord_Legacy(), 0, new GlyphValueRecord_Legacy());
+
+        /// <summary>
+        /// Determines if the Character Spacing property of the text object will affect the kerning pair.
+        /// This is mostly relevant when using Diacritical marks to prevent Character Spacing from altering the 
+        /// </summary>
+        public bool ignoreSpacingAdjustments
+        {
+            get { return m_IgnoreSpacingAdjustments; }
+        }
+        [SerializeField]
+        private bool m_IgnoreSpacingAdjustments = false;
+
+        public KerningPair()
+        {
+            m_FirstGlyph = 0;
+            m_FirstGlyphAdjustments = new GlyphValueRecord_Legacy();
+
+            m_SecondGlyph = 0;
+            m_SecondGlyphAdjustments = new GlyphValueRecord_Legacy();
+        }
+
+        public KerningPair(uint left, uint right, float offset)
+        {
+            firstGlyph = left;
+            m_SecondGlyph = right;
+            xOffset = offset;
+        }
+
+        public KerningPair(uint firstGlyph, GlyphValueRecord_Legacy firstGlyphAdjustments, uint secondGlyph, GlyphValueRecord_Legacy secondGlyphAdjustments)
+        {
+            m_FirstGlyph = firstGlyph;
+            m_FirstGlyphAdjustments = firstGlyphAdjustments;
+            m_SecondGlyph = secondGlyph;
+            m_SecondGlyphAdjustments = secondGlyphAdjustments;
+        }
+
+        internal void ConvertLegacyKerningData()
+        {
+            m_FirstGlyphAdjustments.xAdvance = xOffset;
+            //xOffset = 0;
+        }
+
+    }
+
+    [Serializable]
+    public class KerningTable
+    {
+        public List<KerningPair> kerningPairs;
+
+        public KerningTable()
+        {
+            kerningPairs = new List<KerningPair>();
+        }
+
+
+        public void AddKerningPair()
+        {
+            if (kerningPairs.Count == 0)
+            {
+                kerningPairs.Add(new KerningPair(0, 0, 0));
+            }
+            else
+            {
+                uint left = kerningPairs.Last().firstGlyph;
+                uint right = kerningPairs.Last().secondGlyph;
+                float xoffset = kerningPairs.Last().xOffset;
+
+                kerningPairs.Add(new KerningPair(left, right, xoffset));
+            }
+        }
+
+
+        /// <summary>
+        /// Add Kerning Pair
+        /// </summary>
+        /// <param name="first">First glyph</param>
+        /// <param name="second">Second glyph</param>
+        /// <param name="offset">xAdvance value</param>
+        /// <returns></returns>
+        public int AddKerningPair(uint first, uint second, float offset)
+        {
+            int index = kerningPairs.FindIndex(item => item.firstGlyph == first && item.secondGlyph == second);
+
+            if (index == -1)
+            {
+                kerningPairs.Add(new KerningPair(first, second, offset));
+                return 0;
+            }
+
+            // Return -1 if Kerning Pair already exists.
+            return -1;
+        }
+
+        /// <summary>
+        /// Add Glyph pair adjustment record
+        /// </summary>
+        /// <param name="firstGlyph">The first glyph</param>
+        /// <param name="firstGlyphAdjustments">Adjustment record for the first glyph</param>
+        /// <param name="secondGlyph">The second glyph</param>
+        /// <param name="secondGlyphAdjustments">Adjustment record for the second glyph</param>
+        /// <returns></returns>
+        public int AddGlyphPairAdjustmentRecord(uint first, GlyphValueRecord_Legacy firstAdjustments, uint second, GlyphValueRecord_Legacy secondAdjustments)
+        {
+            int index = kerningPairs.FindIndex(item => item.firstGlyph == first && item.secondGlyph == second);
+
+            if (index == -1)
+            {
+                kerningPairs.Add(new KerningPair(first, firstAdjustments, second, secondAdjustments));
+                return 0;
+            }
+
+            // Return -1 if Kerning Pair already exists.
+            return -1;
+        }
+
+        public void RemoveKerningPair(int left, int right)
+        {
+            int index = kerningPairs.FindIndex(item => item.firstGlyph == left && item.secondGlyph == right);
+
+            if (index != -1)
+                kerningPairs.RemoveAt(index);
+        }
+
+
+        public void RemoveKerningPair(int index)
+        {
+            kerningPairs.RemoveAt(index);
+        }
+
+
+        public void SortKerningPairs()
+        {
+            // Sort List of Kerning Info
+            if (kerningPairs.Count > 0)
+                kerningPairs = kerningPairs.OrderBy(s => s.firstGlyph).ThenBy(s => s.secondGlyph).ToList();
+        }
+    }
+
+
+    public static class TMP_FontUtilities
+    {
+        private static List<int> k_searchedFontAssets;
+
+        /// <summary>
+        /// Search through the given font and its fallbacks for the specified character.
+        /// </summary>
+        /// <param name="font">The font asset to search for the given character.</param>
+        /// <param name="unicode">The character to find.</param>
+        /// <param name="character">out parameter containing the glyph for the specified character (if found).</param>
+        /// <returns></returns>
+        public static TMP_FontAsset SearchForCharacter(TMP_FontAsset font, uint unicode, out TMP_Character character)
+        {
+            if (k_searchedFontAssets == null)
+                k_searchedFontAssets = new List<int>();
+
+            k_searchedFontAssets.Clear();
+
+            return SearchForCharacterInternal(font, unicode, out character);
+        }
+
+
+        /// <summary>
+        /// Search through the given list of fonts and their possible fallbacks for the specified character.
+        /// </summary>
+        /// <param name="fonts"></param>
+        /// <param name="unicode"></param>
+        /// <param name="character"></param>
+        /// <returns></returns>
+        public static TMP_FontAsset SearchForCharacter(List<TMP_FontAsset> fonts, uint unicode, out TMP_Character character)
+        {
+            return SearchForCharacterInternal(fonts, unicode, out character);
+        }
+
+
+        private static TMP_FontAsset SearchForCharacterInternal(TMP_FontAsset font, uint unicode, out TMP_Character character)
+        {
+            character = null;
+
+            if (font == null) return null;
+
+            if (font.characterLookupTable.TryGetValue(unicode, out character))
+            {
+                return font;
+            }
+            else if (font.fallbackFontAssetTable != null && font.fallbackFontAssetTable.Count > 0)
+            {
+                for (int i = 0; i < font.fallbackFontAssetTable.Count && character == null; i++)
+                {
+                    TMP_FontAsset temp = font.fallbackFontAssetTable[i];
+                    if (temp == null) continue;
+
+                    int id = temp.GetInstanceID();
+
+                    // Skip over the fallback font asset in the event it is null or if already searched.
+                    if (k_searchedFontAssets.Contains(id)) continue;
+
+                    // Add to list of font assets already searched.
+                    k_searchedFontAssets.Add(id);
+
+                    temp = SearchForCharacterInternal(temp, unicode, out character);
+
+                    if (temp != null)
+                        return temp;
+                }
+            }
+
+            return null;
+        }
+
+
+        private static TMP_FontAsset SearchForCharacterInternal(List<TMP_FontAsset> fonts, uint unicode, out TMP_Character character)
+        {
+            character = null;
+
+            if (fonts != null && fonts.Count > 0)
+            {
+                for (int i = 0; i < fonts.Count; i++)
+                {
+                    TMP_FontAsset fontAsset = SearchForCharacterInternal(fonts[i], unicode, out character);
+
+                    if (fontAsset != null)
+                        return fontAsset;
+                }
+            }
+
+            return null;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..84e3688442825b80b4223e416dae24c377d2e4a1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetCommon.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f695b5f9415c40b39ae877eaff41c96e
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0ccc130aa84be8431448bf9086b1d933ddaaf3d1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs
@@ -0,0 +1,360 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+
+
+namespace TMPro
+{
+    public class TMP_FontAssetUtilities
+    {
+        private static readonly TMP_FontAssetUtilities s_Instance = new TMP_FontAssetUtilities();
+
+        /// <summary>
+        /// Default constructor
+        /// </summary>
+        static TMP_FontAssetUtilities() { }
+
+
+        /// <summary>
+        /// Get a singleton instance of the Font Asset Utilities class.
+        /// </summary>
+        public static TMP_FontAssetUtilities instance
+        {
+            get { return s_Instance; }
+        }
+
+
+        /// <summary>
+        /// List containing instance ID of font assets already searched.
+        /// </summary>
+        private static List<int> k_SearchedFontAssets;
+
+
+        /// <summary>
+        /// Returns the text element (character) for the given unicode value taking into consideration the requested font style and weight.
+        /// Function searches the source font asset, its list of font assets assigned as alternative typefaces and potentially its fallbacks.
+        /// The font asset out parameter contains a reference to the font asset containing the character.
+        /// The typeface type indicates whether the returned font asset is the source font asset, an alternative typeface or fallback font asset.
+        /// </summary>
+        /// <param name="unicode">The unicode value of the requested character</param>
+        /// <param name="sourceFontAsset">The font asset to be searched</param>
+        /// <param name="includeFallbacks">Include the fallback font assets in the search</param>
+        /// <param name="fontStyle">The font style</param>
+        /// <param name="fontWeight">The font weight</param>
+        /// <param name="type">Indicates if the OUT font asset is an alternative typeface or fallback font asset</param>
+        /// <param name="fontAsset">The font asset that contains the requested character</param>
+        /// <returns></returns>
+        public static TMP_Character GetCharacterFromFontAsset(uint unicode, TMP_FontAsset sourceFontAsset, bool includeFallbacks, FontStyles fontStyle, FontWeight fontWeight, out bool isAlternativeTypeface, out TMP_FontAsset fontAsset)
+        {
+            if (includeFallbacks)
+            {
+                if (k_SearchedFontAssets == null)
+                    k_SearchedFontAssets = new List<int>();
+                else
+                    k_SearchedFontAssets.Clear();
+            }
+
+            return GetCharacterFromFontAsset_Internal(unicode, sourceFontAsset, includeFallbacks, fontStyle, fontWeight, out isAlternativeTypeface, out fontAsset);
+        }
+
+
+        /// <summary>
+        /// Internal function returning the text element character for the given unicode value taking into consideration the font style and weight.
+        /// Function searches the source font asset, list of font assets assigned as alternative typefaces and list of fallback font assets.
+        /// </summary>
+        private static TMP_Character GetCharacterFromFontAsset_Internal(uint unicode, TMP_FontAsset sourceFontAsset, bool includeFallbacks, FontStyles fontStyle, FontWeight fontWeight, out bool isAlternativeTypeface, out TMP_FontAsset fontAsset)
+        {
+            fontAsset = null;
+            isAlternativeTypeface = false;
+            TMP_Character characterData = null;
+
+            #region FONT WEIGHT AND FONT STYLE HANDLING
+            // Determine if a font weight or style is used. If so check if an alternative typeface is assigned for the given weight and / or style.
+            bool isItalic = (fontStyle & FontStyles.Italic) == FontStyles.Italic;
+
+            if (isItalic || fontWeight != FontWeight.Regular)
+            {
+                // Get reference to the font weight pairs of the given font asset.
+                TMP_FontWeightPair[] fontWeights = sourceFontAsset.fontWeightTable;
+
+                int fontWeightIndex = 4;
+                switch (fontWeight)
+                {
+                    case FontWeight.Thin:
+                        fontWeightIndex = 1;
+                        break;
+                    case FontWeight.ExtraLight:
+                        fontWeightIndex = 2;
+                        break;
+                    case FontWeight.Light:
+                        fontWeightIndex = 3;
+                        break;
+                    case FontWeight.Regular:
+                        fontWeightIndex = 4;
+                        break;
+                    case FontWeight.Medium:
+                        fontWeightIndex = 5;
+                        break;
+                    case FontWeight.SemiBold:
+                        fontWeightIndex = 6;
+                        break;
+                    case FontWeight.Bold:
+                        fontWeightIndex = 7;
+                        break;
+                    case FontWeight.Heavy:
+                        fontWeightIndex = 8;
+                        break;
+                    case FontWeight.Black:
+                        fontWeightIndex = 9;
+                        break;
+                }
+
+                fontAsset = isItalic ? fontWeights[fontWeightIndex].italicTypeface : fontWeights[fontWeightIndex].regularTypeface;
+
+                if (fontAsset != null)
+                {
+                    if (fontAsset.characterLookupTable.TryGetValue(unicode, out characterData))
+                    {
+                        isAlternativeTypeface = true;
+
+                        return characterData;
+                    }
+                    else if (fontAsset.atlasPopulationMode == AtlasPopulationMode.Dynamic)
+                    {
+                        if (fontAsset.TryAddCharacterInternal(unicode, out characterData))
+                        {
+                            isAlternativeTypeface = true;
+
+                            return characterData;
+                        }
+
+                        // Check if the source font file contains the requested character.
+                        //if (TryGetCharacterFromFontFile(unicode, fontAsset, out characterData))
+                        //{
+                        //    isAlternativeTypeface = true;
+
+                        //    return characterData;
+                        //}
+
+                        // If we find the requested character, we add it to the font asset character table
+                        // and return its character data.
+                        // We also add this character to the list of characters we will need to add to the font atlas.
+                        // We assume the font atlas has room otherwise this font asset should not be marked as dynamic.
+                        // Alternatively, we could also add multiple pages of font atlas textures (feature consideration).
+                    }
+
+                    // At this point, we were not able to find the requested character in the alternative typeface
+                    // so we check the source font asset and its potential fallbacks.
+                }
+
+            }
+            #endregion
+
+            // Search the source font asset for the requested character.
+            if (sourceFontAsset.characterLookupTable.TryGetValue(unicode, out characterData))
+            {
+                // We were able to locate the requested character in the given font asset.
+                fontAsset = sourceFontAsset;
+
+                return characterData;
+            }
+            else if (sourceFontAsset.atlasPopulationMode == AtlasPopulationMode.Dynamic)
+            {
+                if (sourceFontAsset.TryAddCharacterInternal(unicode, out characterData))
+                {
+                    fontAsset = sourceFontAsset;
+
+                    return characterData;
+                }
+
+                //// Check if the source font file contains the requested character.
+                //if (TryGetCharacterFromFontFile(unicode, sourceFontAsset, out characterData))
+                //{
+                //    fontAsset = sourceFontAsset;
+
+                //    //fontAsset.AddCharacterToRasterList(unicode);
+
+                //    return characterData;
+                //}
+
+                // If we find the requested character, we add it to the font asset character table
+                // and return its character data.
+                // We also add this character to the list of characters we will need to add to the font atlas.
+                // We assume the font atlas has room otherwise this font asset should not be marked as dynamic.
+                // Alternatively, we could also add multiple pages of font atlas textures (feature consideration)
+            }
+
+            // Search fallback font assets if we still don't have a valid character and include fallback is set to true.
+            if (characterData == null && includeFallbacks && sourceFontAsset.fallbackFontAssetTable != null)
+            {
+                // Get reference to the list of fallback font assets.
+                List<TMP_FontAsset> fallbackFontAssets = sourceFontAsset.fallbackFontAssetTable;
+                int fallbackCount = fallbackFontAssets.Count;
+
+                if (fallbackFontAssets != null && fallbackCount > 0)
+                {
+                    for (int i = 0; i < fallbackCount && characterData == null; i++)
+                    {
+                        TMP_FontAsset temp = fallbackFontAssets[i];
+
+                        if (temp == null) continue;
+
+                        int id = temp.GetInstanceID();
+
+                        // Skip over the fallback font asset in the event it is null or if already searched.
+                        if (k_SearchedFontAssets.Contains(id))
+                            continue;
+
+                        // Add to list of font assets already searched.
+                        k_SearchedFontAssets.Add(id);
+
+                        characterData = GetCharacterFromFontAsset_Internal(unicode, temp, includeFallbacks, fontStyle, fontWeight, out isAlternativeTypeface, out fontAsset);
+
+                        if (characterData != null)
+                        {
+                            return characterData;
+                        }
+                    }
+                }
+
+            }
+
+            return null;
+        }
+
+
+        /// <summary>
+        /// Returns the text element (character) for the given unicode value taking into consideration the requested font style and weight.
+        /// Function searches the provided list of font assets, the list of font assets assigned as alternative typefaces to them as well as their fallbacks.
+        /// The font asset out parameter contains a reference to the font asset containing the character.
+        /// The typeface type indicates whether the returned font asset is the source font asset, an alternative typeface or fallback font asset.
+        /// </summary>
+        /// <param name="unicode">The unicode value of the requested character</param>
+        /// <param name="fontAssets">The list of font assets to search</param>
+        /// <param name="includeFallbacks">Determines if the fallback of each font assets on the list will be searched</param>
+        /// <param name="fontStyle">The font style</param>
+        /// <param name="fontWeight">The font weight</param>
+        /// <param name="type">Determines if the OUT font asset is an alternative typeface or fallback font asset</param>
+        /// <param name="fontAsset">The font asset that contains the requested character</param>
+        /// <returns></returns>
+        public static TMP_Character GetCharacterFromFontAssets(uint unicode, List<TMP_FontAsset> fontAssets, bool includeFallbacks, FontStyles fontStyle, FontWeight fontWeight, out bool isAlternativeTypeface, out TMP_FontAsset fontAsset)
+        {
+            isAlternativeTypeface = false;
+
+            // Make sure font asset list is valid
+            if (fontAssets == null || fontAssets.Count == 0)
+            {
+                fontAsset = null;
+                return null;
+            }
+
+            if (includeFallbacks)
+            {
+                if (k_SearchedFontAssets == null)
+                    k_SearchedFontAssets = new List<int>();
+                else
+                    k_SearchedFontAssets.Clear();
+            }
+
+            int fontAssetCount = fontAssets.Count;
+
+            for (int i = 0; i < fontAssetCount; i++)
+            {
+                if (fontAssets[i] == null) continue;
+
+                TMP_Character characterData = GetCharacterFromFontAsset_Internal(unicode, fontAssets[i], includeFallbacks, fontStyle, fontWeight, out isAlternativeTypeface, out fontAsset);
+
+                if (characterData != null)
+                    return characterData;
+            }
+
+            fontAsset = null;
+
+            return null;
+        }
+
+
+        // =====================================================================
+        // FONT ENGINE & FONT FILE MANAGEMENT - Fields, Properties and Functions
+        // =====================================================================
+
+        private static bool k_IsFontEngineInitialized;
+
+
+        private static bool TryGetCharacterFromFontFile(uint unicode, TMP_FontAsset fontAsset, out TMP_Character character)
+        {
+            character = null;
+
+            // Initialize Font Engine library if not already initialized
+            if (k_IsFontEngineInitialized == false)
+            {
+                FontEngineError error = FontEngine.InitializeFontEngine();
+
+                if (error == 0)
+                    k_IsFontEngineInitialized = true;
+            }
+
+            // Load the font face for the given font asset.
+            // TODO: Add manager to keep track of which font faces are currently loaded.
+            FontEngine.LoadFontFace(fontAsset.sourceFontFile, fontAsset.faceInfo.pointSize);
+
+            Glyph glyph = null;
+            uint glyphIndex = FontEngine.GetGlyphIndex(unicode);
+
+            // Check if glyph is already contained in the font asset as the same glyph might be referenced by multiple character.
+            if (fontAsset.glyphLookupTable.TryGetValue(glyphIndex, out glyph))
+            {
+                character = fontAsset.AddCharacter_Internal(unicode, glyph);
+
+                return true;
+            }
+
+            GlyphLoadFlags glyphLoadFlags = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_HINTED) == GlyphRasterModes.RASTER_MODE_HINTED ? GlyphLoadFlags.LOAD_RENDER : GlyphLoadFlags.LOAD_RENDER | GlyphLoadFlags.LOAD_NO_HINTING;
+
+            if (FontEngine.TryGetGlyphWithUnicodeValue(unicode, glyphLoadFlags, out glyph))
+            {
+                // Add new character to font asset (if needed)
+                character = fontAsset.AddCharacter_Internal(unicode, glyph);
+
+                return true;
+            }
+
+            return false;
+        }
+
+
+        public static bool TryGetGlyphFromFontFile(uint glyphIndex, TMP_FontAsset fontAsset, out Glyph glyph)
+        {
+            glyph = null;
+
+            // Initialize Font Engine library if not already initialized
+            if (k_IsFontEngineInitialized == false)
+            {
+                FontEngineError error = FontEngine.InitializeFontEngine();
+
+                if (error == 0)
+                    k_IsFontEngineInitialized = true;
+            }
+
+            // Load the font face for the given font asset.
+            // TODO: Add manager to keep track of which font faces are currently loaded.
+            FontEngine.LoadFontFace(fontAsset.sourceFontFile, fontAsset.faceInfo.pointSize);
+
+            GlyphLoadFlags glyphLoadFlags = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_HINTED) == GlyphRasterModes.RASTER_MODE_HINTED ? GlyphLoadFlags.LOAD_RENDER : GlyphLoadFlags.LOAD_RENDER | GlyphLoadFlags.LOAD_NO_HINTING;
+
+            if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out glyph))
+            {
+                // Add new glyph to font asset (if needed)
+                //fontAsset.AddGlyph_Internal(glyph);
+
+                return true;
+            }
+
+            return false;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8c48f2a985f4c5541f969af1d9688e24b7b9c60c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontAssetUtilities.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0a017569bfe174e4890797b4d64cbabc
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a56a4fffb330a5a8c3e2e63b87995be55bc31b83
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Table that contains the various font features available for the given font asset.
+    /// </summary>
+    [Serializable]
+    public class TMP_FontFeatureTable
+    {
+        /// <summary>
+        /// List that contains the glyph pair adjustment records.
+        /// </summary>
+        internal List<TMP_GlyphPairAdjustmentRecord> glyphPairAdjustmentRecords
+        {
+            get { return m_GlyphPairAdjustmentRecords; }
+            set { m_GlyphPairAdjustmentRecords = value; }
+        }
+        [SerializeField]
+        internal List<TMP_GlyphPairAdjustmentRecord> m_GlyphPairAdjustmentRecords;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        internal Dictionary<long, TMP_GlyphPairAdjustmentRecord> m_GlyphPairAdjustmentRecordLookupDictionary;
+
+        // =============================================
+        // Constructor(s)
+        // =============================================
+
+        public TMP_FontFeatureTable()
+        {
+            m_GlyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>();
+            m_GlyphPairAdjustmentRecordLookupDictionary = new Dictionary<long, TMP_GlyphPairAdjustmentRecord>();
+        }
+
+        // =============================================
+        // Utility Functions
+        // =============================================
+
+        /// <summary>
+        /// Sort the glyph pair adjustment records by glyph index.
+        /// </summary>
+        public void SortGlyphPairAdjustmentRecords()
+        {
+            // Sort List of Kerning Info
+            if (m_GlyphPairAdjustmentRecords.Count > 0)
+                m_GlyphPairAdjustmentRecords = m_GlyphPairAdjustmentRecords.OrderBy(s => s.firstAdjustmentRecord.glyphIndex).ThenBy(s => s.secondAdjustmentRecord.glyphIndex).ToList();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..39f3111551b11fb378a0d5db0fdeffce26e9a29b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeatureTable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ea9f573d4b800a49b9d83a1f61c0a88
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs
new file mode 100644
index 0000000000000000000000000000000000000000..b30a74ac363e85c3429bb902b52b1a2033fe4bc9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.TextCore.LowLevel;
+
+
+namespace TMPro
+{
+    public enum FontFeatureLookupFlags
+    {
+        IgnoreLigatures             =   0x004,
+        IgnoreSpacingAdjustments    =   0x100,
+    }
+
+    /// <summary>
+    /// The values used to adjust the position of a glyph or set of glyphs.
+    /// </summary>
+    [Serializable]
+    public struct TMP_GlyphValueRecord
+    {
+        /// <summary>
+        /// The positional adjustment affecting the horizontal bearing X of the glyph.
+        /// </summary>
+        public float xPlacement { get { return m_XPlacement; } set { m_XPlacement = value; } }
+
+        /// <summary>
+        /// The positional adjustment affecting the horizontal bearing Y of the glyph.
+        /// </summary>
+        public float yPlacement { get { return m_YPlacement; } set { m_YPlacement = value; } }
+
+        /// <summary>
+        /// The positional adjustment affecting the horizontal advance of the glyph.
+        /// </summary>
+        public float xAdvance { get { return m_XAdvance; } set { m_XAdvance = value; } }
+
+        /// <summary>
+        /// The positional adjustment affecting the vertical advance of the glyph.
+        /// </summary>
+        public float yAdvance { get { return m_YAdvance; } set { m_YAdvance = value; } }
+
+        // =============================================
+        // Private backing fields for public properties.
+        // =============================================
+
+        [SerializeField]
+        private float m_XPlacement;
+
+        [SerializeField]
+        private float m_YPlacement;
+
+        [SerializeField]
+        private float m_XAdvance;
+
+        [SerializeField]
+        private float m_YAdvance;
+
+
+        /// <summary>
+        /// Constructor
+        /// </summary>
+        /// <param name="xPlacement">The positional adjustment affecting the horizontal bearing X of the glyph.</param>
+        /// <param name="yPlacement">The positional adjustment affecting the horizontal bearing Y of the glyph.</param>
+        /// <param name="xAdvance">The positional adjustment affecting the horizontal advance of the glyph.</param>
+        /// <param name="yAdvance">The positional adjustment affecting the vertical advance of the glyph.</param>
+        public TMP_GlyphValueRecord(float xPlacement, float yPlacement, float xAdvance, float yAdvance)
+        {
+            m_XPlacement = xPlacement;
+            m_YPlacement = yPlacement;
+            m_XAdvance = xAdvance;
+            m_YAdvance = yAdvance;
+        }
+
+        internal TMP_GlyphValueRecord(GlyphValueRecord_Legacy valueRecord)
+        {
+            m_XPlacement = valueRecord.xPlacement;
+            m_YPlacement = valueRecord.yPlacement;
+            m_XAdvance = valueRecord.xAdvance;
+            m_YAdvance = valueRecord.yAdvance;
+        }
+
+        internal TMP_GlyphValueRecord(GlyphValueRecord valueRecord)
+        {
+            m_XPlacement = valueRecord.xPlacement;
+            m_YPlacement = valueRecord.yPlacement;
+            m_XAdvance = valueRecord.xAdvance;
+            m_YAdvance = valueRecord.yAdvance;
+        }
+
+        public static TMP_GlyphValueRecord operator +(TMP_GlyphValueRecord a, TMP_GlyphValueRecord b)
+        {
+            TMP_GlyphValueRecord c;
+            c.m_XPlacement = a.xPlacement + b.xPlacement;
+            c.m_YPlacement = a.yPlacement + b.yPlacement;
+            c.m_XAdvance = a.xAdvance + b.xAdvance;
+            c.m_YAdvance = a.yAdvance + b.yAdvance;
+
+            return c;
+        }
+    }
+
+    /// <summary>
+    /// The positional adjustment values of a glyph.
+    /// </summary>
+    [Serializable]
+    public struct TMP_GlyphAdjustmentRecord
+    {
+        /// <summary>
+        /// The index of the glyph in the source font file.
+        /// </summary>
+        public uint glyphIndex { get { return m_GlyphIndex; } set { m_GlyphIndex = value; } }
+
+        /// <summary>
+        /// The GlyphValueRecord contains the positional adjustments of the glyph.
+        /// </summary>
+        public TMP_GlyphValueRecord glyphValueRecord { get { return m_GlyphValueRecord; } set { m_GlyphValueRecord = value; } }
+
+        // =============================================
+        // Private backing fields for public properties.
+        // =============================================
+
+        [SerializeField]
+        private uint m_GlyphIndex;
+
+        [SerializeField]
+        private TMP_GlyphValueRecord m_GlyphValueRecord;
+
+        /// <summary>
+        /// Constructor
+        /// </summary>
+        /// <param name="glyphIndex">The index of the glyph in the source font file.</param>
+        /// <param name="glyphValueRecord">The GlyphValueRecord contains the positional adjustments of the glyph.</param>
+        public TMP_GlyphAdjustmentRecord(uint glyphIndex, TMP_GlyphValueRecord glyphValueRecord)
+        {
+            m_GlyphIndex = glyphIndex;
+            m_GlyphValueRecord = glyphValueRecord;
+        }
+
+        internal TMP_GlyphAdjustmentRecord(GlyphAdjustmentRecord adjustmentRecord)
+        {
+            m_GlyphIndex = adjustmentRecord.glyphIndex;
+            m_GlyphValueRecord = new TMP_GlyphValueRecord(adjustmentRecord.glyphValueRecord);
+        }
+    }
+
+    /// <summary>
+    /// The positional adjustment values for a pair of glyphs.
+    /// </summary>
+    [Serializable]
+    public class TMP_GlyphPairAdjustmentRecord
+    {
+        /// <summary>
+        /// Contains the positional adjustment values for the first glyph.
+        /// </summary>
+        public TMP_GlyphAdjustmentRecord firstAdjustmentRecord { get { return m_FirstAdjustmentRecord; } set { m_FirstAdjustmentRecord = value; } }
+
+        /// <summary>
+        /// Contains the positional adjustment values for the second glyph.
+        /// </summary>
+        public TMP_GlyphAdjustmentRecord secondAdjustmentRecord { get { return m_SecondAdjustmentRecord; } set { m_SecondAdjustmentRecord = value; } }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public FontFeatureLookupFlags featureLookupFlags { get { return m_FeatureLookupFlags; } set { m_FeatureLookupFlags = value; } }
+
+        // =============================================
+        // Private backing fields for public properties.
+        // =============================================
+
+        [SerializeField]
+        private TMP_GlyphAdjustmentRecord m_FirstAdjustmentRecord;
+
+        [SerializeField]
+        private TMP_GlyphAdjustmentRecord m_SecondAdjustmentRecord;
+
+        [SerializeField]
+        private FontFeatureLookupFlags m_FeatureLookupFlags;
+
+        /// <summary>
+        /// Constructor
+        /// </summary>
+        /// <param name="firstAdjustmentRecord">First glyph adjustment record.</param>
+        /// <param name="secondAdjustmentRecord">Second glyph adjustment record.</param>
+        public TMP_GlyphPairAdjustmentRecord(TMP_GlyphAdjustmentRecord firstAdjustmentRecord, TMP_GlyphAdjustmentRecord secondAdjustmentRecord)
+        {
+            m_FirstAdjustmentRecord = firstAdjustmentRecord;
+            m_SecondAdjustmentRecord = secondAdjustmentRecord;
+        }
+
+        /// <summary>
+        /// Internal constructor 
+        /// </summary>
+        /// <param name="firstAdjustmentRecord"></param>
+        /// <param name="secondAdjustmentRecord"></param>
+        internal TMP_GlyphPairAdjustmentRecord(GlyphPairAdjustmentRecord glyphPairAdjustmentRecord)
+        {
+            m_FirstAdjustmentRecord = new TMP_GlyphAdjustmentRecord(glyphPairAdjustmentRecord.firstAdjustmentRecord);
+            m_SecondAdjustmentRecord = new TMP_GlyphAdjustmentRecord(glyphPairAdjustmentRecord.secondAdjustmentRecord);
+        }
+    }
+
+    public struct GlyphPairKey
+    {
+        public uint firstGlyphIndex;
+        public uint secondGlyphIndex;
+        public long key;
+
+        public GlyphPairKey(uint firstGlyphIndex, uint secondGlyphIndex)
+        {
+            this.firstGlyphIndex = firstGlyphIndex;
+            this.secondGlyphIndex = secondGlyphIndex;
+            key = (long)secondGlyphIndex << 32 | firstGlyphIndex;
+        }
+
+        internal GlyphPairKey(TMP_GlyphPairAdjustmentRecord record)
+        {
+            firstGlyphIndex = record.firstAdjustmentRecord.glyphIndex;
+            secondGlyphIndex = record.secondAdjustmentRecord.glyphIndex;
+            key = (long)secondGlyphIndex << 32 | firstGlyphIndex;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad2b50201acc2cfb7903542bad8cd62e3ab8a79b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_FontFeaturesCommon.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 27df3b12f30d0b74a9b10a3968c402ff
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6cacfa268167cd2fcf5f542789792b7f32b5eb3a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs
@@ -0,0 +1,4155 @@
+//#define TMP_DEBUG_MODE
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.RegularExpressions;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+using UnityEngine.EventSystems;
+using UnityEngine.Serialization;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Editable text input field.
+    /// </summary>
+    [AddComponentMenu("UI/TextMeshPro - Input Field", 11)]
+    public class TMP_InputField : Selectable,
+        IUpdateSelectedHandler,
+        IBeginDragHandler,
+        IDragHandler,
+        IEndDragHandler,
+        IPointerClickHandler,
+        ISubmitHandler,
+        ICanvasElement,
+        ILayoutElement,
+        IScrollHandler
+    {
+
+        // Setting the content type acts as a shortcut for setting a combination of InputType, CharacterValidation, LineType, and TouchScreenKeyboardType
+        public enum ContentType
+        {
+            Standard,
+            Autocorrected,
+            IntegerNumber,
+            DecimalNumber,
+            Alphanumeric,
+            Name,
+            EmailAddress,
+            Password,
+            Pin,
+            Custom
+        }
+
+        public enum InputType
+        {
+            Standard,
+            AutoCorrect,
+            Password,
+        }
+
+        public enum CharacterValidation
+        {
+            None,
+            Digit,
+            Integer,
+            Decimal,
+            Alphanumeric,
+            Name,
+            Regex,
+            EmailAddress,
+            CustomValidator
+        }
+
+        public enum LineType
+        {
+            SingleLine,
+            MultiLineSubmit,
+            MultiLineNewline
+        }
+
+        public delegate char OnValidateInput(string text, int charIndex, char addedChar);
+
+        [Serializable]
+        public class SubmitEvent : UnityEvent<string> { }
+
+        [Serializable]
+        public class OnChangeEvent : UnityEvent<string> { }
+
+        [Serializable]
+        public class SelectionEvent : UnityEvent<string> { }
+
+        [Serializable]
+        public class TextSelectionEvent : UnityEvent<string, int, int> { }
+
+        [Serializable]
+        public class TouchScreenKeyboardEvent : UnityEvent<TouchScreenKeyboard.Status> { }
+
+        protected TouchScreenKeyboard m_SoftKeyboard;
+        static private readonly char[] kSeparators = { ' ', '.', ',', '\t', '\r', '\n' };
+
+        #region Exposed properties
+        /// <summary>
+        /// Text Text used to display the input's value.
+        /// </summary>
+
+        [SerializeField]
+        protected RectTransform m_TextViewport;
+
+        //Vector3[] m_ViewportCorners = new Vector3[4];
+
+        [SerializeField]
+        protected TMP_Text m_TextComponent;
+
+        protected RectTransform m_TextComponentRectTransform;
+
+        [SerializeField]
+        protected Graphic m_Placeholder;
+
+        [SerializeField]
+        protected Scrollbar m_VerticalScrollbar;
+
+        [SerializeField]
+        protected TMP_ScrollbarEventHandler m_VerticalScrollbarEventHandler;
+        //private bool m_ForceDeactivation;
+
+        private bool m_IsDrivenByLayoutComponents = false;
+
+        /// <summary>
+        /// Used to keep track of scroll position
+        /// </summary>
+        private float m_ScrollPosition;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        [SerializeField]
+        protected float m_ScrollSensitivity = 1.0f;
+
+        //[SerializeField]
+        //protected TMP_Text m_PlaceholderTextComponent;
+
+        [SerializeField]
+        private ContentType m_ContentType = ContentType.Standard;
+
+        /// <summary>
+        /// Type of data expected by the input field.
+        /// </summary>
+        [SerializeField]
+        private InputType m_InputType = InputType.Standard;
+
+        /// <summary>
+        /// The character used to hide text in password field.
+        /// </summary>
+        [SerializeField]
+        private char m_AsteriskChar = '*';
+
+        /// <summary>
+        /// Keyboard type applies to mobile keyboards that get shown.
+        /// </summary>
+        [SerializeField]
+        private TouchScreenKeyboardType m_KeyboardType = TouchScreenKeyboardType.Default;
+
+        [SerializeField]
+        private LineType m_LineType = LineType.SingleLine;
+
+        /// <summary>
+        /// Should hide mobile input field part of the virtual keyboard.
+        /// </summary>
+        [SerializeField]
+        private bool m_HideMobileInput = false;
+
+        /// <summary>
+        /// Should hide soft / virtual keyboard.
+        /// </summary>
+        [SerializeField]
+        private bool m_HideSoftKeyboard = false;
+
+        /// <summary>
+        /// What kind of validation to use with the input field's data.
+        /// </summary>
+        [SerializeField]
+        private CharacterValidation m_CharacterValidation = CharacterValidation.None;
+
+        /// <summary>
+        /// The Regex expression used for validating the text input.
+        /// </summary>
+        [SerializeField]
+        private string m_RegexValue = string.Empty;
+
+        /// <summary>
+        /// The point sized used by the placeholder and input text object.
+        /// </summary>
+        [SerializeField]
+        private float m_GlobalPointSize = 14;
+
+        /// <summary>
+        /// Maximum number of characters allowed before input no longer works.
+        /// </summary>
+        [SerializeField]
+        private int m_CharacterLimit = 0;
+
+        /// <summary>
+        /// Event delegates triggered when the input field submits its data.
+        /// </summary>
+        [SerializeField]
+        private SubmitEvent m_OnEndEdit = new SubmitEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the input field submits its data.
+        /// </summary>
+        [SerializeField]
+        private SubmitEvent m_OnSubmit = new SubmitEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the input field is focused.
+        /// </summary>
+        [SerializeField]
+        private SelectionEvent m_OnSelect = new SelectionEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the input field focus is lost.
+        /// </summary>
+        [SerializeField]
+        private SelectionEvent m_OnDeselect = new SelectionEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the text is selected / highlighted.
+        /// </summary>
+        [SerializeField]
+        private TextSelectionEvent m_OnTextSelection = new TextSelectionEvent();
+
+        /// <summary>
+        /// Event delegates triggered when text is no longer select / highlighted.
+        /// </summary>
+        [SerializeField]
+        private TextSelectionEvent m_OnEndTextSelection = new TextSelectionEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the input field changes its data.
+        /// </summary>
+        [SerializeField]
+        private OnChangeEvent m_OnValueChanged = new OnChangeEvent();
+
+        /// <summary>
+        /// Event delegates triggered when the status of the TouchScreenKeyboard changes.
+        /// </summary>
+        [SerializeField]
+        private TouchScreenKeyboardEvent m_OnTouchScreenKeyboardStatusChanged = new TouchScreenKeyboardEvent();
+
+        /// <summary>
+        /// Custom validation callback.
+        /// </summary>
+        [SerializeField]
+        private OnValidateInput m_OnValidateInput;
+
+        [SerializeField]
+        private Color m_CaretColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f);
+
+        [SerializeField]
+        private bool m_CustomCaretColor = false;
+
+        [SerializeField]
+        private Color m_SelectionColor = new Color(168f / 255f, 206f / 255f, 255f / 255f, 192f / 255f);
+
+        /// <summary>
+        /// Input field's value.
+        /// </summary>
+
+        [SerializeField]
+        [TextArea(5, 10)]
+        protected string m_Text = string.Empty;
+
+        [SerializeField]
+        [Range(0f, 4f)]
+        private float m_CaretBlinkRate = 0.85f;
+
+        [SerializeField]
+        [Range(1, 5)]
+        private int m_CaretWidth = 1;
+
+        [SerializeField]
+        private bool m_ReadOnly = false;
+
+        [SerializeField]
+        private bool m_RichText = true;
+
+        #endregion
+
+        protected int m_StringPosition = 0;
+        protected int m_StringSelectPosition = 0;
+        protected int m_CaretPosition = 0;
+        protected int m_CaretSelectPosition = 0;
+
+        private RectTransform caretRectTrans = null;
+        protected UIVertex[] m_CursorVerts = null;
+        private CanvasRenderer m_CachedInputRenderer;
+        private Vector2 m_LastPosition;
+
+        [NonSerialized]
+        protected Mesh m_Mesh;
+        private bool m_AllowInput = false;
+        //bool m_HasLostFocus = false;
+        private bool m_ShouldActivateNextUpdate = false;
+        private bool m_UpdateDrag = false;
+        private bool m_DragPositionOutOfBounds = false;
+        private const float kHScrollSpeed = 0.05f;
+        private const float kVScrollSpeed = 0.10f;
+        protected bool m_CaretVisible;
+        private Coroutine m_BlinkCoroutine = null;
+        private float m_BlinkStartTime = 0.0f;
+        private Coroutine m_DragCoroutine = null;
+        private string m_OriginalText = "";
+        private bool m_WasCanceled = false;
+        private bool m_HasDoneFocusTransition = false;
+        private WaitForSecondsRealtime m_WaitForSecondsRealtime;
+        private bool m_PreventCallback = false;
+
+        private bool m_TouchKeyboardAllowsInPlaceEditing = false;
+
+        private bool m_IsTextComponentUpdateRequired = false;
+        private bool m_IsScrollbarUpdateRequired = false;
+        private bool m_IsUpdatingScrollbarValues = false;
+
+        private bool m_isLastKeyBackspace = false;
+        private float m_PointerDownClickStartTime;
+        private float m_KeyDownStartTime;
+        private float m_DoubleClickDelay = 0.5f;
+
+        // Doesn't include dot and @ on purpose! See usage for details.
+        const string kEmailSpecialCharacters = "!#$%&'*+-/=?^_`{|}~";
+
+        private BaseInput inputSystem
+        {
+            get
+            {
+                if (EventSystem.current && EventSystem.current.currentInputModule)
+                    return EventSystem.current.currentInputModule.input;
+                return null;
+            }
+        }
+
+        private string compositionString
+        {
+            get { return inputSystem != null ? inputSystem.compositionString : Input.compositionString; }
+        }
+
+
+
+        protected TMP_InputField()
+        {
+            SetTextComponentWrapMode();
+        }
+
+        protected Mesh mesh
+        {
+            get
+            {
+                if (m_Mesh == null)
+                    m_Mesh = new Mesh();
+                return m_Mesh;
+            }
+        }
+
+        /// <summary>
+        /// Should the mobile keyboard input be hidden.
+        /// </summary>
+        public bool shouldHideMobileInput
+        {
+            get
+            {
+                switch (Application.platform)
+                {
+                    case RuntimePlatform.Android:
+                    case RuntimePlatform.IPhonePlayer:
+                    case RuntimePlatform.tvOS:
+                        return m_HideMobileInput;
+                    default:
+                        return true;
+                }
+            }
+
+            set
+            {
+                switch(Application.platform)
+                {
+                    case RuntimePlatform.Android:
+                    case RuntimePlatform.IPhonePlayer:
+                    case RuntimePlatform.tvOS:
+                        SetPropertyUtility.SetStruct(ref m_HideMobileInput, value);
+                        break;
+                    default:
+                        m_HideMobileInput = true;
+                        break;
+                }
+            }
+        }
+
+        public bool shouldHideSoftKeyboard
+        {
+            get
+            {
+                switch (Application.platform)
+                {
+                    case RuntimePlatform.Android:
+                    case RuntimePlatform.IPhonePlayer:
+                    case RuntimePlatform.tvOS:
+                    case RuntimePlatform.WSAPlayerX86:
+                    case RuntimePlatform.WSAPlayerX64:
+                    case RuntimePlatform.WSAPlayerARM:
+                        return m_HideSoftKeyboard;
+                    default:
+                        return true;
+                }
+            }
+
+            set
+            {
+                switch (Application.platform)
+                {
+                    case RuntimePlatform.Android:
+                    case RuntimePlatform.IPhonePlayer:
+                    case RuntimePlatform.tvOS:
+                    case RuntimePlatform.WSAPlayerX86:
+                    case RuntimePlatform.WSAPlayerX64:
+                    case RuntimePlatform.WSAPlayerARM:
+                        SetPropertyUtility.SetStruct(ref m_HideSoftKeyboard, value);
+                        break;
+                    default:
+                        m_HideSoftKeyboard = true;
+                        break;
+                }
+                
+                if (m_HideSoftKeyboard == true && m_SoftKeyboard != null && TouchScreenKeyboard.isSupported && m_SoftKeyboard.active)
+                {
+                    m_SoftKeyboard.active = false;
+                    m_SoftKeyboard = null;
+                }
+            }
+        }
+
+        private bool isKeyboardUsingEvents()
+        {
+            switch (Application.platform)
+            {
+                case RuntimePlatform.Android:
+                case RuntimePlatform.IPhonePlayer:
+                case RuntimePlatform.tvOS:
+                    return false;
+                default:
+                    return true;
+            }
+        }
+
+        /// <summary>
+        /// Input field's current text value. This is not necessarily the same as what is visible on screen.
+        /// </summary>
+        /// <remarks>
+        /// Note that null is invalid value  for InputField.text.
+        /// </remarks>
+        /// <example>
+        /// <code>
+        /// using UnityEngine;
+        /// using System.Collections;
+        /// using UnityEngine.UI; // Required when Using UI elements.
+        ///
+        /// public class Example : MonoBehaviour
+        /// {
+        ///     public InputField mainInputField;
+        ///
+        ///     public void Start()
+        ///     {
+        ///         mainInputField.text = "Enter Text Here...";
+        ///     }
+        /// }
+        /// </code>
+        /// </example>
+        public string text
+        {
+            get
+            {
+                return m_Text;
+            }
+            set
+            {
+                SetText(value);
+            }
+        }
+
+        /// <summary>
+        /// Set Input field's current text value without invoke onValueChanged. This is not necessarily the same as what is visible on screen.
+        /// </summary>
+        public void SetTextWithoutNotify(string input)
+        {
+            SetText(input, false);
+        }
+
+        void SetText(string value, bool sendCallback = true)
+        {
+            if (this.text == value)
+                return;
+
+            if (value == null)
+                value = "";
+
+            value = value.Replace("\0", string.Empty); // remove embedded nulls
+
+            m_Text = value;
+
+            /*
+            if (m_LineType == LineType.SingleLine)
+                value = value.Replace("\n", "").Replace("\t", "");
+
+            // If we have an input validator, validate the input and apply the character limit at the same time.
+            if (onValidateInput != null || characterValidation != CharacterValidation.None)
+            {
+                m_Text = "";
+                OnValidateInput validatorMethod = onValidateInput ?? Validate;
+                m_CaretPosition = m_CaretSelectPosition = value.Length;
+                int charactersToCheck = characterLimit > 0 ? Math.Min(characterLimit, value.Length) : value.Length;
+                for (int i = 0; i < charactersToCheck; ++i)
+                {
+                    char c = validatorMethod(m_Text, m_Text.Length, value[i]);
+                    if (c != 0)
+                        m_Text += c;
+                }
+            }
+            else
+            {
+                m_Text = characterLimit > 0 && value.Length > characterLimit ? value.Substring(0, characterLimit) : value;
+            }
+            */
+
+            #if UNITY_EDITOR
+            if (!Application.isPlaying)
+            {
+                SendOnValueChangedAndUpdateLabel();
+                return;
+            }
+            #endif
+
+            if (m_SoftKeyboard != null)
+                m_SoftKeyboard.text = m_Text;
+
+            if (m_StringPosition > m_Text.Length)
+                m_StringPosition = m_StringSelectPosition = m_Text.Length;
+            else if (m_StringSelectPosition > m_Text.Length)
+                m_StringSelectPosition = m_Text.Length;
+
+            // Set RectTransform relative position to top of viewport.
+            AdjustTextPositionRelativeToViewport(0);
+
+            m_forceRectTransformAdjustment = true;
+
+            m_IsTextComponentUpdateRequired = true;
+            UpdateLabel();
+
+            if (sendCallback)
+                SendOnValueChanged();
+        }
+
+
+        public bool isFocused
+        {
+            get { return m_AllowInput; }
+        }
+
+        public float caretBlinkRate
+        {
+            get { return m_CaretBlinkRate; }
+            set
+            {
+                if (SetPropertyUtility.SetStruct(ref m_CaretBlinkRate, value))
+                {
+                    if (m_AllowInput)
+                        SetCaretActive();
+                }
+            }
+        }
+
+        public int caretWidth { get { return m_CaretWidth; } set { if (SetPropertyUtility.SetStruct(ref m_CaretWidth, value)) MarkGeometryAsDirty(); } }
+
+        public RectTransform textViewport { get { return m_TextViewport; } set { SetPropertyUtility.SetClass(ref m_TextViewport, value); } }
+
+        public TMP_Text textComponent
+        {
+            get { return m_TextComponent; }
+            set
+            {
+                if (SetPropertyUtility.SetClass(ref m_TextComponent, value))
+                {
+                    SetTextComponentWrapMode();
+                }
+            }
+        }
+
+        //public TMP_Text placeholderTextComponent { get { return m_PlaceholderTextComponent; } set { SetPropertyUtility.SetClass(ref m_PlaceholderTextComponent, value); } }
+
+        public Graphic placeholder { get { return m_Placeholder; } set { SetPropertyUtility.SetClass(ref m_Placeholder, value); } }
+
+        public Scrollbar verticalScrollbar
+        {
+            get { return m_VerticalScrollbar; }
+            set
+            {
+                if (m_VerticalScrollbar != null)
+                    m_VerticalScrollbar.onValueChanged.RemoveListener(OnScrollbarValueChange);
+
+                SetPropertyUtility.SetClass(ref m_VerticalScrollbar, value);
+
+                if (m_VerticalScrollbar)
+                {
+                    m_VerticalScrollbar.onValueChanged.AddListener(OnScrollbarValueChange);
+                    
+                }
+            }
+        }
+
+        public float scrollSensitivity { get { return m_ScrollSensitivity; } set { if (SetPropertyUtility.SetStruct(ref m_ScrollSensitivity, value)) MarkGeometryAsDirty(); } }
+
+        public Color caretColor { get { return customCaretColor ? m_CaretColor : textComponent.color; } set { if (SetPropertyUtility.SetColor(ref m_CaretColor, value)) MarkGeometryAsDirty(); } }
+
+        public bool customCaretColor { get { return m_CustomCaretColor; } set { if (m_CustomCaretColor != value) { m_CustomCaretColor = value; MarkGeometryAsDirty(); } } }
+
+        public Color selectionColor { get { return m_SelectionColor; } set { if (SetPropertyUtility.SetColor(ref m_SelectionColor, value)) MarkGeometryAsDirty(); } }
+
+        public SubmitEvent onEndEdit { get { return m_OnEndEdit; } set { SetPropertyUtility.SetClass(ref m_OnEndEdit, value); } }
+
+        public SubmitEvent onSubmit { get { return m_OnSubmit; } set { SetPropertyUtility.SetClass(ref m_OnSubmit, value); } }
+
+        public SelectionEvent onSelect { get { return m_OnSelect; } set { SetPropertyUtility.SetClass(ref m_OnSelect, value); } }
+
+        public SelectionEvent onDeselect { get { return m_OnDeselect; } set { SetPropertyUtility.SetClass(ref m_OnDeselect, value); } }
+
+        public TextSelectionEvent onTextSelection { get { return m_OnTextSelection; } set { SetPropertyUtility.SetClass(ref m_OnTextSelection, value); } }
+
+        public TextSelectionEvent onEndTextSelection { get { return m_OnEndTextSelection; } set { SetPropertyUtility.SetClass(ref m_OnEndTextSelection, value); } }
+
+        public OnChangeEvent onValueChanged { get { return m_OnValueChanged; } set { SetPropertyUtility.SetClass(ref m_OnValueChanged, value); } }
+
+        public TouchScreenKeyboardEvent onTouchScreenKeyboardStatusChanged { get { return m_OnTouchScreenKeyboardStatusChanged; } set { SetPropertyUtility.SetClass(ref m_OnTouchScreenKeyboardStatusChanged, value); } }
+
+        public OnValidateInput onValidateInput { get { return m_OnValidateInput; } set { SetPropertyUtility.SetClass(ref m_OnValidateInput, value); } }
+
+        public int characterLimit
+        {
+            get { return m_CharacterLimit; }
+            set
+            {
+                if (SetPropertyUtility.SetStruct(ref m_CharacterLimit, Math.Max(0, value)))
+                {
+                    UpdateLabel();
+                    if (m_SoftKeyboard != null)
+                        m_SoftKeyboard.characterLimit = value;
+                }
+            }
+        }
+
+        //public bool isInteractableControl { set { if ( } }
+
+        /// <summary>
+        /// Set the point size on both Placeholder and Input text object.
+        /// </summary>
+        public float pointSize
+        {
+            get { return m_GlobalPointSize; }
+            set {
+                    if (SetPropertyUtility.SetStruct(ref m_GlobalPointSize, Math.Max(0, value)))
+                    {
+                        SetGlobalPointSize(m_GlobalPointSize);
+                        UpdateLabel();
+                    }
+                }
+        }
+
+        /// <summary>
+        /// Sets the Font Asset on both Placeholder and Input child objects.
+        /// </summary>
+        public TMP_FontAsset fontAsset
+        {
+            get { return m_GlobalFontAsset; }
+            set
+            {
+                if (SetPropertyUtility.SetClass(ref m_GlobalFontAsset, value))
+                {
+                    SetGlobalFontAsset(m_GlobalFontAsset);
+                    UpdateLabel();
+                }
+            }
+        }
+        [SerializeField]
+        protected TMP_FontAsset m_GlobalFontAsset;
+
+        /// <summary>
+        /// Determines if the whole text will be selected when focused.
+        /// </summary>
+        public bool onFocusSelectAll
+        {
+            get { return m_OnFocusSelectAll; }
+            set { m_OnFocusSelectAll = value; }
+        }
+        [SerializeField]
+        protected bool m_OnFocusSelectAll = true;
+        protected bool m_isSelectAll;
+
+        /// <summary>
+        /// Determines if the text and caret position as well as selection will be reset when the input field is deactivated.
+        /// </summary>
+        public bool resetOnDeActivation
+        {
+            get { return m_ResetOnDeActivation; }
+            set { m_ResetOnDeActivation = value; }
+        }
+        [SerializeField]
+        protected bool m_ResetOnDeActivation = true;
+        private bool m_SelectionStillActive = false;
+        private bool m_ReleaseSelection = false;
+
+        private GameObject m_SelectedObject;
+
+        /// <summary>
+        /// Controls whether the original text is restored when pressing "ESC".
+        /// </summary>
+        public bool restoreOriginalTextOnEscape
+        {
+            get { return m_RestoreOriginalTextOnEscape; }
+            set { m_RestoreOriginalTextOnEscape = value; }
+        }
+        [SerializeField]
+        private bool m_RestoreOriginalTextOnEscape = true;
+
+        /// <summary>
+        /// Is Rich Text editing allowed?
+        /// </summary>
+        public bool isRichTextEditingAllowed
+        {
+            get { return m_isRichTextEditingAllowed; }
+            set { m_isRichTextEditingAllowed = value; }
+        }
+        [SerializeField]
+        protected bool m_isRichTextEditingAllowed = false;
+
+
+        // Content Type related
+        public ContentType contentType { get { return m_ContentType; } set { if (SetPropertyUtility.SetStruct(ref m_ContentType, value)) EnforceContentType(); } }
+
+        public LineType lineType
+        {
+            get { return m_LineType; }
+            set
+            {
+                if (SetPropertyUtility.SetStruct(ref m_LineType, value))
+                {
+                    SetToCustomIfContentTypeIsNot(ContentType.Standard, ContentType.Autocorrected);
+                    SetTextComponentWrapMode();
+                }
+            }
+        }
+
+        /// <summary>
+        /// Limits the number of lines of text in the Input Field.
+        /// </summary>
+        public int lineLimit
+        {
+            get { return m_LineLimit; }
+            set
+            {
+                if (m_LineType == LineType.SingleLine)
+                    m_LineLimit = 1;
+                else
+                    SetPropertyUtility.SetStruct(ref m_LineLimit, value);
+
+            }
+        }
+        [SerializeField]
+        protected int m_LineLimit = 0;
+
+        public InputType inputType { get { return m_InputType; } set { if (SetPropertyUtility.SetStruct(ref m_InputType, value)) SetToCustom(); } }
+
+        public TouchScreenKeyboardType keyboardType
+        {
+            get { return m_KeyboardType; }
+            set
+            {
+                if (SetPropertyUtility.SetStruct(ref m_KeyboardType, value))
+                    SetToCustom();
+            }
+        }
+
+        public CharacterValidation characterValidation { get { return m_CharacterValidation; } set { if (SetPropertyUtility.SetStruct(ref m_CharacterValidation, value)) SetToCustom(); } }
+
+        /// <summary>
+        /// Sets the Input Validation to use a Custom Input Validation script.
+        /// </summary>
+        public TMP_InputValidator inputValidator
+        {
+            get { return m_InputValidator; }
+            set {  if (SetPropertyUtility.SetClass(ref m_InputValidator, value)) SetToCustom(CharacterValidation.CustomValidator); }
+        }
+        [SerializeField]
+        protected TMP_InputValidator m_InputValidator = null; 
+
+        public bool readOnly { get { return m_ReadOnly; } set { m_ReadOnly = value; } }
+
+        public bool richText { get { return m_RichText; } set { m_RichText = value; SetTextComponentRichTextMode(); } }
+
+        // Derived property
+        public bool multiLine { get { return m_LineType == LineType.MultiLineNewline || lineType == LineType.MultiLineSubmit; } }
+        // Not shown in Inspector.
+        public char asteriskChar { get { return m_AsteriskChar; } set { if (SetPropertyUtility.SetStruct(ref m_AsteriskChar, value)) UpdateLabel(); } }
+        public bool wasCanceled { get { return m_WasCanceled; } }
+
+
+        protected void ClampStringPos(ref int pos)
+        {
+            if (pos < 0)
+                pos = 0;
+            else if (pos > text.Length)
+                pos = text.Length;
+        }
+
+        protected void ClampCaretPos(ref int pos)
+        {
+            if (pos < 0)
+                pos = 0;
+            else if (pos > m_TextComponent.textInfo.characterCount - 1)
+                pos = m_TextComponent.textInfo.characterCount - 1;
+        }
+
+        /// <summary>
+        /// Current position of the cursor.
+        /// Getters are public Setters are protected
+        /// </summary>
+
+        protected int caretPositionInternal { get { return m_CaretPosition + compositionString.Length; } set { m_CaretPosition = value; ClampCaretPos(ref m_CaretPosition); } }
+        protected int stringPositionInternal { get { return m_StringPosition + compositionString.Length; } set { m_StringPosition = value; ClampStringPos(ref m_StringPosition); } }
+
+        protected int caretSelectPositionInternal { get { return m_CaretSelectPosition + compositionString.Length; } set { m_CaretSelectPosition = value; ClampCaretPos(ref m_CaretSelectPosition); } }
+        protected int stringSelectPositionInternal { get { return m_StringSelectPosition + compositionString.Length; } set { m_StringSelectPosition = value; ClampStringPos(ref m_StringSelectPosition); } }
+
+        private bool hasSelection { get { return stringPositionInternal != stringSelectPositionInternal; } }
+        private bool m_isSelected;
+        private bool m_IsStringPositionDirty;
+        private bool m_IsCaretPositionDirty;
+        private bool m_forceRectTransformAdjustment;
+
+        /// <summary>
+        /// Get: Returns the focus position as thats the position that moves around even during selection.
+        /// Set: Set both the anchor and focus position such that a selection doesn't happen
+        /// </summary>
+        public int caretPosition
+        {
+            get { return caretSelectPositionInternal; }
+            set { selectionAnchorPosition = value; selectionFocusPosition = value; m_IsStringPositionDirty = true; }
+        }
+
+        /// <summary>
+        /// Get: Returns the fixed position of selection
+        /// Set: If compositionString is 0 set the fixed position
+        /// </summary>
+        public int selectionAnchorPosition
+        {
+            get
+            {
+                return caretPositionInternal;
+            }
+
+            set
+            {
+                if (compositionString.Length != 0)
+                    return;
+
+                caretPositionInternal = value;
+                m_IsStringPositionDirty = true;
+            }
+        }
+
+        /// <summary>
+        /// Get: Returns the variable position of selection
+        /// Set: If compositionString is 0 set the variable position
+        /// </summary>
+        public int selectionFocusPosition
+        {
+            get
+            {
+                return caretSelectPositionInternal;
+            }
+            set
+            {
+                if (compositionString.Length != 0)
+                    return;
+
+                caretSelectPositionInternal = value;
+                m_IsStringPositionDirty = true;
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int stringPosition
+        {
+            get { return stringSelectPositionInternal; }
+            set { selectionStringAnchorPosition = value; selectionStringFocusPosition = value; m_IsCaretPositionDirty = true; }
+        }
+
+
+        /// <summary>
+        /// The fixed position of the selection in the raw string which may contains rich text.
+        /// </summary>
+        public int selectionStringAnchorPosition
+        {
+            get
+            {
+                return stringPositionInternal;
+            }
+
+            set
+            {
+                if (compositionString.Length != 0)
+                    return;
+
+                stringPositionInternal = value;
+                m_IsCaretPositionDirty = true;
+            }
+        }
+
+
+        /// <summary>
+        /// The variable position of the selection in the raw string which may contains rich text.
+        /// </summary>
+        public int selectionStringFocusPosition
+        {
+            get
+            {
+                return stringSelectPositionInternal;
+            }
+            set
+            {
+                if (compositionString.Length != 0)
+                    return;
+
+                stringSelectPositionInternal = value;
+                m_IsCaretPositionDirty = true;
+            }
+        }
+
+
+        #if UNITY_EDITOR
+        // Remember: This is NOT related to text validation!
+        // This is Unity's own OnValidate method which is invoked when changing values in the Inspector.
+        protected override void OnValidate()
+        {
+            base.OnValidate();
+            EnforceContentType();
+
+            m_CharacterLimit = Math.Max(0, m_CharacterLimit);
+
+            //This can be invoked before OnEnabled is called. So we shouldn't be accessing other objects, before OnEnable is called.
+            if (!IsActive())
+                return;
+
+            SetTextComponentRichTextMode();
+
+            UpdateLabel();
+            if (m_AllowInput)
+                SetCaretActive();
+        }
+        #endif
+
+        protected override void OnEnable()
+        {
+            //Debug.Log("*** OnEnable() *** - " + this.name);
+
+            base.OnEnable();
+
+            if (m_Text == null)
+                m_Text = string.Empty;
+
+            if (Application.isPlaying)
+            {
+                if (m_CachedInputRenderer == null && m_TextComponent != null)
+                {
+                    // Check if Input Field is driven by any layout components
+                    m_IsDrivenByLayoutComponents = GetComponent<ILayoutController>() != null ? true : false;
+
+                    GameObject go = new GameObject(transform.name + " Input Caret", typeof(RectTransform));
+
+                    // Add MaskableGraphic Component
+                    TMP_SelectionCaret caret = go.AddComponent<TMP_SelectionCaret>();
+                    caret.raycastTarget = false;
+                    caret.color = Color.clear;
+
+                    go.hideFlags = HideFlags.DontSave;
+                    go.transform.SetParent(m_TextComponent.transform.parent);
+                    go.transform.SetAsFirstSibling();
+                    go.layer = gameObject.layer;
+
+                    caretRectTrans = go.GetComponent<RectTransform>();
+                    m_CachedInputRenderer = go.GetComponent<CanvasRenderer>();
+                    m_CachedInputRenderer.SetMaterial(Graphic.defaultGraphicMaterial, Texture2D.whiteTexture);
+
+                    // Needed as if any layout is present we want the caret to always be the same as the text area.
+                    go.AddComponent<LayoutElement>().ignoreLayout = true;
+
+                    AssignPositioningIfNeeded();
+                }
+            }
+
+            // If we have a cached renderer then we had OnDisable called so just restore the material.
+            if (m_CachedInputRenderer != null)
+                m_CachedInputRenderer.SetMaterial(Graphic.defaultGraphicMaterial, Texture2D.whiteTexture);
+
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.RegisterDirtyVerticesCallback(MarkGeometryAsDirty);
+                m_TextComponent.RegisterDirtyVerticesCallback(UpdateLabel);
+                //m_TextComponent.ignoreRectMaskCulling = multiLine;
+
+                //m_DefaultTransformPosition = m_TextComponent.rectTransform.localPosition;
+
+                // Cache reference to Vertical Scrollbar RectTransform and add listener.
+                if (m_VerticalScrollbar != null)
+                {
+                    m_TextComponent.ignoreRectMaskCulling = true;
+                    m_VerticalScrollbar.onValueChanged.AddListener(OnScrollbarValueChange);
+                }
+
+                UpdateLabel();
+            }
+
+            // Subscribe to event fired when text object has been regenerated.
+            TMPro_EventManager.TEXT_CHANGED_EVENT.Add(ON_TEXT_CHANGED);
+        }
+
+        protected override void OnDisable()
+        {
+            // the coroutine will be terminated, so this will ensure it restarts when we are next activated
+            m_BlinkCoroutine = null;
+
+            DeactivateInputField();
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.UnregisterDirtyVerticesCallback(MarkGeometryAsDirty);
+                m_TextComponent.UnregisterDirtyVerticesCallback(UpdateLabel);
+
+                if (m_VerticalScrollbar != null)
+                    m_VerticalScrollbar.onValueChanged.RemoveListener(OnScrollbarValueChange);
+
+            }
+            CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild(this);
+
+            // Clear needs to be called otherwise sync never happens as the object is disabled.
+            if (m_CachedInputRenderer != null)
+                m_CachedInputRenderer.Clear();
+
+            if (m_Mesh != null)
+                DestroyImmediate(m_Mesh);
+            m_Mesh = null;
+
+            // Unsubscribe to event triggered when text object has been regenerated
+            TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(ON_TEXT_CHANGED);
+
+            base.OnDisable();
+        }
+
+
+        /// <summary>
+        /// Method used to update the tracking of the caret position when the text object has been regenerated.
+        /// </summary>
+        /// <param name="obj"></param>
+        private void ON_TEXT_CHANGED(UnityEngine.Object obj)
+        {
+            if (obj == m_TextComponent && Application.isPlaying && compositionString.Length == 0)
+            {
+                caretPositionInternal = GetCaretPositionFromStringIndex(stringPositionInternal);
+                caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+
+                #if TMP_DEBUG_MODE
+                    Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+                #endif
+            }
+        }
+
+
+        IEnumerator CaretBlink()
+        {
+            // Always ensure caret is initially visible since it can otherwise be confusing for a moment.
+            m_CaretVisible = true;
+            yield return null;
+
+            while ((isFocused || m_SelectionStillActive) && m_CaretBlinkRate > 0)
+            {
+                // the blink rate is expressed as a frequency
+                float blinkPeriod = 1f / m_CaretBlinkRate;
+
+                // the caret should be ON if we are in the first half of the blink period
+                bool blinkState = (Time.unscaledTime - m_BlinkStartTime) % blinkPeriod < blinkPeriod / 2;
+                if (m_CaretVisible != blinkState)
+                {
+                    m_CaretVisible = blinkState;
+                    if (!hasSelection)
+                        MarkGeometryAsDirty();
+                }
+
+                // Then wait again.
+                yield return null;
+            }
+            m_BlinkCoroutine = null;
+        }
+
+        void SetCaretVisible()
+        {
+            if (!m_AllowInput)
+                return;
+
+            m_CaretVisible = true;
+            m_BlinkStartTime = Time.unscaledTime;
+            SetCaretActive();
+        }
+
+        // SetCaretActive will not set the caret immediately visible - it will wait for the next time to blink.
+        // However, it will handle things correctly if the blink speed changed from zero to non-zero or non-zero to zero.
+        void SetCaretActive()
+        {
+            if (!m_AllowInput)
+                return;
+
+            if (m_CaretBlinkRate > 0.0f)
+            {
+                if (m_BlinkCoroutine == null)
+                    m_BlinkCoroutine = StartCoroutine(CaretBlink());
+            }
+            else
+            {
+                m_CaretVisible = true;
+            }
+        }
+
+        protected void OnFocus()
+        {
+            if (m_OnFocusSelectAll)
+                SelectAll();
+        }
+
+        protected void SelectAll()
+        {
+            m_isSelectAll = true;
+            stringPositionInternal = text.Length;
+            stringSelectPositionInternal = 0;
+        }
+
+        /// <summary>
+        /// Move to the end of the text.
+        /// </summary>
+        /// <param name="shift"></param>
+        public void MoveTextEnd(bool shift)
+        {
+            if (m_isRichTextEditingAllowed)
+            {
+                int position = text.Length;
+
+                if (shift)
+                {
+                    stringSelectPositionInternal = position;
+                }
+                else
+                {
+                    stringPositionInternal = position;
+                    stringSelectPositionInternal = stringPositionInternal;
+                }
+            }
+            else
+            {
+                int position = m_TextComponent.textInfo.characterCount - 1;
+
+                if (shift)
+                {
+                    caretSelectPositionInternal = position;
+                    stringSelectPositionInternal = GetStringIndexFromCaretPosition(position);
+                }
+                else
+                {
+                    caretPositionInternal = caretSelectPositionInternal = position;
+                    stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(position);
+                }
+            }
+
+            UpdateLabel();
+        }
+
+        /// <summary>
+        /// Move to the start of the text.
+        /// </summary>
+        /// <param name="shift"></param>
+        public void MoveTextStart(bool shift)
+        {
+            if (m_isRichTextEditingAllowed)
+            {
+                int position = 0;
+
+                if (shift)
+                {
+                    stringSelectPositionInternal = position;
+                }
+                else
+                {
+                    stringPositionInternal = position;
+                    stringSelectPositionInternal = stringPositionInternal;
+                }
+            }
+            else
+            {
+                int position = 0;
+
+                if (shift)
+                {
+                    caretSelectPositionInternal = position;
+                    stringSelectPositionInternal = GetStringIndexFromCaretPosition(position);
+                }
+                else
+                {
+                    caretPositionInternal = caretSelectPositionInternal = position;
+                    stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(position);
+                }
+            }
+
+            UpdateLabel();
+        }
+
+
+        /// <summary>
+        /// Move to the end of the current line of text.
+        /// </summary>
+        /// <param name="shift"></param>
+        public void MoveToEndOfLine(bool shift, bool ctrl)
+        {
+            // Get the line the caret is currently located on.
+            int currentLine = m_TextComponent.textInfo.characterInfo[caretPositionInternal].lineNumber;
+
+            // Get the last character of the given line.
+            int characterIndex = ctrl == true ? m_TextComponent.textInfo.characterCount - 1 : m_TextComponent.textInfo.lineInfo[currentLine].lastCharacterIndex;
+
+            int position = m_TextComponent.textInfo.characterInfo[characterIndex].index;
+
+            if (shift)
+            {
+                stringSelectPositionInternal = position;
+
+                caretSelectPositionInternal = characterIndex;
+            }
+            else
+            {
+                stringPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal;
+
+                caretSelectPositionInternal = caretPositionInternal = characterIndex;
+            }
+
+            UpdateLabel();
+        }
+
+        /// <summary>
+        /// Move to the start of the current line of text.
+        /// </summary>
+        /// <param name="shift"></param>
+        public void MoveToStartOfLine(bool shift, bool ctrl)
+        {
+            // Get the line the caret is currently located on.
+            int currentLine = m_TextComponent.textInfo.characterInfo[caretPositionInternal].lineNumber;
+
+            // Get the first character of the given line.
+            int characterIndex = ctrl == true ? 0 : m_TextComponent.textInfo.lineInfo[currentLine].firstCharacterIndex;
+
+            int position = 0;
+            if (characterIndex > 0)
+                position = m_TextComponent.textInfo.characterInfo[characterIndex - 1].index + m_TextComponent.textInfo.characterInfo[characterIndex - 1].stringLength;
+
+            if (shift)
+            {
+                stringSelectPositionInternal = position;
+
+                caretSelectPositionInternal = characterIndex;
+            }
+            else
+            {
+                stringPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal;
+
+                caretSelectPositionInternal = caretPositionInternal = characterIndex;
+            }
+
+            UpdateLabel();
+        }
+
+
+        static string clipboard
+        {
+            get
+            {
+                return GUIUtility.systemCopyBuffer;
+            }
+            set
+            {
+                GUIUtility.systemCopyBuffer = value;
+            }
+        }
+
+        private bool InPlaceEditing()
+        {
+            if (m_TouchKeyboardAllowsInPlaceEditing || (TouchScreenKeyboard.isSupported && (Application.platform == RuntimePlatform.WSAPlayerX86 || Application.platform == RuntimePlatform.WSAPlayerX64 || Application.platform == RuntimePlatform.WSAPlayerARM)))
+                return true;
+
+            if (TouchScreenKeyboard.isSupported && shouldHideSoftKeyboard)
+                return true;
+
+            if (TouchScreenKeyboard.isSupported && shouldHideSoftKeyboard == false && shouldHideMobileInput == false)
+                return false;
+
+            return true;
+        }
+
+        void UpdateStringPositionFromKeyboard()
+        {
+            // TODO: Might want to add null check here.
+            var selectionRange = m_SoftKeyboard.selection;
+
+            if (selectionRange.start == 0 && selectionRange.length == 0)
+                return;
+
+            var selectionStart = selectionRange.start;
+            var selectionEnd = selectionRange.end;
+
+            var stringPositionChanged = false;
+
+            if (stringPositionInternal != selectionStart)
+            {
+                stringPositionChanged = true;
+                stringPositionInternal = selectionStart;
+
+                caretPositionInternal = GetCaretPositionFromStringIndex(stringPositionInternal);
+            }
+
+            if (stringSelectPositionInternal != selectionEnd)
+            {
+                stringSelectPositionInternal = selectionEnd;
+                stringPositionChanged = true;
+
+                caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+            }
+
+            if (stringPositionChanged)
+            {
+                m_BlinkStartTime = Time.unscaledTime;
+
+                UpdateLabel();
+            }
+        }
+
+        /// <summary>
+        /// Update the text based on input.
+        /// </summary>
+        // TODO: Make LateUpdate a coroutine instead. Allows us to control the update to only be when the field is active.
+        protected virtual void LateUpdate()
+        {
+            // Only activate if we are not already activated.
+            if (m_ShouldActivateNextUpdate)
+            {
+                if (!isFocused)
+                {
+                    ActivateInputFieldInternal();
+                    m_ShouldActivateNextUpdate = false;
+                    return;
+                }
+
+                // Reset as we are already activated.
+                m_ShouldActivateNextUpdate = false;
+            }
+
+            // Update Scrollbar if needed
+            if (m_IsScrollbarUpdateRequired)
+            {
+                UpdateScrollbar();
+                m_IsScrollbarUpdateRequired = false;
+            }
+
+            // Handle double click to reset / deselect Input Field when ResetOnActivation is false.
+            if (!isFocused && m_SelectionStillActive)
+            {
+                GameObject selectedObject = EventSystem.current != null ? EventSystem.current.currentSelectedGameObject : null;
+
+                if (selectedObject != null && selectedObject != this.gameObject)
+                {
+                    if (selectedObject != m_SelectedObject)
+                    {
+                        m_SelectedObject = selectedObject;
+
+                        // Check if object has a TMP Input Field
+                        if (selectedObject.GetComponent<TMP_InputField>() != null)
+                        {
+                            // Release selection
+                            m_SelectionStillActive = false;
+                            MarkGeometryAsDirty();
+                            m_SelectedObject = null;
+                        }
+                    }
+
+                    return;
+                }
+
+                if (Input.GetKeyDown(KeyCode.Mouse0))
+                {
+                    // Check for Double Click
+                    bool isDoubleClick = false;
+                    float timeStamp = Time.unscaledTime;
+
+                    if (m_KeyDownStartTime + m_DoubleClickDelay > timeStamp)
+                        isDoubleClick = true;
+
+                    m_KeyDownStartTime = timeStamp;
+
+                    if (isDoubleClick)
+                    {
+                        //m_StringPosition = m_StringSelectPosition = 0;
+                        //m_CaretPosition = m_CaretSelectPosition = 0;
+                        //m_TextComponent.rectTransform.localPosition = m_DefaultTransformPosition;
+
+                        //if (caretRectTrans != null)
+                        //    caretRectTrans.localPosition = Vector3.zero;
+
+                        m_SelectionStillActive = false;
+
+                        MarkGeometryAsDirty();
+
+                        return;
+                    }
+                }
+            }
+
+            if (InPlaceEditing() && isKeyboardUsingEvents() || !isFocused)
+            {
+                return;
+            }
+
+            AssignPositioningIfNeeded();
+
+            if (m_SoftKeyboard == null || m_SoftKeyboard.status != TouchScreenKeyboard.Status.Visible)
+            {
+                if (m_SoftKeyboard != null)
+                {
+                    if (!m_ReadOnly)
+                        text = m_SoftKeyboard.text;
+
+                    if (m_SoftKeyboard.status == TouchScreenKeyboard.Status.LostFocus)
+                        SendTouchScreenKeyboardStatusChanged();
+
+                    if (m_SoftKeyboard.status == TouchScreenKeyboard.Status.Canceled)
+                    {
+                        m_ReleaseSelection = true;
+                        m_WasCanceled = true;
+                        SendTouchScreenKeyboardStatusChanged();
+                    }
+
+                    if (m_SoftKeyboard.status == TouchScreenKeyboard.Status.Done)
+                    {
+                        m_ReleaseSelection = true;
+                        OnSubmit(null);
+                        SendTouchScreenKeyboardStatusChanged();
+                    }
+                }
+
+                OnDeselect(null);
+                return;
+            }
+
+            string val = m_SoftKeyboard.text;
+
+            if (m_Text != val)
+            {
+                if (m_ReadOnly)
+                {
+                    m_SoftKeyboard.text = m_Text;
+                }
+                else
+                {
+                    m_Text = "";
+
+                    for (int i = 0; i < val.Length; ++i)
+                    {
+                        char c = val[i];
+
+                        if (c == '\r' || (int)c == 3)
+                            c = '\n';
+
+                        if (onValidateInput != null)
+                            c = onValidateInput(m_Text, m_Text.Length, c);
+                        else if (characterValidation != CharacterValidation.None)
+                            c = Validate(m_Text, m_Text.Length, c);
+
+                        if (lineType == LineType.MultiLineSubmit && c == '\n')
+                        {
+                            m_SoftKeyboard.text = m_Text;
+
+                            OnSubmit(null);
+                            OnDeselect(null);
+                            return;
+                        }
+
+                        if (c != 0)
+                            m_Text += c;
+                    }
+
+                    if (characterLimit > 0 && m_Text.Length > characterLimit)
+                        m_Text = m_Text.Substring(0, characterLimit);
+
+                    UpdateStringPositionFromKeyboard();
+
+                    // Set keyboard text before updating label, as we might have changed it with validation
+                    // and update label will take the old value from keyboard if we don't change it here
+                    if (m_Text != val)
+                        m_SoftKeyboard.text = m_Text;
+
+                    SendOnValueChangedAndUpdateLabel();
+                }
+            }
+            else if (m_HideMobileInput && Application.platform == RuntimePlatform.Android)
+            {
+                UpdateStringPositionFromKeyboard();
+            }
+
+            //else if (m_HideMobileInput) // m_Keyboard.canSetSelection
+            //{
+            //    int length = stringPositionInternal < stringSelectPositionInternal ? stringSelectPositionInternal - stringPositionInternal : stringPositionInternal - stringSelectPositionInternal;
+            //    m_SoftKeyboard.selection = new RangeInt(stringPositionInternal < stringSelectPositionInternal ? stringPositionInternal : stringSelectPositionInternal, length);
+            //}
+            //else if (!m_HideMobileInput) // m_Keyboard.canGetSelection)
+            //{
+            //    UpdateStringPositionFromKeyboard();
+            //}
+
+            if (m_SoftKeyboard.status != TouchScreenKeyboard.Status.Visible)
+            {
+                if (m_SoftKeyboard.status == TouchScreenKeyboard.Status.Canceled)
+                    m_WasCanceled = true;
+
+                OnDeselect(null);
+            }
+        }
+
+
+        private bool MayDrag(PointerEventData eventData)
+        {
+            return IsActive() &&
+                   IsInteractable() &&
+                   eventData.button == PointerEventData.InputButton.Left &&
+                   m_TextComponent != null &&
+                   (m_SoftKeyboard == null || shouldHideSoftKeyboard || shouldHideMobileInput);
+        }
+
+        public virtual void OnBeginDrag(PointerEventData eventData)
+        {
+            if (!MayDrag(eventData))
+                return;
+
+            m_UpdateDrag = true;
+        }
+
+        public virtual void OnDrag(PointerEventData eventData)
+        {
+            if (!MayDrag(eventData))
+                return;
+
+            CaretPosition insertionSide;
+
+            int insertionIndex = TMP_TextUtilities.GetCursorIndexFromPosition(m_TextComponent, eventData.position, eventData.pressEventCamera, out insertionSide);
+
+            if (m_isRichTextEditingAllowed)
+            {
+                if (insertionSide == CaretPosition.Left)
+                {
+                    stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index;
+                }
+                else if (insertionSide == CaretPosition.Right)
+                {
+                    stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                }
+            }
+            else
+            {
+                if (insertionSide == CaretPosition.Left)
+                {
+                    stringSelectPositionInternal = insertionIndex == 0
+                        ? m_TextComponent.textInfo.characterInfo[0].index
+                        : m_TextComponent.textInfo.characterInfo[insertionIndex - 1].index + m_TextComponent.textInfo.characterInfo[insertionIndex - 1].stringLength;
+                }
+                else if (insertionSide == CaretPosition.Right)
+                {
+                    stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                }
+            }
+
+            caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+
+            MarkGeometryAsDirty();
+
+            m_DragPositionOutOfBounds = !RectTransformUtility.RectangleContainsScreenPoint(textViewport, eventData.position, eventData.pressEventCamera);
+            if (m_DragPositionOutOfBounds && m_DragCoroutine == null)
+                m_DragCoroutine = StartCoroutine(MouseDragOutsideRect(eventData));
+
+            eventData.Use();
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        IEnumerator MouseDragOutsideRect(PointerEventData eventData)
+        {
+            while (m_UpdateDrag && m_DragPositionOutOfBounds)
+            {
+                Vector2 localMousePos;
+
+                RectTransformUtility.ScreenPointToLocalPointInRectangle(textViewport, eventData.position, eventData.pressEventCamera, out localMousePos);
+
+                Rect rect = textViewport.rect;
+
+                if (multiLine)
+                {
+                    if (localMousePos.y > rect.yMax)
+                        MoveUp(true, true);
+                    else if (localMousePos.y < rect.yMin)
+                        MoveDown(true, true);
+                }
+                else
+                {
+                    if (localMousePos.x < rect.xMin)
+                        MoveLeft(true, false);
+                    else if (localMousePos.x > rect.xMax)
+                        MoveRight(true, false);
+                }
+
+                UpdateLabel();
+
+                float delay = multiLine ? kVScrollSpeed : kHScrollSpeed;
+
+                if (m_WaitForSecondsRealtime == null)
+                    m_WaitForSecondsRealtime = new WaitForSecondsRealtime(delay);
+                else
+                    m_WaitForSecondsRealtime.waitTime = delay;
+
+                yield return m_WaitForSecondsRealtime;
+            }
+            m_DragCoroutine = null;
+        }
+
+        public virtual void OnEndDrag(PointerEventData eventData)
+        {
+            if (!MayDrag(eventData))
+                return;
+
+            m_UpdateDrag = false;
+        }
+
+        public override void OnPointerDown(PointerEventData eventData)
+        {
+            if (!MayDrag(eventData))
+                return;
+
+            EventSystem.current.SetSelectedGameObject(gameObject, eventData);
+
+            bool hadFocusBefore = m_AllowInput;
+            base.OnPointerDown(eventData);
+
+            if (InPlaceEditing() == false)
+            {
+                if (m_SoftKeyboard == null || !m_SoftKeyboard.active)
+                {
+                    OnSelect(eventData);
+                    return;
+                }
+            }
+
+            bool shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
+
+            // Check for Double Click
+            bool isDoubleClick = false;
+            float timeStamp = Time.unscaledTime;
+
+            if (m_PointerDownClickStartTime + m_DoubleClickDelay > timeStamp)
+                isDoubleClick = true;
+
+            m_PointerDownClickStartTime = timeStamp;
+
+            // Only set caret position if we didn't just get focus now.
+            // Otherwise it will overwrite the select all on focus.
+            if (hadFocusBefore || !m_OnFocusSelectAll)
+            {
+                CaretPosition insertionSide;
+
+                int insertionIndex = TMP_TextUtilities.GetCursorIndexFromPosition(m_TextComponent, eventData.position, eventData.pressEventCamera, out insertionSide);
+
+                if (shift)
+                {
+                    if (m_isRichTextEditingAllowed)
+                    {
+                        if (insertionSide == CaretPosition.Left)
+                        {
+                            stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index;
+                        }
+                        else if (insertionSide == CaretPosition.Right)
+                        {
+                            stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                        }
+                    }
+                    else
+                    {
+                        if (insertionSide == CaretPosition.Left)
+                        {
+                            stringSelectPositionInternal = insertionIndex == 0
+                                ? m_TextComponent.textInfo.characterInfo[0].index
+                                : m_TextComponent.textInfo.characterInfo[insertionIndex - 1].index + m_TextComponent.textInfo.characterInfo[insertionIndex - 1].stringLength;
+                        }
+                        else if (insertionSide == CaretPosition.Right)
+                        {
+                            stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                        }
+                    }
+                }
+                else
+                {
+                    if (m_isRichTextEditingAllowed)
+                    {
+                        if (insertionSide == CaretPosition.Left)
+                        {
+                            stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index;
+                        }
+                        else if (insertionSide == CaretPosition.Right)
+                        {
+                            stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                        }
+                    }
+                    else
+                    {
+                        if (insertionSide == CaretPosition.Left)
+                        {
+                            stringPositionInternal = stringSelectPositionInternal = insertionIndex == 0
+                                ? m_TextComponent.textInfo.characterInfo[0].index
+                                : m_TextComponent.textInfo.characterInfo[insertionIndex - 1].index + m_TextComponent.textInfo.characterInfo[insertionIndex - 1].stringLength;
+                        }
+                        else if (insertionSide == CaretPosition.Right)
+                        {
+                            stringPositionInternal = stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                        }
+                    }
+                }
+
+
+                if (isDoubleClick)
+                {
+                    int wordIndex = TMP_TextUtilities.FindIntersectingWord(m_TextComponent, eventData.position, eventData.pressEventCamera);
+
+                    if (wordIndex != -1)
+                    {
+                        // TODO: Should behavior be different if rich text editing is enabled or not?
+
+                        // Select current word
+                        caretPositionInternal = m_TextComponent.textInfo.wordInfo[wordIndex].firstCharacterIndex;
+                        caretSelectPositionInternal = m_TextComponent.textInfo.wordInfo[wordIndex].lastCharacterIndex + 1;
+
+                        stringPositionInternal = m_TextComponent.textInfo.characterInfo[caretPositionInternal].index;
+                        stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].index + m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].stringLength;
+                    }
+                    else
+                    {
+                        // Select current character
+                        caretPositionInternal = insertionIndex; 
+                        caretSelectPositionInternal = caretPositionInternal + 1;
+
+                        stringPositionInternal = m_TextComponent.textInfo.characterInfo[insertionIndex].index;
+                        stringSelectPositionInternal = stringPositionInternal + m_TextComponent.textInfo.characterInfo[insertionIndex].stringLength;
+                    }
+                }
+                else
+                {
+                    caretPositionInternal = caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringPositionInternal);
+                }
+            }
+
+            UpdateLabel();
+            eventData.Use();
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        protected enum EditState
+        {
+            Continue,
+            Finish
+        }
+
+        protected EditState KeyPressed(Event evt)
+        {
+            var currentEventModifiers = evt.modifiers;
+            bool ctrl = SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX ? (currentEventModifiers & EventModifiers.Command) != 0 : (currentEventModifiers & EventModifiers.Control) != 0;
+            bool shift = (currentEventModifiers & EventModifiers.Shift) != 0;
+            bool alt = (currentEventModifiers & EventModifiers.Alt) != 0;
+            bool ctrlOnly = ctrl && !alt && !shift;
+
+            switch (evt.keyCode)
+            {
+                case KeyCode.Backspace:
+                    {
+                        Backspace();
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.Delete:
+                    {
+                        DeleteKey();
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.Home:
+                    {
+                        MoveToStartOfLine(shift, ctrl);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.End:
+                    {
+                        MoveToEndOfLine(shift, ctrl);
+                        return EditState.Continue;
+                    }
+
+                // Select All
+                case KeyCode.A:
+                    {
+                        if (ctrlOnly)
+                        {
+                            SelectAll();
+                            return EditState.Continue;
+                        }
+                        break;
+                    }
+
+                // Copy
+                case KeyCode.C:
+                    {
+                        if (ctrlOnly)
+                        {
+                            if (inputType != InputType.Password)
+                                clipboard = GetSelectedString();
+                            else
+                                clipboard = "";
+                            return EditState.Continue;
+                        }
+                        break;
+                    }
+
+                // Paste
+                case KeyCode.V:
+                    {
+                        if (ctrlOnly)
+                        {
+                            Append(clipboard);
+                            return EditState.Continue;
+                        }
+                        break;
+                    }
+
+                // Cut
+                case KeyCode.X:
+                    {
+                        if (ctrlOnly)
+                        {
+                            if (inputType != InputType.Password)
+                                clipboard = GetSelectedString();
+                            else
+                                clipboard = "";
+                            Delete();
+                            UpdateTouchKeyboardFromEditChanges();
+                            SendOnValueChangedAndUpdateLabel();
+                            return EditState.Continue;
+                        }
+                        break;
+                    }
+
+                case KeyCode.LeftArrow:
+                    {
+                        MoveLeft(shift, ctrl);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.RightArrow:
+                    {
+                        MoveRight(shift, ctrl);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.UpArrow:
+                    {
+                        MoveUp(shift);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.DownArrow:
+                    {
+                        MoveDown(shift);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.PageUp:
+                    {
+                        MovePageUp(shift);
+                        return EditState.Continue;
+                    }
+
+                case KeyCode.PageDown:
+                    {
+                        MovePageDown(shift);
+                        return EditState.Continue;
+                    }
+
+                // Submit
+                case KeyCode.Return:
+                case KeyCode.KeypadEnter:
+                    {
+                        if (lineType != LineType.MultiLineNewline)
+                        {
+                            m_ReleaseSelection = true;
+                            return EditState.Finish;
+                        }
+                        break;
+                    }
+
+                case KeyCode.Escape:
+                    {
+                        m_ReleaseSelection = true;
+                        m_WasCanceled = true;
+                        return EditState.Finish;
+                    }
+            }
+
+            char c = evt.character;
+
+            // Don't allow return chars or tabulator key to be entered into single line fields.
+            if (!multiLine && (c == '\t' || c == '\r' || c == 10))
+                return EditState.Continue;
+
+            // Convert carriage return and end-of-text characters to newline.
+            if (c == '\r' || (int)c == 3)
+                c = '\n';
+
+            if (IsValidChar(c))
+            {
+                Append(c);
+            }
+
+            if (c == 0)
+            {
+                if (compositionString.Length > 0)
+                {
+                    UpdateLabel();
+                }
+            }
+            return EditState.Continue;
+        }
+
+        protected virtual bool IsValidChar(char c)
+        {
+            // Delete key on mac
+            if ((int)c == 127)
+                return false;
+            // Accept newline and tab
+            if (c == '\t' || c == '\n')
+                return true;
+
+            return true;
+
+            // With the addition of Dynamic support, I think this will best be handled by the text component.
+            //return m_TextComponent.font.HasCharacter(c, true);
+        }
+
+        /// <summary>
+        /// Handle the specified event.
+        /// </summary>
+        private Event m_ProcessingEvent = new Event();
+
+        public void ProcessEvent(Event e)
+        {
+            KeyPressed(e);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="eventData"></param>
+        public virtual void OnUpdateSelected(BaseEventData eventData)
+        {
+            if (!isFocused)
+                return;
+
+            bool consumedEvent = false;
+            while (Event.PopEvent(m_ProcessingEvent))
+            {
+                if (m_ProcessingEvent.rawType == EventType.KeyDown)
+                {
+                    //Debug.Log("Event: " + m_ProcessingEvent.ToString());
+
+                    consumedEvent = true;
+                    var shouldContinue = KeyPressed(m_ProcessingEvent);
+                    if (shouldContinue == EditState.Finish)
+                    {
+                        SendOnSubmit();
+                        DeactivateInputField();
+                        break;
+                    }
+                }
+
+                switch (m_ProcessingEvent.type)
+                {
+                    case EventType.ValidateCommand:
+                    case EventType.ExecuteCommand:
+                        switch (m_ProcessingEvent.commandName)
+                        {
+                            case "SelectAll":
+                                SelectAll();
+                                consumedEvent = true;
+                                break;
+                        }
+                        break;
+                }
+            }
+
+            if (consumedEvent)
+                UpdateLabel();
+
+            eventData.Use();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="eventData"></param>
+        public virtual void OnScroll(PointerEventData eventData)
+        {
+            if (m_TextComponent.preferredHeight < m_TextViewport.rect.height) return;
+
+            float scrollDirection = -eventData.scrollDelta.y;
+
+            m_ScrollPosition = m_ScrollPosition + (1f / m_TextComponent.textInfo.lineCount) * scrollDirection * m_ScrollSensitivity;
+
+            m_ScrollPosition = Mathf.Clamp01(m_ScrollPosition);
+
+            AdjustTextPositionRelativeToViewport(m_ScrollPosition);
+
+            // Disable focus until user re-selected the input field.
+            m_AllowInput = false;
+
+            if (m_VerticalScrollbar)
+            {
+                m_IsUpdatingScrollbarValues = true;
+                m_VerticalScrollbar.value = m_ScrollPosition;
+            }
+
+            //Debug.Log("Scroll Position:" + m_ScrollPosition);
+        }
+
+
+        private string GetSelectedString()
+        {
+            if (!hasSelection)
+                return "";
+
+            int startPos = stringPositionInternal;
+            int endPos = stringSelectPositionInternal;
+
+            // Ensure pos is always less then selPos to make the code simpler
+            if (startPos > endPos)
+            {
+                int temp = startPos;
+                startPos = endPos;
+                endPos = temp;
+            }
+
+            //for (int i = m_CaretPosition; i < m_CaretSelectPosition; i++)
+            //{
+            //    Debug.Log("Character [" + m_TextComponent.textInfo.characterInfo[i].character + "] using Style [" + m_TextComponent.textInfo.characterInfo[i].style + "] has been selected.");
+            //}
+
+
+            return text.Substring(startPos, endPos - startPos);
+        }
+
+        private int FindNextWordBegin()
+        {
+            if (stringSelectPositionInternal + 1 >= text.Length)
+                return text.Length;
+
+            int spaceLoc = text.IndexOfAny(kSeparators, stringSelectPositionInternal + 1);
+
+            if (spaceLoc == -1)
+                spaceLoc = text.Length;
+            else
+                spaceLoc++;
+
+            return spaceLoc;
+        }
+
+        private void MoveRight(bool shift, bool ctrl)
+        {
+            if (hasSelection && !shift)
+            {
+                // By convention, if we have a selection and move right without holding shift,
+                // we just place the cursor at the end.
+                stringPositionInternal = stringSelectPositionInternal = Mathf.Max(stringPositionInternal, stringSelectPositionInternal);
+                caretPositionInternal = caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+
+                #if TMP_DEBUG_MODE
+                    Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+                #endif
+                return;
+            }
+
+            int position;
+            if (ctrl)
+                position = FindNextWordBegin();
+            else
+            {
+                if (m_isRichTextEditingAllowed)
+                {
+                    // Special handling for Surrogate pairs and Diacritical marks.
+                    if (stringSelectPositionInternal < text.Length && char.IsHighSurrogate(text[stringSelectPositionInternal]))
+                        position = stringSelectPositionInternal + 2;
+                    else
+                        position = stringSelectPositionInternal + 1;
+                }
+                else
+                {
+                    position = m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal].index + m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal].stringLength;
+                }
+
+            }
+
+            if (shift)
+            {
+                stringSelectPositionInternal = position;
+                caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+            }
+            else
+            {
+                stringSelectPositionInternal = stringPositionInternal = position;
+
+                // Only increase caret position as we cross character boundary.
+                if (stringPositionInternal >= m_TextComponent.textInfo.characterInfo[caretPositionInternal].index + m_TextComponent.textInfo.characterInfo[caretPositionInternal].stringLength)
+                    caretSelectPositionInternal = caretPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + "  Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + "  String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        private int FindPrevWordBegin()
+        {
+            if (stringSelectPositionInternal - 2 < 0)
+                return 0;
+
+            int spaceLoc = text.LastIndexOfAny(kSeparators, stringSelectPositionInternal - 2);
+
+            if (spaceLoc == -1)
+                spaceLoc = 0;
+            else
+                spaceLoc++;
+
+            return spaceLoc;
+        }
+
+        private void MoveLeft(bool shift, bool ctrl)
+        {
+            if (hasSelection && !shift)
+            {
+                // By convention, if we have a selection and move left without holding shift,
+                // we just place the cursor at the start.
+                stringPositionInternal = stringSelectPositionInternal = Mathf.Min(stringPositionInternal, stringSelectPositionInternal);
+                caretPositionInternal = caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+
+                #if TMP_DEBUG_MODE
+                    Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+                #endif
+                return;
+            }
+
+            int position;
+            if (ctrl)
+                position = FindPrevWordBegin();
+            else
+            {
+                if (m_isRichTextEditingAllowed)
+                {
+                    // Special handling for Surrogate pairs and Diacritical marks.
+                    if (stringSelectPositionInternal > 0 && char.IsLowSurrogate(text[stringSelectPositionInternal - 1]))
+                        position = stringSelectPositionInternal - 2;
+                    else
+                        position =  stringSelectPositionInternal - 1;
+                }
+                else
+                {
+                    //position = GetStringIndexFromCaretPosition(caretSelectPositionInternal - 1);
+                    position = caretSelectPositionInternal < 2
+                        ? m_TextComponent.textInfo.characterInfo[0].index
+                        : m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 2].index + m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 2].stringLength;
+                }
+            }
+
+            if (shift)
+            {
+                stringSelectPositionInternal = position;
+                caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+            }
+            else
+            {
+                stringSelectPositionInternal = stringPositionInternal = position;
+
+                // Only decrease caret position as we cross character boundary. 
+                if (caretPositionInternal > 0 && stringPositionInternal <= m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1].index)
+                    caretSelectPositionInternal = caretPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + "  Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + "  String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+
+        private int LineUpCharacterPosition(int originalPos, bool goToFirstChar)
+        {
+            if (originalPos >= m_TextComponent.textInfo.characterCount)
+                originalPos -= 1;
+
+            TMP_CharacterInfo originChar = m_TextComponent.textInfo.characterInfo[originalPos];
+            int originLine = originChar.lineNumber;
+
+            // We are on the first line return first character
+            if (originLine - 1 < 0)
+                return goToFirstChar ? 0 : originalPos;
+
+            int endCharIdx = m_TextComponent.textInfo.lineInfo[originLine].firstCharacterIndex - 1;
+
+            int closest = -1;
+            float distance = TMP_Math.FLOAT_MAX;
+            float range = 0;
+
+            for (int i = m_TextComponent.textInfo.lineInfo[originLine - 1].firstCharacterIndex; i < endCharIdx; ++i)
+            {
+                TMP_CharacterInfo currentChar = m_TextComponent.textInfo.characterInfo[i];
+
+                float d = originChar.origin - currentChar.origin;
+                float r = d / (currentChar.xAdvance - currentChar.origin);
+
+                if (r >= 0 && r <= 1)
+                {
+                    if (r < 0.5f)
+                        return i;
+                    else
+                        return i + 1;
+                }
+
+                d = Mathf.Abs(d);
+
+                if (d < distance)
+                {
+                    closest = i;
+                    distance = d;
+                    range = r;
+                }
+            }
+
+            if (closest == -1) return endCharIdx;
+
+            //Debug.Log("Returning nearest character with Range = " + range);
+
+            if (range < 0.5f)
+                return closest;
+            else
+                return closest + 1;
+        }
+
+
+        private int LineDownCharacterPosition(int originalPos, bool goToLastChar)
+        {
+            if (originalPos >= m_TextComponent.textInfo.characterCount)
+                return m_TextComponent.textInfo.characterCount - 1; // text.Length;
+
+            TMP_CharacterInfo originChar = m_TextComponent.textInfo.characterInfo[originalPos];
+            int originLine = originChar.lineNumber;
+
+            //// We are on the last line return last character
+            if (originLine + 1 >= m_TextComponent.textInfo.lineCount)
+                return goToLastChar ? m_TextComponent.textInfo.characterCount - 1 : originalPos;
+
+            // Need to determine end line for next line.
+            int endCharIdx = m_TextComponent.textInfo.lineInfo[originLine + 1].lastCharacterIndex;
+
+            int closest = -1;
+            float distance = TMP_Math.FLOAT_MAX;
+            float range = 0;
+
+            for (int i = m_TextComponent.textInfo.lineInfo[originLine + 1].firstCharacterIndex; i < endCharIdx; ++i)
+            {
+                TMP_CharacterInfo currentChar = m_TextComponent.textInfo.characterInfo[i];
+
+                float d = originChar.origin - currentChar.origin;
+                float r = d / (currentChar.xAdvance - currentChar.origin);
+
+                if (r >= 0 && r <= 1)
+                {
+                    if (r < 0.5f)
+                        return i;
+                    else
+                        return i + 1;
+                }
+
+                d = Mathf.Abs(d);
+
+                if (d < distance)
+                {
+                    closest = i;
+                    distance = d;
+                    range = r;
+                }
+            }
+
+            if (closest == -1) return endCharIdx;
+
+            //Debug.Log("Returning nearest character with Range = " + range);
+
+            if (range < 0.5f)
+                return closest;
+            else
+                return closest + 1;
+        }
+
+
+         private int PageUpCharacterPosition(int originalPos, bool goToFirstChar)
+        {
+            if (originalPos >= m_TextComponent.textInfo.characterCount)
+                originalPos -= 1;
+
+            TMP_CharacterInfo originChar = m_TextComponent.textInfo.characterInfo[originalPos];
+            int originLine = originChar.lineNumber;
+
+            // We are on the first line return first character
+            if (originLine - 1 < 0)
+                return goToFirstChar ? 0 : originalPos;
+
+            float viewportHeight = m_TextViewport.rect.height;
+
+            int newLine = originLine - 1;
+            // Iterate through each subsequent line to find the first baseline that is not visible in the viewport.
+            for (; newLine > 0; newLine--)
+            {
+                if (m_TextComponent.textInfo.lineInfo[newLine].baseline > m_TextComponent.textInfo.lineInfo[originLine].baseline + viewportHeight)
+                    break;
+            }
+
+            int endCharIdx = m_TextComponent.textInfo.lineInfo[newLine].lastCharacterIndex;
+
+            int closest = -1;
+            float distance = TMP_Math.FLOAT_MAX;
+            float range = 0;
+
+            for (int i = m_TextComponent.textInfo.lineInfo[newLine].firstCharacterIndex; i < endCharIdx; ++i)
+            {
+                TMP_CharacterInfo currentChar = m_TextComponent.textInfo.characterInfo[i];
+
+                float d = originChar.origin - currentChar.origin;
+                float r = d / (currentChar.xAdvance - currentChar.origin);
+
+                if (r >= 0 && r <= 1)
+                {
+                    if (r < 0.5f)
+                        return i;
+                    else
+                        return i + 1;
+                }
+
+                d = Mathf.Abs(d);
+
+                if (d < distance)
+                {
+                    closest = i;
+                    distance = d;
+                    range = r;
+                }
+            }
+
+            if (closest == -1) return endCharIdx;
+
+            //Debug.Log("Returning nearest character with Range = " + range);
+
+            if (range < 0.5f)
+                return closest;
+            else
+                return closest + 1;
+        }
+
+
+         private int PageDownCharacterPosition(int originalPos, bool goToLastChar)
+        {
+            if (originalPos >= m_TextComponent.textInfo.characterCount)
+                return m_TextComponent.textInfo.characterCount - 1;
+
+            TMP_CharacterInfo originChar = m_TextComponent.textInfo.characterInfo[originalPos];
+            int originLine = originChar.lineNumber;
+
+            // We are on the last line return last character
+            if (originLine + 1 >= m_TextComponent.textInfo.lineCount)
+                return goToLastChar ? m_TextComponent.textInfo.characterCount - 1 : originalPos;
+
+            float viewportHeight = m_TextViewport.rect.height;
+
+            int newLine = originLine + 1;
+            // Iterate through each subsequent line to find the first baseline that is not visible in the viewport.
+            for (; newLine < m_TextComponent.textInfo.lineCount - 1; newLine++)
+            {
+                if (m_TextComponent.textInfo.lineInfo[newLine].baseline < m_TextComponent.textInfo.lineInfo[originLine].baseline - viewportHeight)
+                    break;
+            }
+
+            // Need to determine end line for next line.
+            int endCharIdx = m_TextComponent.textInfo.lineInfo[newLine].lastCharacterIndex;
+
+            int closest = -1;
+            float distance = TMP_Math.FLOAT_MAX;
+            float range = 0;
+
+            for (int i = m_TextComponent.textInfo.lineInfo[newLine].firstCharacterIndex; i < endCharIdx; ++i)
+            {
+                TMP_CharacterInfo currentChar = m_TextComponent.textInfo.characterInfo[i];
+
+                float d = originChar.origin - currentChar.origin;
+                float r = d / (currentChar.xAdvance - currentChar.origin);
+
+                if (r >= 0 && r <= 1)
+                {
+                    if (r < 0.5f)
+                        return i;
+                    else
+                        return i + 1;
+                }
+
+                d = Mathf.Abs(d);
+
+                if (d < distance)
+                {
+                    closest = i;
+                    distance = d;
+                    range = r;
+                }
+            }
+
+            if (closest == -1) return endCharIdx;
+
+            if (range < 0.5f)
+                return closest;
+            else
+                return closest + 1;
+        }
+
+
+        private void MoveDown(bool shift)
+        {
+            MoveDown(shift, true);
+        }
+
+
+        private void MoveDown(bool shift, bool goToLastChar)
+        {
+            if (hasSelection && !shift)
+            {
+                // If we have a selection and press down without shift,
+                // set caret to end of selection before we move it down.
+                caretPositionInternal = caretSelectPositionInternal = Mathf.Max(caretPositionInternal, caretSelectPositionInternal);
+            }
+
+            int position = multiLine ? LineDownCharacterPosition(caretSelectPositionInternal, goToLastChar) : m_TextComponent.textInfo.characterCount - 1; // text.Length;
+
+            if (shift)
+            {
+                caretSelectPositionInternal = position;
+                stringSelectPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+            else
+            {
+                caretSelectPositionInternal = caretPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        private void MoveUp(bool shift)
+        {
+            MoveUp(shift, true);
+        }
+
+
+        private void MoveUp(bool shift, bool goToFirstChar)
+        {
+            if (hasSelection && !shift)
+            {
+                // If we have a selection and press up without shift,
+                // set caret position to start of selection before we move it up.
+                caretPositionInternal = caretSelectPositionInternal = Mathf.Min(caretPositionInternal, caretSelectPositionInternal);
+            }
+
+            int position = multiLine ? LineUpCharacterPosition(caretSelectPositionInternal, goToFirstChar) : 0;
+
+            if (shift)
+            {
+                caretSelectPositionInternal = position;
+                stringSelectPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+            else
+            {
+                caretSelectPositionInternal = caretPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+
+        private void MovePageUp(bool shift)
+        {
+            MovePageUp(shift, true);
+        }
+
+        private void MovePageUp(bool shift, bool goToFirstChar)
+        {
+            if (hasSelection && !shift)
+            {
+                // If we have a selection and press up without shift,
+                // set caret position to start of selection before we move it up.
+                caretPositionInternal = caretSelectPositionInternal = Mathf.Min(caretPositionInternal, caretSelectPositionInternal);
+            }
+
+            int position = multiLine ? PageUpCharacterPosition(caretSelectPositionInternal, goToFirstChar) : 0;
+
+            if (shift)
+            {
+                caretSelectPositionInternal = position;
+                stringSelectPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+            else
+            {
+                caretSelectPositionInternal = caretPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+
+
+            // Scroll to top of viewport
+            //int currentLine = m_TextComponent.textInfo.characterInfo[position].lineNumber;
+            //float lineAscender = m_TextComponent.textInfo.lineInfo[currentLine].ascender;
+
+            // Adjust text area up or down if not in single line mode.
+            if (m_LineType != LineType.SingleLine)
+            {
+                float offset = m_TextViewport.rect.height; // m_TextViewport.rect.yMax - (m_TextComponent.rectTransform.anchoredPosition.y + lineAscender);
+
+                float topTextBounds = m_TextComponent.rectTransform.position.y + m_TextComponent.textBounds.max.y;
+                float topViewportBounds = m_TextViewport.position.y + m_TextViewport.rect.yMax;
+
+                offset = topViewportBounds > topTextBounds + offset ? offset : topViewportBounds - topTextBounds;
+
+                m_TextComponent.rectTransform.anchoredPosition += new Vector2(0, offset);
+                AssignPositioningIfNeeded();
+                m_IsScrollbarUpdateRequired = true;
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+
+        }
+
+
+        private void MovePageDown(bool shift)
+        {
+            MovePageDown(shift, true);
+        }
+
+        private void MovePageDown(bool shift, bool goToLastChar)
+        {
+             if (hasSelection && !shift)
+            {
+                // If we have a selection and press down without shift,
+                // set caret to end of selection before we move it down.
+                caretPositionInternal = caretSelectPositionInternal = Mathf.Max(caretPositionInternal, caretSelectPositionInternal);
+            }
+
+            int position = multiLine ? PageDownCharacterPosition(caretSelectPositionInternal, goToLastChar) : m_TextComponent.textInfo.characterCount - 1;
+
+            if (shift)
+            {
+                caretSelectPositionInternal = position;
+                stringSelectPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+            else
+            {
+                caretSelectPositionInternal = caretPositionInternal = position;
+                stringSelectPositionInternal = stringPositionInternal = GetStringIndexFromCaretPosition(caretSelectPositionInternal);
+            }
+
+            // Scroll to top of viewport
+            //int currentLine = m_TextComponent.textInfo.characterInfo[position].lineNumber;
+            //float lineAscender = m_TextComponent.textInfo.lineInfo[currentLine].ascender;
+
+            // Adjust text area up or down if not in single line mode.
+            if (m_LineType != LineType.SingleLine)
+            {
+                float offset = m_TextViewport.rect.height; // m_TextViewport.rect.yMax - (m_TextComponent.rectTransform.anchoredPosition.y + lineAscender);
+
+                float bottomTextBounds = m_TextComponent.rectTransform.position.y + m_TextComponent.textBounds.min.y;
+                float bottomViewportBounds = m_TextViewport.position.y + m_TextViewport.rect.yMin;
+
+                offset = bottomViewportBounds > bottomTextBounds + offset ? offset : bottomViewportBounds - bottomTextBounds;
+
+                m_TextComponent.rectTransform.anchoredPosition += new Vector2(0, offset);
+                AssignPositioningIfNeeded();
+                m_IsScrollbarUpdateRequired = true;
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+
+        }
+
+        private void Delete()
+        {
+            if (m_ReadOnly)
+                return;
+
+            if (stringPositionInternal == stringSelectPositionInternal)
+                return;
+
+            if (m_isRichTextEditingAllowed || m_isSelectAll)
+            {
+                // Handling of Delete when Rich Text is allowed.
+                if (stringPositionInternal < stringSelectPositionInternal)
+                {
+                    m_Text = text.Remove(stringPositionInternal, stringSelectPositionInternal - stringPositionInternal);
+                    stringSelectPositionInternal = stringPositionInternal;
+                }
+                else
+                {
+                    m_Text = text.Remove(stringSelectPositionInternal, stringPositionInternal - stringSelectPositionInternal);
+                    stringPositionInternal = stringSelectPositionInternal;
+                }
+
+                m_isSelectAll = false;
+            }
+            else
+            {
+                if (caretPositionInternal < caretSelectPositionInternal)
+                {
+                    stringPositionInternal = m_TextComponent.textInfo.characterInfo[caretPositionInternal].index;
+                    stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].index + m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal - 1].stringLength;
+
+                    m_Text = text.Remove(stringPositionInternal, stringSelectPositionInternal - stringPositionInternal);
+
+                    stringSelectPositionInternal = stringPositionInternal;
+                    caretSelectPositionInternal = caretPositionInternal;
+                }
+                else
+                {
+                    stringPositionInternal = m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1].index + m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1].stringLength;
+                    stringSelectPositionInternal = m_TextComponent.textInfo.characterInfo[caretSelectPositionInternal].index;
+
+                    m_Text = text.Remove(stringSelectPositionInternal, stringPositionInternal - stringSelectPositionInternal);
+
+                    stringPositionInternal = stringSelectPositionInternal;
+                    caretPositionInternal = caretSelectPositionInternal;
+                }
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        /// <summary>
+        /// Handling of DEL key
+        /// </summary>
+        private void DeleteKey()
+        {
+            if (m_ReadOnly)
+                return;
+
+            if (hasSelection)
+            {
+                Delete();
+                UpdateTouchKeyboardFromEditChanges();
+                SendOnValueChangedAndUpdateLabel();
+            }
+            else
+            {
+                if (m_isRichTextEditingAllowed)
+                {
+                    if (stringPositionInternal < text.Length)
+                    {
+                        // Special handling for Surrogate Pairs
+                        if (char.IsHighSurrogate(text[stringPositionInternal]))
+                            m_Text = text.Remove(stringPositionInternal, 2);
+                        else
+                            m_Text = text.Remove(stringPositionInternal, 1);
+
+                        UpdateTouchKeyboardFromEditChanges();
+                        SendOnValueChangedAndUpdateLabel();
+                    }
+                }
+                else
+                {
+                    if (caretPositionInternal < m_TextComponent.textInfo.characterCount - 1)
+                    {
+                        int numberOfCharactersToRemove = m_TextComponent.textInfo.characterInfo[caretPositionInternal].stringLength;
+
+                        // Adjust string position to skip any potential rich text tags.
+                        int nextCharacterStringPosition = m_TextComponent.textInfo.characterInfo[caretPositionInternal].index;
+
+                        m_Text = text.Remove(nextCharacterStringPosition, numberOfCharactersToRemove);
+
+                        SendOnValueChangedAndUpdateLabel();
+                    }
+                }
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        /// <summary>
+        /// Handling of Backspace key
+        /// </summary>
+        private void Backspace()
+        {
+            if (m_ReadOnly)
+                return;
+
+            if (hasSelection)
+            {
+                Delete();
+                UpdateTouchKeyboardFromEditChanges();
+                SendOnValueChangedAndUpdateLabel();
+            }
+            else
+            {
+                if (m_isRichTextEditingAllowed)
+                {
+                    if (stringPositionInternal > 0)
+                    {
+                        int numberOfCharactersToRemove = 1;
+
+                        // Special handling for Surrogate pairs and Diacritical marks
+                        if (char.IsLowSurrogate(text[stringPositionInternal - 1]))
+                            numberOfCharactersToRemove = 2;
+
+                        stringSelectPositionInternal = stringPositionInternal = stringPositionInternal - numberOfCharactersToRemove;
+
+                        m_Text = text.Remove(stringPositionInternal, numberOfCharactersToRemove);
+
+                        caretSelectPositionInternal = caretPositionInternal = caretPositionInternal - 1;
+
+                        m_isLastKeyBackspace = true;
+
+                        UpdateTouchKeyboardFromEditChanges();
+                        SendOnValueChangedAndUpdateLabel();
+                    }
+                }
+                else
+                {
+                    if (caretPositionInternal > 0)
+                    {
+                        int numberOfCharactersToRemove = m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1].stringLength;
+
+                        // Delete the previous character
+                        m_Text = text.Remove(m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1].index, numberOfCharactersToRemove);
+
+                        // Get new adjusted string position
+                        stringSelectPositionInternal = stringPositionInternal = caretPositionInternal < 2
+                            ? m_TextComponent.textInfo.characterInfo[0].index
+                            : m_TextComponent.textInfo.characterInfo[caretPositionInternal - 2].index + m_TextComponent.textInfo.characterInfo[caretPositionInternal - 2].stringLength;
+
+                        caretSelectPositionInternal = caretPositionInternal = caretPositionInternal - 1;
+                    }
+
+                    m_isLastKeyBackspace = true;
+
+                    UpdateTouchKeyboardFromEditChanges();
+                    SendOnValueChangedAndUpdateLabel();
+                }
+
+            }
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+
+        /// <summary>
+        /// Append the specified text to the end of the current.
+        /// </summary>
+        protected virtual void Append(string input)
+        {
+            if (m_ReadOnly)
+                return;
+
+            if (InPlaceEditing() == false)
+                return;
+
+            for (int i = 0, imax = input.Length; i < imax; ++i)
+            {
+                char c = input[i];
+
+                if (c >= ' ' || c == '\t' || c == '\r' || c == 10 || c == '\n')
+                {
+                    Append(c);
+                }
+            }
+        }
+
+        protected virtual void Append(char input)
+        {
+            if (m_ReadOnly)
+                return;
+
+            if (InPlaceEditing() == false)
+                return;
+
+            // If we have an input validator, validate the input first
+            if (onValidateInput != null)
+                input = onValidateInput(text, stringPositionInternal, input);
+            else if (characterValidation == CharacterValidation.CustomValidator)
+            {
+                input = Validate(text, stringPositionInternal, input);
+
+                if (input == 0) return;
+
+                SendOnValueChanged();
+                UpdateLabel();
+
+                return;
+            }
+            else if (characterValidation != CharacterValidation.None)
+                input = Validate(text, stringPositionInternal, input);
+
+            // If the input is invalid, skip it
+            if (input == 0)
+                return;
+
+            // Append the character and update the label
+            Insert(input);
+        }
+
+
+        // Insert the character and update the label.
+        private void Insert(char c)
+        {
+            if (m_ReadOnly)
+                return;
+
+            string replaceString = c.ToString();
+            Delete();
+
+            // Can't go past the character limit
+            if (characterLimit > 0 && text.Length >= characterLimit)
+                return;
+
+            m_Text = text.Insert(m_StringPosition, replaceString);
+
+            if (!char.IsHighSurrogate(c))
+                caretSelectPositionInternal = caretPositionInternal += 1;
+
+            stringSelectPositionInternal = stringPositionInternal += 1;
+
+            UpdateTouchKeyboardFromEditChanges();
+            SendOnValueChanged();
+
+            #if TMP_DEBUG_MODE
+                Debug.Log("Caret Position: " + caretPositionInternal + " Selection Position: " + caretSelectPositionInternal + "  String Position: " + stringPositionInternal + " String Select Position: " + stringSelectPositionInternal);
+            #endif
+        }
+
+        private void UpdateTouchKeyboardFromEditChanges()
+        {
+            // Update the TouchKeyboard's text from edit changes
+            // if in-place editing is allowed
+            if (m_SoftKeyboard != null && InPlaceEditing())
+            {
+                m_SoftKeyboard.text = m_Text;
+            }
+        }
+
+        private void SendOnValueChangedAndUpdateLabel()
+        {
+            UpdateLabel();
+            SendOnValueChanged();
+        }
+
+        private void SendOnValueChanged()
+        {
+            if (onValueChanged != null)
+                onValueChanged.Invoke(text);
+        }
+
+        /// <summary>
+        /// Submit the input field's text.
+        /// </summary>
+
+        protected void SendOnEndEdit()
+        {
+            if (onEndEdit != null)
+                onEndEdit.Invoke(m_Text);
+        }
+
+        protected void SendOnSubmit()
+        {
+            if (onSubmit != null)
+                onSubmit.Invoke(m_Text);
+        }
+
+        protected void SendOnFocus()
+        {
+            if (onSelect != null)
+                onSelect.Invoke(m_Text);
+        }
+
+        protected void SendOnFocusLost()
+        {
+            if (onDeselect != null)
+                onDeselect.Invoke(m_Text);
+        }
+
+        protected void SendOnTextSelection()
+        {
+            m_isSelected = true;
+
+            if (onTextSelection != null)
+                onTextSelection.Invoke(m_Text, stringPositionInternal, stringSelectPositionInternal);
+        }
+
+        protected void SendOnEndTextSelection()
+        {
+            if (!m_isSelected) return;
+
+            if (onEndTextSelection != null)
+                onEndTextSelection.Invoke(m_Text, stringPositionInternal, stringSelectPositionInternal);
+
+            m_isSelected = false;
+        }
+
+        protected void SendTouchScreenKeyboardStatusChanged()
+        {
+            if (onTouchScreenKeyboardStatusChanged != null)
+                onTouchScreenKeyboardStatusChanged.Invoke(m_SoftKeyboard.status);
+        }
+
+
+        /// <summary>
+        /// Update the visual text Text.
+        /// </summary>
+
+        protected void UpdateLabel()
+        {
+            if (m_TextComponent != null && m_TextComponent.font != null && m_PreventCallback == false)
+            {
+                // Prevent callback from the text component as we assign new text. This is to prevent a recursive call.
+                m_PreventCallback = true;
+
+                string fullText;
+                if (compositionString.Length > 0)
+                {
+                    fullText = text.Substring(0, m_StringPosition) + compositionString + text.Substring(m_StringPosition);
+                    
+                    // Should adjust caret position
+                    //Debug.Log("Handling IME Input... [" + compositionString + "] of length [" + compositionString.Length + "] at StringPosition [" + m_StringPosition + "]");
+                    //for (int i = 0; i < compositionString.Length; i++)
+                    //    Debug.Log((uint)compositionString[i]);
+                }
+                else
+                {
+                    fullText = text;
+                    //Debug.Log("Handling Input... [" + text + "]");
+                }
+
+                string processed;
+                if (inputType == InputType.Password)
+                    processed = new string(asteriskChar, fullText.Length);
+                else
+                    processed = fullText;
+
+                bool isEmpty = string.IsNullOrEmpty(fullText);
+
+                if (m_Placeholder != null)
+                    m_Placeholder.enabled = isEmpty;
+
+                if (!isEmpty)
+                {
+                    SetCaretVisible();
+                }
+
+                m_TextComponent.text = processed + "\u200B"; // Extra space is added for Caret tracking.
+
+                // Special handling to limit the number of lines of text in the Input Field.
+                if (m_LineLimit > 0)
+                {
+                    m_TextComponent.ForceMeshUpdate();
+
+                    // Check if text exceeds maximum number of lines.
+                    if (m_TextComponent.textInfo.lineCount > m_LineLimit)
+                    {
+                        int lastValidCharacterIndex = m_TextComponent.textInfo.lineInfo[m_LineLimit - 1].lastCharacterIndex;
+                        int characterStringIndex = m_TextComponent.textInfo.characterInfo[lastValidCharacterIndex].index + m_TextComponent.textInfo.characterInfo[lastValidCharacterIndex].stringLength;
+                        text = processed.Remove(characterStringIndex, processed.Length - characterStringIndex);
+                        m_TextComponent.text = text + "\u200B";
+                    }
+                }
+
+                if (m_IsTextComponentUpdateRequired)
+                {
+                    m_IsTextComponentUpdateRequired = false;
+                    m_TextComponent.ForceMeshUpdate();
+                }
+
+                MarkGeometryAsDirty();
+
+                // Scrollbar should be updated.
+                m_IsScrollbarUpdateRequired = true;
+
+                m_PreventCallback = false;
+            }
+        }
+
+        void UpdateScrollbar()
+        {
+            // Update Scrollbar
+            if (m_VerticalScrollbar)
+            {
+                float size = m_TextViewport.rect.height / m_TextComponent.preferredHeight;
+
+                m_IsUpdatingScrollbarValues = true;
+
+                m_VerticalScrollbar.size = size;
+
+                m_ScrollPosition = m_VerticalScrollbar.value = m_TextComponent.rectTransform.anchoredPosition.y / (m_TextComponent.preferredHeight - m_TextViewport.rect.height);
+
+                //m_VerticalScrollbar.numberOfSteps = (int)(m_TextComponent.textInfo.lineCount / 0.25f); // Replace by scroll sensitivity.
+
+                //Debug.Log("Updating Scrollbar... Value: " + m_VerticalScrollbar.value);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to update the vertical position of the text container when OnValueChanged event is received from the Scrollbar.
+        /// </summary>
+        /// <param name="value"></param>
+        void OnScrollbarValueChange(float value)
+        {
+            if (m_IsUpdatingScrollbarValues) { m_IsUpdatingScrollbarValues = false; return; }
+
+            if (value < 0 || value > 1) return;
+
+            AdjustTextPositionRelativeToViewport(value);
+
+            m_ScrollPosition = value;
+
+            //Debug.Log("Scrollbar value is: " + value + "  Transform POS: " + m_TextComponent.rectTransform.anchoredPosition);
+        }
+
+        /// <summary>
+        /// Adjusts the relative position of the body of the text relative to the viewport.
+        /// </summary>
+        /// <param name="relativePosition"></param>
+        void AdjustTextPositionRelativeToViewport (float relativePosition)
+        {
+            //Debug.Log("- Adjusting vertical text position to " + relativePosition);
+            if (m_TextViewport == null)
+                return;
+
+            TMP_TextInfo textInfo = m_TextComponent.textInfo;
+
+            // Check to make sure we have valid data and lines to query.
+            if (textInfo == null || textInfo.lineInfo == null || textInfo.lineCount == 0 || textInfo.lineCount > textInfo.lineInfo.Length) return;
+
+            //m_TextComponent.rectTransform.anchoredPosition = new Vector2(m_TextComponent.rectTransform.anchoredPosition.x, (textHeight - viewportHeight) * relativePosition);
+            m_TextComponent.rectTransform.anchoredPosition = new Vector2(m_TextComponent.rectTransform.anchoredPosition.x, (m_TextComponent.preferredHeight - m_TextViewport.rect.height) * relativePosition);
+
+            AssignPositioningIfNeeded();
+
+            //Debug.Log("Text height: " + m_TextComponent.preferredHeight + "  Viewport height: " + m_TextViewport.rect.height + "  Adjusted RectTransform anchordedPosition:" + m_TextComponent.rectTransform.anchoredPosition + "  Text Bounds: " + m_TextComponent.bounds.ToString("f3"));
+        }
+
+
+        private int GetCaretPositionFromStringIndex(int stringIndex)
+        {
+            int count = m_TextComponent.textInfo.characterCount;
+
+            for (int i = 0; i < count; i++)
+            {
+                if (m_TextComponent.textInfo.characterInfo[i].index >= stringIndex)
+                    return i;
+            }
+
+            return count;
+        }
+
+        /// <summary>
+        /// Returns / places the caret before the given character at the string index.
+        /// </summary>
+        /// <param name="stringIndex"></param>
+        /// <returns></returns>
+        private int GetMinCaretPositionFromStringIndex(int stringIndex)
+        {
+            int count = m_TextComponent.textInfo.characterCount;
+
+            for (int i = 0; i < count; i++)
+            {
+                if (stringIndex < m_TextComponent.textInfo.characterInfo[i].index + m_TextComponent.textInfo.characterInfo[i].stringLength)
+                    return i;
+            }
+
+            return count;
+        }
+
+        /// <summary>
+        /// Returns / places the caret after the given character at the string index.
+        /// </summary>
+        /// <param name="stringIndex"></param>
+        /// <returns></returns>
+        private int GetMaxCaretPositionFromStringIndex(int stringIndex)
+        {
+            int count = m_TextComponent.textInfo.characterCount;
+
+            for (int i = 0; i < count; i++)
+            {
+                if (m_TextComponent.textInfo.characterInfo[i].index >= stringIndex)
+                    return i;
+            }
+
+            return count;
+        }
+
+        private int GetStringIndexFromCaretPosition(int caretPosition)
+        {
+            // Clamp values between 0 and character count.
+            ClampCaretPos(ref caretPosition);
+
+            return m_TextComponent.textInfo.characterInfo[caretPosition].index;
+        }
+
+
+        public void ForceLabelUpdate()
+        {
+            UpdateLabel();
+        }
+
+        private void MarkGeometryAsDirty()
+        {
+            #if UNITY_EDITOR
+                #if UNITY_2018_3_OR_NEWER
+                if (!Application.isPlaying || UnityEditor.PrefabUtility.IsPartOfPrefabAsset(this))
+                    return;
+                #else
+                if (!Application.isPlaying || UnityEditor.PrefabUtility.GetPrefabObject(gameObject) != null)
+                    return;
+                #endif
+            #endif
+
+            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild(this);
+        }
+
+        public virtual void Rebuild(CanvasUpdate update)
+        {
+            switch (update)
+            {
+                case CanvasUpdate.LatePreRender:
+                    UpdateGeometry();
+                    break;
+            }
+        }
+
+        public virtual void LayoutComplete()
+        { }
+
+        public virtual void GraphicUpdateComplete()
+        { }
+
+        private void UpdateGeometry()
+        {
+            #if UNITY_EDITOR
+            if (!Application.isPlaying)
+                return;
+            #endif
+
+            // No need to draw a cursor on mobile as its handled by the devices keyboard.
+            if (InPlaceEditing() == false)
+                return;
+
+            if (m_CachedInputRenderer == null)
+                return;
+
+            OnFillVBO(mesh);
+
+            m_CachedInputRenderer.SetMesh(mesh);
+        }
+
+
+        /// <summary>
+        /// Method to keep the Caret RectTransform properties in sync with the text object's RectTransform
+        /// </summary>
+        private void AssignPositioningIfNeeded()
+        {
+            if (m_TextComponent != null && caretRectTrans != null &&
+                (caretRectTrans.localPosition != m_TextComponent.rectTransform.localPosition ||
+                 caretRectTrans.localRotation != m_TextComponent.rectTransform.localRotation ||
+                 caretRectTrans.localScale != m_TextComponent.rectTransform.localScale ||
+                 caretRectTrans.anchorMin != m_TextComponent.rectTransform.anchorMin ||
+                 caretRectTrans.anchorMax != m_TextComponent.rectTransform.anchorMax ||
+                 caretRectTrans.anchoredPosition != m_TextComponent.rectTransform.anchoredPosition ||
+                 caretRectTrans.sizeDelta != m_TextComponent.rectTransform.sizeDelta ||
+                 caretRectTrans.pivot != m_TextComponent.rectTransform.pivot))
+            {
+                caretRectTrans.localPosition = m_TextComponent.rectTransform.localPosition;
+                caretRectTrans.localRotation = m_TextComponent.rectTransform.localRotation;
+                caretRectTrans.localScale = m_TextComponent.rectTransform.localScale;
+                caretRectTrans.anchorMin = m_TextComponent.rectTransform.anchorMin;
+                caretRectTrans.anchorMax = m_TextComponent.rectTransform.anchorMax;
+                caretRectTrans.anchoredPosition = m_TextComponent.rectTransform.anchoredPosition;
+                caretRectTrans.sizeDelta = m_TextComponent.rectTransform.sizeDelta;
+                caretRectTrans.pivot = m_TextComponent.rectTransform.pivot;
+
+                // Get updated world corners of viewport.
+                //m_TextViewport.GetLocalCorners(m_ViewportCorners);
+            }
+        }
+
+
+        private void OnFillVBO(Mesh vbo)
+        {
+            using (var helper = new VertexHelper())
+            {
+                if (!isFocused && !m_SelectionStillActive)
+                {
+                    helper.FillMesh(vbo);
+                    return;
+                }
+
+                if (m_IsStringPositionDirty)
+                {
+                    stringPositionInternal = GetStringIndexFromCaretPosition(m_CaretPosition);
+                    stringSelectPositionInternal = GetStringIndexFromCaretPosition(m_CaretSelectPosition);
+                    m_IsStringPositionDirty = false;
+                }
+
+                if (m_IsCaretPositionDirty)
+                {
+                    caretPositionInternal = GetCaretPositionFromStringIndex(stringPositionInternal);
+                    caretSelectPositionInternal = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+                    m_IsCaretPositionDirty = false;
+                }
+
+                if (!hasSelection && !m_ReadOnly)
+                {
+                    GenerateCaret(helper, Vector2.zero);
+                    SendOnEndTextSelection();
+                }
+                else
+                {
+                    GenerateHightlight(helper, Vector2.zero);
+                    SendOnTextSelection();
+                }
+
+                helper.FillMesh(vbo);
+            }
+        }
+
+
+        private void GenerateCaret(VertexHelper vbo, Vector2 roundingOffset)
+        {
+            if (!m_CaretVisible)
+                return;
+
+            if (m_CursorVerts == null)
+            {
+                CreateCursorVerts();
+            }
+
+            float width = m_CaretWidth;
+
+            // TODO: Optimize to only update the caret position when needed.
+
+            Vector2 startPosition = Vector2.zero;
+            float height = 0;
+            TMP_CharacterInfo currentCharacter;
+
+            int currentLine = m_TextComponent.textInfo.characterInfo[caretPositionInternal].lineNumber;
+
+            // Caret is positioned at the origin for the first character of each lines and at the advance for subsequent characters.
+            if (caretPositionInternal == m_TextComponent.textInfo.lineInfo[currentLine].firstCharacterIndex)
+            {
+                currentCharacter = m_TextComponent.textInfo.characterInfo[caretPositionInternal];
+                startPosition = new Vector2(currentCharacter.origin, currentCharacter.descender);
+                height = currentCharacter.ascender - currentCharacter.descender;
+            }
+            else
+            {
+                currentCharacter = m_TextComponent.textInfo.characterInfo[caretPositionInternal - 1];
+                startPosition = new Vector2(currentCharacter.xAdvance, currentCharacter.descender);
+                height = currentCharacter.ascender - currentCharacter.descender;
+            }
+
+            if (m_SoftKeyboard != null)
+                m_SoftKeyboard.selection = new RangeInt(stringPositionInternal, 0);
+
+            // Adjust the position of the RectTransform based on the caret position in the viewport (only if we have focus).
+            if (isFocused && startPosition != m_LastPosition || m_forceRectTransformAdjustment)
+                AdjustRectTransformRelativeToViewport(startPosition, height, currentCharacter.isVisible);
+
+            m_LastPosition = startPosition;
+
+            // Clamp Caret height
+            float top = startPosition.y + height;
+            float bottom = top - height;
+
+            // Minor tweak to address caret potentially being too thin based on canvas scaler values.
+            float scale = m_TextComponent.canvas.scaleFactor;
+
+            m_CursorVerts[0].position = new Vector3(startPosition.x, bottom, 0.0f);
+            m_CursorVerts[1].position = new Vector3(startPosition.x, top, 0.0f);
+            m_CursorVerts[2].position = new Vector3(startPosition.x + (width + 1) / scale, top, 0.0f);
+            m_CursorVerts[3].position = new Vector3(startPosition.x + (width + 1) / scale, bottom, 0.0f);
+
+            // Set Vertex Color for the caret color.
+            m_CursorVerts[0].color = caretColor;
+            m_CursorVerts[1].color = caretColor;
+            m_CursorVerts[2].color = caretColor;
+            m_CursorVerts[3].color = caretColor;
+
+            vbo.AddUIVertexQuad(m_CursorVerts);
+
+            int screenHeight = Screen.height;
+            // Removed multiple display support until it supports none native resolutions(case 741751)
+            //int displayIndex = m_TextComponent.canvas.targetDisplay;
+            //if (Screen.fullScreen && displayIndex < Display.displays.Length)
+            //    screenHeight = Display.displays[displayIndex].renderingHeight;
+
+            startPosition.y = screenHeight - startPosition.y;
+            inputSystem.compositionCursorPos = startPosition;
+
+            //#if TMP_DEBUG_MODE
+            //Debug.Log("Caret position updated at frame: " + Time.frameCount);
+            //#endif
+        }
+
+
+        private void CreateCursorVerts()
+        {
+            m_CursorVerts = new UIVertex[4];
+
+            for (int i = 0; i < m_CursorVerts.Length; i++)
+            {
+                m_CursorVerts[i] = UIVertex.simpleVert;
+                m_CursorVerts[i].uv0 = Vector2.zero;
+            }
+        }
+
+
+        private void GenerateHightlight(VertexHelper vbo, Vector2 roundingOffset)
+        {
+            TMP_TextInfo textInfo = m_TextComponent.textInfo;
+
+            caretPositionInternal = m_CaretPosition = GetCaretPositionFromStringIndex(stringPositionInternal);
+            caretSelectPositionInternal = m_CaretSelectPosition = GetCaretPositionFromStringIndex(stringSelectPositionInternal);
+
+            if (m_SoftKeyboard != null)
+            {
+                int stringPosition = caretPositionInternal < caretSelectPositionInternal ? textInfo.characterInfo[caretPositionInternal].index : textInfo.characterInfo[caretSelectPositionInternal].index;
+                int length = caretPositionInternal < caretSelectPositionInternal ? stringSelectPositionInternal - stringPosition : stringPositionInternal - stringPosition;
+                m_SoftKeyboard.selection = new RangeInt(stringPosition, length);
+            }
+
+            // Adjust text RectTranform position to make sure it is visible in viewport.
+            Vector2 caretPosition;
+            float height = 0;
+            if (caretSelectPositionInternal < textInfo.characterCount)
+            {
+                caretPosition = new Vector2(textInfo.characterInfo[caretSelectPositionInternal].origin, textInfo.characterInfo[caretSelectPositionInternal].descender);
+                height = textInfo.characterInfo[caretSelectPositionInternal].ascender - textInfo.characterInfo[caretSelectPositionInternal].descender;
+            }
+            else
+            {
+                caretPosition = new Vector2(textInfo.characterInfo[caretSelectPositionInternal - 1].xAdvance, textInfo.characterInfo[caretSelectPositionInternal - 1].descender);
+                height = textInfo.characterInfo[caretSelectPositionInternal - 1].ascender - textInfo.characterInfo[caretSelectPositionInternal - 1].descender;
+            }
+
+            // TODO: Don't adjust the position of the RectTransform if Reset On Deactivation is disabled
+            // and we just selected the Input Field again.
+            AdjustRectTransformRelativeToViewport(caretPosition, height, true);
+
+            int startChar = Mathf.Max(0, caretPositionInternal);
+            int endChar = Mathf.Max(0, caretSelectPositionInternal);
+
+            // Ensure pos is always less then selPos to make the code simpler
+            if (startChar > endChar)
+            {
+                int temp = startChar;
+                startChar = endChar;
+                endChar = temp;
+            }
+
+            endChar -= 1;
+
+            //Debug.Log("Updating Highlight... Caret Position: " + startChar + " Caret Select POS: " + endChar);
+
+
+            int currentLineIndex = textInfo.characterInfo[startChar].lineNumber;
+            int nextLineStartIdx = textInfo.lineInfo[currentLineIndex].lastCharacterIndex;
+
+            UIVertex vert = UIVertex.simpleVert;
+            vert.uv0 = Vector2.zero;
+            vert.color = selectionColor;
+
+            int currentChar = startChar;
+            while (currentChar <= endChar && currentChar < textInfo.characterCount)
+            {
+                if (currentChar == nextLineStartIdx || currentChar == endChar)
+                {
+                    TMP_CharacterInfo startCharInfo = textInfo.characterInfo[startChar];
+                    TMP_CharacterInfo endCharInfo = textInfo.characterInfo[currentChar];
+
+                    // Extra check to handle Carriage Return
+                    if (currentChar > 0 && endCharInfo.character == 10 && textInfo.characterInfo[currentChar - 1].character == 13)
+                        endCharInfo = textInfo.characterInfo[currentChar - 1];
+
+                    Vector2 startPosition = new Vector2(startCharInfo.origin, textInfo.lineInfo[currentLineIndex].ascender);
+                    Vector2 endPosition = new Vector2(endCharInfo.xAdvance, textInfo.lineInfo[currentLineIndex].descender);
+
+                    var startIndex = vbo.currentVertCount;
+                    vert.position = new Vector3(startPosition.x, endPosition.y, 0.0f);
+                    vbo.AddVert(vert);
+
+                    vert.position = new Vector3(endPosition.x, endPosition.y, 0.0f);
+                    vbo.AddVert(vert);
+
+                    vert.position = new Vector3(endPosition.x, startPosition.y, 0.0f);
+                    vbo.AddVert(vert);
+
+                    vert.position = new Vector3(startPosition.x, startPosition.y, 0.0f);
+                    vbo.AddVert(vert);
+
+                    vbo.AddTriangle(startIndex, startIndex + 1, startIndex + 2);
+                    vbo.AddTriangle(startIndex + 2, startIndex + 3, startIndex + 0);
+
+                    startChar = currentChar + 1;
+                    currentLineIndex++;
+
+                    if (currentLineIndex < textInfo.lineCount)
+                        nextLineStartIdx = textInfo.lineInfo[currentLineIndex].lastCharacterIndex;
+                }
+                currentChar++;
+            }
+
+            // Scrollbar should be updated.
+            m_IsScrollbarUpdateRequired = true;
+
+            //#if TMP_DEBUG_MODE
+            //    Debug.Log("Text selection updated at frame: " + Time.frameCount);
+            //#endif
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="startPosition"></param>
+        /// <param name="height"></param>
+        /// <param name="isCharVisible"></param>
+        private void AdjustRectTransformRelativeToViewport(Vector2 startPosition, float height, bool isCharVisible)
+        {
+            //Debug.Log("Adjusting transform position relative to viewport.");
+
+            if (m_TextViewport == null || m_IsDrivenByLayoutComponents)
+                return;
+
+            float viewportMin = m_TextViewport.rect.xMin;
+            float viewportMax = m_TextViewport.rect.xMax;
+
+            //Debug.Log("Viewport Rect: " + viewportMax + "  Start Position: " + startPosition);
+            // Adjust the position of the RectTransform based on the caret position in the viewport.
+            float rightOffset = viewportMax - (m_TextComponent.rectTransform.anchoredPosition.x + startPosition.x + m_TextComponent.margin.z + m_CaretWidth);
+            if (rightOffset < 0f)
+            {
+                if (!multiLine || (multiLine && isCharVisible))
+                {
+                    //Debug.Log("Shifting text to the right by " + rightOffset.ToString("f3"));
+                    m_TextComponent.rectTransform.anchoredPosition += new Vector2(rightOffset, 0);
+
+                    AssignPositioningIfNeeded();
+                }
+            }
+
+            float leftOffset = (m_TextComponent.rectTransform.anchoredPosition.x + startPosition.x - m_TextComponent.margin.x) - viewportMin;
+            if (leftOffset < 0f)
+            {
+                //Debug.Log("Shifting text to the left by " + leftOffset.ToString("f3"));
+                m_TextComponent.rectTransform.anchoredPosition += new Vector2(-leftOffset, 0);
+                AssignPositioningIfNeeded();
+            }
+
+
+            // Adjust text area up or down if not in single line mode.
+            if (m_LineType != LineType.SingleLine)
+            {
+                float topOffset = m_TextViewport.rect.yMax - (m_TextComponent.rectTransform.anchoredPosition.y + startPosition.y + height);
+                if (topOffset < -0.0001f)
+                {
+                    m_TextComponent.rectTransform.anchoredPosition += new Vector2(0, topOffset);
+                    AssignPositioningIfNeeded();
+                    m_IsScrollbarUpdateRequired = true;
+                }
+
+                float bottomOffset = (m_TextComponent.rectTransform.anchoredPosition.y + startPosition.y) - m_TextViewport.rect.yMin;
+                if (bottomOffset < 0f)
+                {
+                    m_TextComponent.rectTransform.anchoredPosition -= new Vector2(0, bottomOffset);
+                    AssignPositioningIfNeeded();
+                    m_IsScrollbarUpdateRequired = true;
+                }
+            }
+
+            // Special handling of backspace
+            if (m_isLastKeyBackspace)
+            {
+                float firstCharPosition = m_TextComponent.rectTransform.anchoredPosition.x + m_TextComponent.textInfo.characterInfo[0].origin - m_TextComponent.margin.x;
+                float lastCharPosition = m_TextComponent.rectTransform.anchoredPosition.x + m_TextComponent.textInfo.characterInfo[m_TextComponent.textInfo.characterCount - 1].origin + m_TextComponent.margin.z;
+
+                // Check if caret is at the left most position of the viewport
+                if (m_TextComponent.rectTransform.anchoredPosition.x + startPosition.x <= viewportMin + 0.0001f)
+                {
+                    if (firstCharPosition < viewportMin)
+                    {
+                        float offset = Mathf.Min((viewportMax - viewportMin) / 2, viewportMin - firstCharPosition);
+                        m_TextComponent.rectTransform.anchoredPosition += new Vector2(offset, 0);
+                        AssignPositioningIfNeeded();
+                    }
+                }
+                else if (lastCharPosition < viewportMax && firstCharPosition < viewportMin)
+                {
+                    float offset = Mathf.Min(viewportMax - lastCharPosition, viewportMin - firstCharPosition);
+
+                    m_TextComponent.rectTransform.anchoredPosition += new Vector2(offset, 0);
+                    AssignPositioningIfNeeded();
+                }
+
+                m_isLastKeyBackspace = false;
+            }
+
+            m_forceRectTransformAdjustment = false;
+        }
+
+        /// <summary>
+        /// Validate the specified input.
+        /// </summary>
+        protected char Validate(string text, int pos, char ch)
+        {
+            // Validation is disabled
+            if (characterValidation == CharacterValidation.None || !enabled)
+                return ch;
+
+            if (characterValidation == CharacterValidation.Integer || characterValidation == CharacterValidation.Decimal)
+            {
+                // Integer and decimal
+                bool cursorBeforeDash = (pos == 0 && text.Length > 0 && text[0] == '-');
+                bool selectionAtStart = stringPositionInternal == 0 || stringSelectPositionInternal == 0;
+                if (!cursorBeforeDash)
+                {
+                    if (ch >= '0' && ch <= '9') return ch;
+                    if (ch == '-' && (pos == 0 || selectionAtStart)) return ch;
+                    if (ch == '.' && characterValidation == CharacterValidation.Decimal && !text.Contains(".")) return ch;
+                }
+            }
+            else if (characterValidation == CharacterValidation.Digit)
+            {
+                if (ch >= '0' && ch <= '9') return ch;
+            }
+            else if (characterValidation == CharacterValidation.Alphanumeric)
+            {
+                // All alphanumeric characters
+                if (ch >= 'A' && ch <= 'Z') return ch;
+                if (ch >= 'a' && ch <= 'z') return ch;
+                if (ch >= '0' && ch <= '9') return ch;
+            }
+            else if (characterValidation == CharacterValidation.Name)
+            {
+                char lastChar = (text.Length > 0) ? text[Mathf.Clamp(pos, 0, text.Length - 1)] : ' ';
+                char nextChar = (text.Length > 0) ? text[Mathf.Clamp(pos + 1, 0, text.Length - 1)] : '\n';
+
+                if (char.IsLetter(ch))
+                {
+                    // Space followed by a letter -- make sure it's capitalized
+                    if (char.IsLower(ch) && lastChar == ' ')
+                        return char.ToUpper(ch);
+
+                    // Uppercase letters are only allowed after spaces (and apostrophes)
+                    if (char.IsUpper(ch) && lastChar != ' ' && lastChar != '\'')
+                        return char.ToLower(ch);
+
+                    // If character was already in correct case, return it as-is.
+                    // Also, letters that are neither upper nor lower case are always allowed.
+                    return ch;
+                }
+                else if (ch == '\'')
+                {
+                    // Don't allow more than one apostrophe
+                    if (lastChar != ' ' && lastChar != '\'' && nextChar != '\'' && !text.Contains("'"))
+                        return ch;
+                }
+                else if (ch == ' ')
+                {
+                    // Don't allow more than one space in a row
+                    if (lastChar != ' ' && lastChar != '\'' && nextChar != ' ' && nextChar != '\'')
+                        return ch;
+                }
+            }
+            else if (characterValidation == CharacterValidation.EmailAddress)
+            {
+                // From StackOverflow about allowed characters in email addresses:
+                // Uppercase and lowercase English letters (a-z, A-Z)
+                // Digits 0 to 9
+                // Characters ! # $ % & ' * + - / = ? ^ _ ` { | } ~
+                // Character . (dot, period, full stop) provided that it is not the first or last character,
+                // and provided also that it does not appear two or more times consecutively.
+
+                if (ch >= 'A' && ch <= 'Z') return ch;
+                if (ch >= 'a' && ch <= 'z') return ch;
+                if (ch >= '0' && ch <= '9') return ch;
+                if (ch == '@' && text.IndexOf('@') == -1) return ch;
+                if (kEmailSpecialCharacters.IndexOf(ch) != -1) return ch;
+                if (ch == '.')
+                {
+                    char lastChar = (text.Length > 0) ? text[Mathf.Clamp(pos, 0, text.Length - 1)] : ' ';
+                    char nextChar = (text.Length > 0) ? text[Mathf.Clamp(pos + 1, 0, text.Length - 1)] : '\n';
+                    if (lastChar != '.' && nextChar != '.')
+                        return ch;
+                }
+            }
+            else if (characterValidation == CharacterValidation.Regex)
+            {
+                // Regex expression
+                if (Regex.IsMatch(ch.ToString(), m_RegexValue))
+                {
+                    return ch;
+                }
+            }
+            else if (characterValidation == CharacterValidation.CustomValidator)
+            {
+                if (m_InputValidator != null)
+                {
+                    char c = m_InputValidator.Validate(ref text, ref pos, ch);
+                    m_Text = text;
+                    stringSelectPositionInternal = stringPositionInternal = pos;
+                    return c;
+                }
+            }
+            return (char)0;
+        }
+
+        public void ActivateInputField()
+        {
+            if (m_TextComponent == null || m_TextComponent.font == null || !IsActive() || !IsInteractable())
+                return;
+
+            if (isFocused)
+            {
+                if (m_SoftKeyboard != null && !m_SoftKeyboard.active)
+                {
+                    m_SoftKeyboard.active = true;
+                    m_SoftKeyboard.text = m_Text;
+                }
+            }
+
+            m_ShouldActivateNextUpdate = true;
+        }
+
+        private void ActivateInputFieldInternal()
+        {
+            if (EventSystem.current == null)
+                return;
+
+            if (EventSystem.current.currentSelectedGameObject != gameObject)
+                EventSystem.current.SetSelectedGameObject(gameObject);
+
+            if (TouchScreenKeyboard.isSupported && shouldHideSoftKeyboard == false)
+            {
+                if (inputSystem.touchSupported)
+                {
+                    TouchScreenKeyboard.hideInput = shouldHideMobileInput;
+                }
+
+                if (shouldHideSoftKeyboard == false && m_ReadOnly == false && contentType != ContentType.Custom)
+                {
+                    m_SoftKeyboard = (inputType == InputType.Password) ?
+                        TouchScreenKeyboard.Open(m_Text, keyboardType, false, multiLine, true, false, "", characterLimit) :
+                        TouchScreenKeyboard.Open(m_Text, keyboardType, inputType == InputType.AutoCorrect, multiLine, false, false, "", characterLimit);
+
+                    if (shouldHideMobileInput == false)
+                    {
+                        MoveTextEnd(false);
+                    }
+                    else
+                    {
+                        OnFocus();
+
+                        // Opening the soft keyboard sets its selection to the end of the text. 
+                        // As such, we set the selection to match the Input Field's internal selection.
+                        if (m_SoftKeyboard != null)
+                        {
+                            int length = stringPositionInternal < stringSelectPositionInternal ? stringSelectPositionInternal - stringPositionInternal : stringPositionInternal - stringSelectPositionInternal;
+                            m_SoftKeyboard.selection = new RangeInt(stringPositionInternal < stringSelectPositionInternal ? stringPositionInternal : stringSelectPositionInternal, length);
+                        }
+                    }
+                }
+
+                // Cache the value of isInPlaceEditingAllowed, because on UWP this involves calling into native code
+                // The value only needs to be updated once when the TouchKeyboard is opened.
+                #if UNITY_2019_1_OR_NEWER
+                m_TouchKeyboardAllowsInPlaceEditing = TouchScreenKeyboard.isInPlaceEditingAllowed;
+                #endif
+            }
+            else
+            {
+                if (!TouchScreenKeyboard.isSupported)
+                    inputSystem.imeCompositionMode = IMECompositionMode.On;
+
+                OnFocus();
+            }
+
+            m_AllowInput = true;
+            m_OriginalText = text;
+            m_WasCanceled = false;
+            SetCaretVisible();
+            UpdateLabel();
+        }
+
+        public override void OnSelect(BaseEventData eventData)
+        {
+            //Debug.Log("OnSelect()");
+
+            base.OnSelect(eventData);
+            SendOnFocus();
+
+            ActivateInputField();
+        }
+
+        public virtual void OnPointerClick(PointerEventData eventData)
+        {
+            //Debug.Log("Pointer Click Event...");
+
+            if (eventData.button != PointerEventData.InputButton.Left)
+                return;
+
+            ActivateInputField();
+        }
+
+        public void OnControlClick()
+        {
+            //Debug.Log("Input Field control click...");
+        }
+
+        public void ReleaseSelection()
+        {
+            m_SelectionStillActive = false;
+            MarkGeometryAsDirty();
+        }
+
+        public void DeactivateInputField(bool clearSelection = false)
+        {
+            //Debug.Log("Deactivate Input Field...");
+
+            // Not activated do nothing.
+            if (!m_AllowInput)
+                return;
+
+            m_HasDoneFocusTransition = false;
+            m_AllowInput = false;
+
+            if (m_Placeholder != null)
+                m_Placeholder.enabled = string.IsNullOrEmpty(m_Text);
+
+            if (m_TextComponent != null && IsInteractable())
+            {
+                if (m_WasCanceled && m_RestoreOriginalTextOnEscape)
+                    text = m_OriginalText;
+
+                if (m_SoftKeyboard != null)
+                {
+                    m_SoftKeyboard.active = false;
+                    m_SoftKeyboard = null;
+                }
+
+                m_SelectionStillActive = true;
+
+                if (m_ResetOnDeActivation || m_ReleaseSelection)
+                {
+                    //m_StringPosition = m_StringSelectPosition = 0;
+                    //m_CaretPosition = m_CaretSelectPosition = 0;
+                    //m_TextComponent.rectTransform.localPosition = m_DefaultTransformPosition;
+
+                    //if (caretRectTrans != null)
+                    //    caretRectTrans.localPosition = Vector3.zero;
+
+                    m_SelectionStillActive = false;
+                    m_ReleaseSelection = false;
+                    m_SelectedObject = null;
+                }
+
+                SendOnEndEdit();
+                SendOnEndTextSelection();
+
+                inputSystem.imeCompositionMode = IMECompositionMode.Auto;
+            }
+
+            MarkGeometryAsDirty();
+
+            // Scrollbar should be updated.
+            m_IsScrollbarUpdateRequired = true;
+        }
+
+        public override void OnDeselect(BaseEventData eventData)
+        {
+            DeactivateInputField();
+
+            base.OnDeselect(eventData);
+            SendOnFocusLost();
+        }
+
+        public virtual void OnSubmit(BaseEventData eventData)
+        {
+            //Debug.Log("OnSubmit()");
+
+            if (!IsActive() || !IsInteractable())
+                return;
+
+            if (!isFocused)
+                m_ShouldActivateNextUpdate = true;
+
+            SendOnSubmit();
+        }
+
+        //public virtual void OnLostFocus(BaseEventData eventData)
+        //{
+        //    if (!IsActive() || !IsInteractable())
+        //        return;
+        //}
+
+        private void EnforceContentType()
+        {
+            switch (contentType)
+            {
+                case ContentType.Standard:
+                    {
+                        // Don't enforce line type for this content type.
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.Default;
+                        m_CharacterValidation = CharacterValidation.None;
+                        break;
+                    }
+                case ContentType.Autocorrected:
+                    {
+                        // Don't enforce line type for this content type.
+                        m_InputType = InputType.AutoCorrect;
+                        m_KeyboardType = TouchScreenKeyboardType.Default;
+                        m_CharacterValidation = CharacterValidation.None;
+                        break;
+                    }
+                case ContentType.IntegerNumber:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.NumberPad;
+                        m_CharacterValidation = CharacterValidation.Integer;
+                        break;
+                    }
+                case ContentType.DecimalNumber:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.NumbersAndPunctuation;
+                        m_CharacterValidation = CharacterValidation.Decimal;
+                        break;
+                    }
+                case ContentType.Alphanumeric:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.ASCIICapable;
+                        m_CharacterValidation = CharacterValidation.Alphanumeric;
+                        break;
+                    }
+                case ContentType.Name:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.Default;
+                        m_CharacterValidation = CharacterValidation.Name;
+                        break;
+                    }
+                case ContentType.EmailAddress:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Standard;
+                        m_KeyboardType = TouchScreenKeyboardType.EmailAddress;
+                        m_CharacterValidation = CharacterValidation.EmailAddress;
+                        break;
+                    }
+                case ContentType.Password:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Password;
+                        m_KeyboardType = TouchScreenKeyboardType.Default;
+                        m_CharacterValidation = CharacterValidation.None;
+                        break;
+                    }
+                case ContentType.Pin:
+                    {
+                        m_LineType = LineType.SingleLine;
+                        m_InputType = InputType.Password;
+                        m_KeyboardType = TouchScreenKeyboardType.NumberPad;
+                        m_CharacterValidation = CharacterValidation.Digit;
+                        break;
+                    }
+                default:
+                    {
+                        // Includes Custom type. Nothing should be enforced.
+                        break;
+                    }
+            }
+
+            SetTextComponentWrapMode();
+        }
+
+        void SetTextComponentWrapMode()
+        {
+            if (m_TextComponent == null)
+                return;
+
+            if (multiLine)
+                m_TextComponent.enableWordWrapping = true;
+            else
+                m_TextComponent.enableWordWrapping = false;
+        }
+
+        // Control Rich Text option on the text component.
+        void SetTextComponentRichTextMode()
+        {
+            if (m_TextComponent == null)
+                return;
+
+            m_TextComponent.richText = m_RichText;
+        }
+
+        void SetToCustomIfContentTypeIsNot(params ContentType[] allowedContentTypes)
+        {
+            if (contentType == ContentType.Custom)
+                return;
+
+            for (int i = 0; i < allowedContentTypes.Length; i++)
+                if (contentType == allowedContentTypes[i])
+                    return;
+
+            contentType = ContentType.Custom;
+        }
+
+        void SetToCustom()
+        {
+            if (contentType == ContentType.Custom)
+                return;
+
+            contentType = ContentType.Custom;
+        }
+
+        void SetToCustom(CharacterValidation characterValidation)
+        {
+            if (contentType == ContentType.Custom)
+            {
+                characterValidation = CharacterValidation.CustomValidator;
+                return;
+            }
+
+            contentType = ContentType.Custom;
+            characterValidation = CharacterValidation.CustomValidator;
+        }
+
+
+        protected override void DoStateTransition(SelectionState state, bool instant)
+        {
+            if (m_HasDoneFocusTransition)
+                state = SelectionState.Highlighted;
+            else if (state == SelectionState.Pressed)
+                m_HasDoneFocusTransition = true;
+
+            base.DoStateTransition(state, instant);
+        }
+
+
+        /// <summary>
+        /// See ILayoutElement.CalculateLayoutInputHorizontal.
+        /// </summary>
+        public virtual void CalculateLayoutInputHorizontal()
+        { }
+
+        /// <summary>
+        /// See ILayoutElement.CalculateLayoutInputVertical.
+        /// </summary>
+        public virtual void CalculateLayoutInputVertical()
+        { }
+
+        /// <summary>
+        /// See ILayoutElement.minWidth.
+        /// </summary>
+        public virtual float minWidth { get { return 0; } }
+
+        /// <summary>
+        /// Get the displayed with of all input characters.
+        /// </summary>
+        public virtual float preferredWidth
+        {
+            get
+            {
+                if (textComponent == null)
+                    return 0;
+
+                return m_TextComponent.preferredWidth + 16 + m_CaretWidth + 1;
+            }
+        }
+
+        /// <summary>
+        /// See ILayoutElement.flexibleWidth.
+        /// </summary>
+        public virtual float flexibleWidth { get { return -1; } }
+
+        /// <summary>
+        /// See ILayoutElement.minHeight.
+        /// </summary>
+        public virtual float minHeight { get { return 0; } }
+
+        /// <summary>
+        /// Get the height of all the text if constrained to the height of the RectTransform.
+        /// </summary>
+        public virtual float preferredHeight
+        {
+            get
+            {
+                if (textComponent == null)
+                    return 0;
+
+                return m_TextComponent.preferredHeight + 16;
+            }
+        }
+
+        /// <summary>
+        /// See ILayoutElement.flexibleHeight.
+        /// </summary>
+        public virtual float flexibleHeight { get { return -1; } }
+
+        /// <summary>
+        /// See ILayoutElement.layoutPriority.
+        /// </summary>
+        public virtual int layoutPriority { get { return 1; } }
+
+
+        /// <summary>
+        /// Function to conveniently set the point size of both Placeholder and Input Field text object.
+        /// </summary>
+        /// <param name="pointSize"></param>
+        public void SetGlobalPointSize(float pointSize)
+        {
+            TMP_Text placeholderTextComponent = m_Placeholder as TMP_Text;
+
+            if (placeholderTextComponent != null) placeholderTextComponent.fontSize = pointSize;
+            textComponent.fontSize = pointSize;
+        }
+
+        /// <summary>
+        /// Function to conveniently set the Font Asset of both Placeholder and Input Field text object.
+        /// </summary>
+        /// <param name="fontAsset"></param>
+        public void SetGlobalFontAsset(TMP_FontAsset fontAsset)
+        {
+            TMP_Text placeholderTextComponent = m_Placeholder as TMP_Text;
+
+            if (placeholderTextComponent != null) placeholderTextComponent.font = fontAsset;
+            textComponent.font = fontAsset;
+
+        }
+
+    }
+
+
+    static class SetPropertyUtility
+    {
+        public static bool SetColor(ref Color currentValue, Color newValue)
+        {
+            if (currentValue.r == newValue.r && currentValue.g == newValue.g && currentValue.b == newValue.b && currentValue.a == newValue.a)
+                return false;
+
+            currentValue = newValue;
+            return true;
+        }
+
+        public static bool SetEquatableStruct<T>(ref T currentValue, T newValue) where T : IEquatable<T>
+        {
+            if (currentValue.Equals(newValue))
+                return false;
+
+            currentValue = newValue;
+            return true;
+        }
+
+        public static bool SetStruct<T>(ref T currentValue, T newValue) where T : struct
+        {
+            if (currentValue.Equals(newValue))
+                return false;
+
+            currentValue = newValue;
+            return true;
+        }
+
+        public static bool SetClass<T>(ref T currentValue, T newValue) where T : class
+        {
+            if ((currentValue == null && newValue == null) || (currentValue != null && currentValue.Equals(newValue)))
+                return false;
+
+            currentValue = newValue;
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d05a16b9a93bf3220b1395d03ef17a05ab34f784
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2da0c512f12947e489f739169773d7ca
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs
new file mode 100644
index 0000000000000000000000000000000000000000..026766a22b7421055aa12ecb7dc7ecf66fd32aeb
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs
@@ -0,0 +1,15 @@
+using UnityEngine;
+using System.Collections;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Custom text input validator where user can implement their own custom character validation.
+    /// </summary>
+    [System.Serializable]
+    public abstract class TMP_InputValidator : ScriptableObject
+    {
+        public abstract char Validate(ref string text, ref int pos, char ch);
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..0ce769ef0523ac75ee57962510b5daf882944b4a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_InputValidator.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 79ff392d1bde4ad78a3836a4a480392d
+timeCreated: 1473021069
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c1794b1ed5d91ce47067e907b52100473a754f98
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs
@@ -0,0 +1,52 @@
+namespace TMPro
+{
+
+    /// <summary>
+    /// Structure which contains information about the individual lines of text.
+    /// </summary>
+    public struct TMP_LineInfo
+    {
+        internal int controlCharacterCount;
+
+        public int characterCount;
+        public int visibleCharacterCount;
+        public int spaceCount;
+        public int wordCount;
+        public int firstCharacterIndex;
+        public int firstVisibleCharacterIndex;
+        public int lastCharacterIndex;
+        public int lastVisibleCharacterIndex;
+
+        public float length;
+        public float lineHeight;
+        public float ascender;
+        public float baseline;
+        public float descender;
+        public float maxAdvance;
+
+        public float width;
+        public float marginLeft;
+        public float marginRight;
+
+        public TextAlignmentOptions alignment;
+        public Extents lineExtents;
+
+
+        /// <summary>
+        /// Function returning the current line of text.
+        /// </summary>
+        /// <returns></returns>
+        //public string GetLineText()
+        //{
+        //    string word = string.Empty;
+        //    TMP_CharacterInfo[] charInfo = textComponent.textInfo.characterInfo;
+
+        //    for (int i = firstCharacterIndex; i < lastCharacterIndex + 1; i++)
+        //    {
+        //        word += charInfo[i].character;
+        //    }
+
+        //    return word;
+        //}
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..53225c565b6ccebf88a2af371eee3799517ad914
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_LineInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b6e75d7f429a4e7e9e1ffb4f85cff49f
+timeCreated: 1464310403
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs
new file mode 100644
index 0000000000000000000000000000000000000000..50874520ff3551f55da51136f674e86957c8a453
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    internal static class TMP_ListPool<T>
+    {      
+        // Object pool to avoid allocations.
+        private static readonly TMP_ObjectPool<List<T>> s_ListPool = new TMP_ObjectPool<List<T>>(null, l => l.Clear());
+
+        public static List<T> Get()
+        {
+            return s_ListPool.Get();
+        }
+
+        public static void Release(List<T> toRelease)
+        {
+            s_ListPool.Release(toRelease);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..aaa86f7ce65c1174d15d765a08d77fb232055b47
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ListPool.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 28375447bcea455c9b51a6650b10c9d7
+timeCreated: 1458521386
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e34e44355e145862d34b1a8f3033eceed4f641a5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs
@@ -0,0 +1,633 @@
+//#define TMP_DEBUG_MODE
+
+using UnityEngine;
+using System.Collections.Generic;
+
+using UnityEngine.UI;
+
+
+namespace TMPro
+{
+
+    public static class TMP_MaterialManager
+    {
+        private static List<MaskingMaterial> m_materialList = new List<MaskingMaterial>();
+
+        private static Dictionary<long, FallbackMaterial> m_fallbackMaterials = new Dictionary<long, FallbackMaterial>();
+        private static Dictionary<int, long> m_fallbackMaterialLookup = new Dictionary<int, long>();
+        private static List<FallbackMaterial> m_fallbackCleanupList = new List<FallbackMaterial>();
+
+        private static bool isFallbackListDirty;
+
+        static TMP_MaterialManager()
+        {
+            Camera.onPreRender += new Camera.CameraCallback(OnPreRender);
+            Canvas.willRenderCanvases += new Canvas.WillRenderCanvases(OnPreRenderCanvas);
+        }
+
+
+        static void OnPreRender(Camera cam)
+        {
+            if (isFallbackListDirty)
+            {
+                //Debug.Log("1 - Cleaning up Fallback Materials.");
+                CleanupFallbackMaterials();
+                isFallbackListDirty = false;
+            }
+        }
+
+        static void OnPreRenderCanvas()
+        {
+            if (isFallbackListDirty)
+            {
+                //Debug.Log("2 - Cleaning up Fallback Materials.");
+                CleanupFallbackMaterials();
+                isFallbackListDirty = false;
+            }
+        }
+
+        /// <summary>
+        /// Create a Masking Material Instance for the given ID
+        /// </summary>
+        /// <param name="baseMaterial"></param>
+        /// <param name="stencilID"></param>
+        /// <returns></returns>
+        public static Material GetStencilMaterial(Material baseMaterial, int stencilID)
+        {
+            // Check if Material supports masking
+            if (!baseMaterial.HasProperty(ShaderUtilities.ID_StencilID))
+            {
+                Debug.LogWarning("Selected Shader does not support Stencil Masking. Please select the Distance Field or Mobile Distance Field Shader.");
+                return baseMaterial;
+            }
+
+            int baseMaterialID = baseMaterial.GetInstanceID();
+
+            // If baseMaterial already has a corresponding masking material, return it.
+            for (int i = 0; i < m_materialList.Count; i++)
+            {
+                if (m_materialList[i].baseMaterial.GetInstanceID() == baseMaterialID && m_materialList[i].stencilID == stencilID)
+                {
+                    m_materialList[i].count += 1;
+
+                    #if TMP_DEBUG_MODE
+                    ListMaterials();
+                    #endif
+
+                    return m_materialList[i].stencilMaterial;
+                }
+            }
+
+            // No matching masking material found. Create and return a new one.
+
+            Material stencilMaterial;
+
+            //Create new Masking Material Instance for this Base Material 
+            stencilMaterial = new Material(baseMaterial);
+            stencilMaterial.hideFlags = HideFlags.HideAndDontSave;
+
+            #if UNITY_EDITOR
+                stencilMaterial.name += " Masking ID:" + stencilID;
+            #endif
+
+            stencilMaterial.shaderKeywords = baseMaterial.shaderKeywords;
+
+            // Set Stencil Properties
+            ShaderUtilities.GetShaderPropertyIDs();
+            stencilMaterial.SetFloat(ShaderUtilities.ID_StencilID, stencilID);
+            //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilOp, 0);
+            stencilMaterial.SetFloat(ShaderUtilities.ID_StencilComp, 4);
+            //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilReadMask, stencilID);
+            //stencilMaterial.SetFloat(ShaderUtilities.ID_StencilWriteMask, 0);
+
+            MaskingMaterial temp = new MaskingMaterial();
+            temp.baseMaterial = baseMaterial;
+            temp.stencilMaterial = stencilMaterial;
+            temp.stencilID = stencilID;
+            temp.count = 1;
+
+            m_materialList.Add(temp);
+
+            #if TMP_DEBUG_MODE
+            ListMaterials();
+            #endif
+
+            return stencilMaterial;
+        }
+
+
+        /// <summary>
+        /// Function to release the stencil material.
+        /// </summary>
+        /// <param name="stencilMaterial"></param>
+        public static void ReleaseStencilMaterial(Material stencilMaterial)
+        {
+            int stencilMaterialID = stencilMaterial.GetInstanceID();
+            
+            for (int i = 0; i < m_materialList.Count; i++)
+            {
+                if (m_materialList[i].stencilMaterial.GetInstanceID() == stencilMaterialID)
+                {
+                    if (m_materialList[i].count > 1)
+                        m_materialList[i].count -= 1;
+                    else
+                    {
+                        Object.DestroyImmediate(m_materialList[i].stencilMaterial);
+                        m_materialList.RemoveAt(i);
+                        stencilMaterial = null;
+                    }
+
+                    break;
+                }
+            }
+
+
+            #if TMP_DEBUG_MODE
+            ListMaterials();
+            #endif
+        }
+
+
+        // Function which returns the base material associated with a Masking Material
+        public static Material GetBaseMaterial(Material stencilMaterial)
+        {
+            // Check if maskingMaterial already has a base material associated with it.
+            int index = m_materialList.FindIndex(item => item.stencilMaterial == stencilMaterial);
+
+            if (index == -1)
+                return null;
+            else
+                return m_materialList[index].baseMaterial;
+
+        }
+
+
+        /// <summary>
+        /// Function to set the Material Stencil ID
+        /// </summary>
+        /// <param name="material"></param>
+        /// <param name="stencilID"></param>
+        /// <returns></returns>
+        public static Material SetStencil(Material material, int stencilID)
+        {
+            material.SetFloat(ShaderUtilities.ID_StencilID, stencilID);
+            
+            if (stencilID == 0)
+                material.SetFloat(ShaderUtilities.ID_StencilComp, 8);
+            else
+                material.SetFloat(ShaderUtilities.ID_StencilComp, 4);
+
+            return material;
+        }
+
+
+        public static void AddMaskingMaterial(Material baseMaterial, Material stencilMaterial, int stencilID)
+        {
+            // Check if maskingMaterial already has a base material associated with it.
+            int index = m_materialList.FindIndex(item => item.stencilMaterial == stencilMaterial);
+
+            if (index == -1)
+            {
+                MaskingMaterial temp = new MaskingMaterial();
+                temp.baseMaterial = baseMaterial;
+                temp.stencilMaterial = stencilMaterial;
+                temp.stencilID = stencilID;
+                temp.count = 1;
+
+                m_materialList.Add(temp);
+            }
+            else
+            {
+                stencilMaterial = m_materialList[index].stencilMaterial;
+                m_materialList[index].count += 1;
+            }
+        }
+
+
+
+        public static void RemoveStencilMaterial(Material stencilMaterial)
+        {
+            // Check if maskingMaterial is already on the list.
+            int index = m_materialList.FindIndex(item => item.stencilMaterial == stencilMaterial);
+
+            if (index != -1)
+            {
+                m_materialList.RemoveAt(index);
+            }
+
+            #if TMP_DEBUG_MODE
+            ListMaterials();
+            #endif
+        }
+
+
+
+        public static void ReleaseBaseMaterial(Material baseMaterial)
+        {
+            // Check if baseMaterial already has a masking material associated with it.
+            int index = m_materialList.FindIndex(item => item.baseMaterial == baseMaterial);
+
+            if (index == -1)
+            {
+                Debug.Log("No Masking Material exists for " + baseMaterial.name);
+            }
+            else
+            {
+                if (m_materialList[index].count > 1)
+                {
+                    m_materialList[index].count -= 1;
+                    Debug.Log("Removed (1) reference to " + m_materialList[index].stencilMaterial.name + ". There are " + m_materialList[index].count + " references left.");
+                }
+                else
+                {
+                    Debug.Log("Removed last reference to " + m_materialList[index].stencilMaterial.name + " with ID " + m_materialList[index].stencilMaterial.GetInstanceID());
+                    Object.DestroyImmediate(m_materialList[index].stencilMaterial);
+                    m_materialList.RemoveAt(index);
+                }
+            }
+
+            #if TMP_DEBUG_MODE
+            ListMaterials();
+            #endif
+        }
+
+
+        public static void ClearMaterials()
+        {
+            if (m_materialList.Count == 0)
+            {
+                Debug.Log("Material List has already been cleared.");
+                return;
+            }
+
+            for (int i = 0; i < m_materialList.Count; i++)
+            {
+                //Material baseMaterial = m_materialList[i].baseMaterial;
+                Material stencilMaterial = m_materialList[i].stencilMaterial;
+
+                Object.DestroyImmediate(stencilMaterial);
+                m_materialList.RemoveAt(i);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to get the Stencil ID
+        /// </summary>
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        public static int GetStencilID(GameObject obj)
+        {
+            // Implementation is almost copied from Unity UI
+
+            var count = 0;
+
+            var transform = obj.transform;
+            var stopAfter = FindRootSortOverrideCanvas(transform);
+            if (transform == stopAfter)
+                return count;
+
+            var t = transform.parent;
+            var components = TMP_ListPool<Mask>.Get();
+            while (t != null)
+            {
+                t.GetComponents<Mask>(components);
+                for (var i = 0; i < components.Count; ++i)
+                {
+                    var mask = components[i];
+                    if (mask != null && mask.MaskEnabled() && mask.graphic.IsActive())
+            {
+                        ++count;
+                        break;
+                    }
+            }
+
+                if (t == stopAfter)
+                    break;
+
+                t = t.parent;
+            }
+            TMP_ListPool<Mask>.Release(components);
+
+            return Mathf.Min((1 << count) - 1, 255);
+        }
+
+
+        public static Material GetMaterialForRendering(MaskableGraphic graphic, Material baseMaterial)
+        {
+            if (baseMaterial == null)
+                return null;
+
+            var modifiers = TMP_ListPool<IMaterialModifier>.Get();
+            graphic.GetComponents(modifiers);
+
+            var result = baseMaterial;
+            for (int i = 0; i < modifiers.Count; i++)
+                result = modifiers[i].GetModifiedMaterial(result);
+
+            TMP_ListPool<IMaterialModifier>.Release(modifiers);
+
+            return result;
+        }
+
+        private static Transform FindRootSortOverrideCanvas(Transform start)
+        {
+            // Implementation is copied from Unity UI
+
+            var canvasList = TMP_ListPool<Canvas>.Get();
+            start.GetComponentsInParent(false, canvasList);
+            Canvas canvas = null;
+
+            for (int i = 0; i < canvasList.Count; ++i)
+            {
+                canvas = canvasList[i];
+
+                // We found the canvas we want to use break
+                if (canvas.overrideSorting)
+                    break;
+            }
+            TMP_ListPool<Canvas>.Release(canvasList);
+
+            return canvas != null ? canvas.transform : null;
+        }
+
+
+        /// <summary>
+        /// This function returns a material instance using the material properties of a previous material but using the font atlas texture of the new font asset.
+        /// </summary>
+        /// <param name="sourceMaterial">The material containing the source material properties to be copied to the new material.</param>
+        /// <param name="targetMaterial">The font atlas texture that should be assigned to the new material.</param>
+        /// <returns></returns>
+        public static Material GetFallbackMaterial (Material sourceMaterial, Material targetMaterial)
+        {
+            int sourceID = sourceMaterial.GetInstanceID();
+            Texture tex = targetMaterial.GetTexture(ShaderUtilities.ID_MainTex);
+            int texID = tex.GetInstanceID();
+            long key = (long)sourceID << 32 | (long)(uint)texID;
+            FallbackMaterial fallback;
+
+            if (m_fallbackMaterials.TryGetValue(key, out fallback))
+            {
+                //Debug.Log("Material [" + fallback.fallbackMaterial.name + "] already exists.");
+                return fallback.fallbackMaterial;
+            }
+
+            // Create new material from the source material and copy properties if using distance field shaders.
+            Material fallbackMaterial = null;
+            if (sourceMaterial.HasProperty(ShaderUtilities.ID_GradientScale) && targetMaterial.HasProperty(ShaderUtilities.ID_GradientScale))
+            {
+                fallbackMaterial = new Material(sourceMaterial);
+                fallbackMaterial.hideFlags = HideFlags.HideAndDontSave;
+
+                #if UNITY_EDITOR
+                fallbackMaterial.name += " + " + tex.name;
+                //Debug.Log("Creating new fallback material for " + fallbackMaterial.name);
+                #endif
+
+                fallbackMaterial.SetTexture(ShaderUtilities.ID_MainTex, tex);
+                // Retain material properties unique to target material.
+                fallbackMaterial.SetFloat(ShaderUtilities.ID_GradientScale, targetMaterial.GetFloat(ShaderUtilities.ID_GradientScale));
+                fallbackMaterial.SetFloat(ShaderUtilities.ID_TextureWidth, targetMaterial.GetFloat(ShaderUtilities.ID_TextureWidth));
+                fallbackMaterial.SetFloat(ShaderUtilities.ID_TextureHeight, targetMaterial.GetFloat(ShaderUtilities.ID_TextureHeight));
+                fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightNormal, targetMaterial.GetFloat(ShaderUtilities.ID_WeightNormal));
+                fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightBold, targetMaterial.GetFloat(ShaderUtilities.ID_WeightBold));
+            }
+            else
+            {
+                fallbackMaterial = new Material(targetMaterial);
+            }
+
+            fallback = new FallbackMaterial();
+            fallback.baseID = sourceID;
+            fallback.baseMaterial = sourceMaterial;
+            fallback.fallbackID = key;
+            fallback.fallbackMaterial = fallbackMaterial;
+            fallback.count = 0;
+
+            m_fallbackMaterials.Add(key, fallback);
+            m_fallbackMaterialLookup.Add(fallbackMaterial.GetInstanceID(), key);
+
+            #if TMP_DEBUG_MODE
+            ListFallbackMaterials();
+            #endif
+
+            return fallbackMaterial;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="targetMaterial"></param>
+        public static void AddFallbackMaterialReference(Material targetMaterial)
+        {
+            if (targetMaterial == null) return;
+
+            int sourceID = targetMaterial.GetInstanceID();
+            long key;
+            FallbackMaterial fallback;
+
+            // Lookup key to retrieve 
+            if (m_fallbackMaterialLookup.TryGetValue(sourceID, out key))
+            {
+                if (m_fallbackMaterials.TryGetValue(key, out fallback))
+                {
+                    //Debug.Log("Adding Fallback material " + fallback.fallbackMaterial.name + " with reference count of " + (fallback.count + 1));
+                    fallback.count += 1;
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="targetMaterial"></param>
+        public static void RemoveFallbackMaterialReference(Material targetMaterial)
+        {
+            if (targetMaterial == null) return;
+
+            int sourceID = targetMaterial.GetInstanceID();
+            long key;
+            FallbackMaterial fallback;
+
+            // Lookup key to retrieve 
+            if (m_fallbackMaterialLookup.TryGetValue(sourceID, out key))
+            {
+                if (m_fallbackMaterials.TryGetValue(key, out fallback))
+                {
+                    fallback.count -= 1;
+
+                    if (fallback.count < 1)
+                        m_fallbackCleanupList.Add(fallback);
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static void CleanupFallbackMaterials()
+        {
+            // Return if the list is empty.
+            if (m_fallbackCleanupList.Count == 0) return;
+
+            for (int i = 0; i < m_fallbackCleanupList.Count; i++)
+            {
+                FallbackMaterial fallback = m_fallbackCleanupList[i];
+
+                if (fallback.count < 1)
+                {
+                    //Debug.Log("Cleaning up " + fallback.fallbackMaterial.name);
+
+                    Material mat = fallback.fallbackMaterial;
+                    m_fallbackMaterials.Remove(fallback.fallbackID);
+                    m_fallbackMaterialLookup.Remove(mat.GetInstanceID());
+                    Object.DestroyImmediate(mat);
+                    mat = null;
+                }
+            }
+
+            m_fallbackCleanupList.Clear();
+        }
+
+
+        /// <summary>
+        /// Function to release the fallback material.
+        /// </summary>
+        /// <param name="fallackMaterial"></param>
+        public static void ReleaseFallbackMaterial(Material fallackMaterial)
+        {
+            if (fallackMaterial == null) return;
+
+            int materialID = fallackMaterial.GetInstanceID();
+            long key;
+            FallbackMaterial fallback;
+
+            if (m_fallbackMaterialLookup.TryGetValue(materialID, out key))
+            {
+                if (m_fallbackMaterials.TryGetValue(key, out fallback))
+                {
+                    //Debug.Log("Releasing Fallback material " + fallback.fallbackMaterial.name + " with remaining reference count of " + (fallback.count - 1));
+
+                    fallback.count -= 1;
+
+                    if (fallback.count < 1)
+                        m_fallbackCleanupList.Add(fallback);
+                }
+            }
+
+            isFallbackListDirty = true;
+
+            #if TMP_DEBUG_MODE
+            ListFallbackMaterials();
+            #endif
+        }
+
+
+        private class FallbackMaterial
+        {
+            public int baseID;
+            public Material baseMaterial;
+            public long fallbackID;
+            public Material fallbackMaterial;
+            public int count;
+        }
+
+
+        private class MaskingMaterial
+        {
+            public Material baseMaterial;
+            public Material stencilMaterial;
+            public int count;
+            public int stencilID;
+        }
+
+
+        /// <summary>
+        /// Function to copy the properties of a source material preset to another while preserving the unique font asset properties of the destination material.
+        /// </summary>
+        /// <param name="source"></param>
+        /// <param name="destination"></param>
+        public static void CopyMaterialPresetProperties(Material source, Material destination)
+        {
+            if (!source.HasProperty(ShaderUtilities.ID_GradientScale) || !destination.HasProperty(ShaderUtilities.ID_GradientScale))
+                return;
+
+            // Save unique material properties
+            Texture dst_texture = destination.GetTexture(ShaderUtilities.ID_MainTex);
+            float dst_gradientScale = destination.GetFloat(ShaderUtilities.ID_GradientScale);
+            float dst_texWidth = destination.GetFloat(ShaderUtilities.ID_TextureWidth);
+            float dst_texHeight = destination.GetFloat(ShaderUtilities.ID_TextureHeight);
+            float dst_weightNormal = destination.GetFloat(ShaderUtilities.ID_WeightNormal);
+            float dst_weightBold = destination.GetFloat(ShaderUtilities.ID_WeightBold);
+
+            // Copy all material properties
+            destination.CopyPropertiesFromMaterial(source);
+
+            // Copy shader keywords
+            destination.shaderKeywords = source.shaderKeywords;
+
+            // Restore unique material properties
+            destination.SetTexture(ShaderUtilities.ID_MainTex, dst_texture);
+            destination.SetFloat(ShaderUtilities.ID_GradientScale, dst_gradientScale);
+            destination.SetFloat(ShaderUtilities.ID_TextureWidth, dst_texWidth);
+            destination.SetFloat(ShaderUtilities.ID_TextureHeight, dst_texHeight);
+            destination.SetFloat(ShaderUtilities.ID_WeightNormal, dst_weightNormal);
+            destination.SetFloat(ShaderUtilities.ID_WeightBold, dst_weightBold);
+        }
+
+
+        #if TMP_DEBUG_MODE
+        /// <summary>
+        /// 
+        /// </summary>
+        public static void ListMaterials()
+        {
+
+            if (m_materialList.Count() == 0)
+            {
+                Debug.Log("Material List is empty.");
+                return;
+            }
+
+            //Debug.Log("List contains " + m_materialList.Count() + " items.");
+
+            for (int i = 0; i < m_materialList.Count(); i++)
+            {
+                Material baseMaterial = m_materialList[i].baseMaterial;
+                Material stencilMaterial = m_materialList[i].stencilMaterial;
+
+                Debug.Log("Item #" + (i + 1) + " - Base Material is [" + baseMaterial.name + "] with ID " + baseMaterial.GetInstanceID() + " is associated with [" + (stencilMaterial != null ? stencilMaterial.name : "Null") + "] Stencil ID " + m_materialList[i].stencilID + " with ID " + (stencilMaterial != null ? stencilMaterial.GetInstanceID() : 0) + " and is referenced " + m_materialList[i].count + " time(s).");
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static void ListFallbackMaterials()
+        {
+
+            if (m_fallbackMaterialList.Count() == 0)
+            {
+                Debug.Log("Material List is empty.");
+                return;
+            }
+
+            Debug.Log("List contains " + m_fallbackMaterialList.Count() + " items.");
+
+            for (int i = 0; i < m_fallbackMaterialList.Count(); i++)
+            {
+                Material baseMaterial = m_fallbackMaterialList[i].baseMaterial;
+                Material fallbackMaterial = m_fallbackMaterialList[i].fallbackMaterial;
+
+                Debug.Log("Item #" + (i + 1) + " - Base Material is [" + baseMaterial.name + "] with ID " + baseMaterial.GetInstanceID() + " is associated with [" + (fallbackMaterial != null ? fallbackMaterial.name : "Null") + "] with ID " + (fallbackMaterial != null ? fallbackMaterial.GetInstanceID() : 0) + " and is referenced " + m_fallbackMaterialList[i].count + " time(s).");
+            }
+        }
+        #endif
+    }
+
+}
+
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c4893509ec2875ddd8132b8f00c9aa53ae7de443
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MaterialManager.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6d9df2bc198c417db00037803568139c
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..33dc81c72e99e6524816a57418fbe0203c64bf01
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs
@@ -0,0 +1,668 @@
+using UnityEngine;
+using System;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    public enum VertexSortingOrder { Normal, Reverse };
+
+    /// <summary>
+    /// Structure which contains the vertex attributes (geometry) of the text object.
+    /// </summary>
+    public struct TMP_MeshInfo
+    {
+        private static readonly Color32 s_DefaultColor = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue);
+        private static readonly Vector3 s_DefaultNormal = new Vector3(0.0f, 0.0f, -1f);
+        private static readonly Vector4 s_DefaultTangent = new Vector4(-1f, 0.0f, 0.0f, 1f);
+        private static readonly Bounds s_DefaultBounds = new Bounds();
+
+        public Mesh mesh;
+        public int vertexCount;
+
+        public Vector3[] vertices;
+        public Vector3[] normals;
+        public Vector4[] tangents;
+
+        public Vector2[] uvs0;
+        public Vector2[] uvs2;
+        //public Vector2[] uvs4;
+        public Color32[] colors32;
+        public int[] triangles;
+
+
+        /// <summary>
+        /// Function to pre-allocate vertex attributes for a mesh of size X.
+        /// </summary>
+        /// <param name="mesh"></param>
+        /// <param name="size"></param>
+        public TMP_MeshInfo(Mesh mesh, int size)
+        {
+            // Reference to the TMP Text Component.
+            //this.textComponent = null;
+
+            // Clear existing mesh data
+            if (mesh == null)
+                mesh = new Mesh();
+            else
+                mesh.Clear();
+
+            this.mesh = mesh;
+
+            // Limit the mesh to less than 65535 vertices which is the limit for Unity's Mesh.
+            size = Mathf.Min(size, 16383);
+
+            int sizeX4 = size * 4;
+            int sizeX6 = size * 6;
+
+            this.vertexCount = 0;
+
+            this.vertices = new Vector3[sizeX4];
+            this.uvs0 = new Vector2[sizeX4];
+            this.uvs2 = new Vector2[sizeX4];
+            //this.uvs4 = new Vector2[sizeX4]; // SDF scale data
+            this.colors32 = new Color32[sizeX4];
+
+            this.normals = new Vector3[sizeX4];
+            this.tangents = new Vector4[sizeX4];
+
+            this.triangles = new int[sizeX6];
+
+            int index_X6 = 0;
+            int index_X4 = 0;
+            while (index_X4 / 4 < size)
+            {
+                for (int i = 0; i < 4; i++)
+                {
+                    this.vertices[index_X4 + i] = Vector3.zero;
+                    this.uvs0[index_X4 + i] = Vector2.zero;
+                    this.uvs2[index_X4 + i] = Vector2.zero;
+                    //this.uvs4[index_X4 + i] = Vector2.zero;
+                    this.colors32[index_X4 + i] = s_DefaultColor;
+                    this.normals[index_X4 + i] = s_DefaultNormal;
+                    this.tangents[index_X4 + i] = s_DefaultTangent;
+                }
+
+                this.triangles[index_X6 + 0] = index_X4 + 0;
+                this.triangles[index_X6 + 1] = index_X4 + 1;
+                this.triangles[index_X6 + 2] = index_X4 + 2;
+                this.triangles[index_X6 + 3] = index_X4 + 2;
+                this.triangles[index_X6 + 4] = index_X4 + 3;
+                this.triangles[index_X6 + 5] = index_X4 + 0;
+
+                index_X4 += 4;
+                index_X6 += 6;
+            }
+
+            // Pre-assign base vertex attributes.
+            this.mesh.vertices = this.vertices;
+            this.mesh.normals = this.normals;
+            this.mesh.tangents = this.tangents;
+            this.mesh.triangles = this.triangles;
+            this.mesh.bounds = s_DefaultBounds;
+        }
+
+
+        /// <summary>
+        /// Function to pre-allocate vertex attributes for a mesh of size X.
+        /// </summary>
+        /// <param name="mesh"></param>
+        /// <param name="size"></param>
+        /// <param name="isVolumetric"></param>
+        public TMP_MeshInfo(Mesh mesh, int size, bool isVolumetric)
+        {
+            // Reference to the TMP Text Component.
+            //this.textComponent = null;
+
+            // Clear existing mesh data
+            if (mesh == null)
+                mesh = new Mesh();
+            else
+                mesh.Clear();
+
+            this.mesh = mesh;
+
+            int s0 = !isVolumetric ? 4 : 8;
+            int s1 = !isVolumetric ? 6 : 36;
+
+            // Limit the mesh to less than 65535 vertices which is the limit for Unity's Mesh.
+            size = Mathf.Min(size, 65532 / s0);
+
+            int size_x_s0 = size * s0;
+            int size_x_s1 = size * s1;
+
+            this.vertexCount = 0;
+
+            this.vertices = new Vector3[size_x_s0];
+            this.uvs0 = new Vector2[size_x_s0];
+            this.uvs2 = new Vector2[size_x_s0];
+            //this.uvs4 = new Vector2[sizeX8]; // SDF scale data
+            this.colors32 = new Color32[size_x_s0];
+
+            this.normals = new Vector3[size_x_s0];
+            this.tangents = new Vector4[size_x_s0];
+
+            this.triangles = new int[size_x_s1];
+
+            int index_x_s0 = 0;
+            int index_x_s1 = 0;
+            while (index_x_s0 / s0 < size)
+            {
+                for (int i = 0; i < s0; i++)
+                {
+                    this.vertices[index_x_s0 + i] = Vector3.zero;
+                    this.uvs0[index_x_s0 + i] = Vector2.zero;
+                    this.uvs2[index_x_s0 + i] = Vector2.zero;
+                    //this.uvs4[index_X4 + i] = Vector2.zero;
+                    this.colors32[index_x_s0 + i] = s_DefaultColor;
+                    this.normals[index_x_s0 + i] = s_DefaultNormal;
+                    this.tangents[index_x_s0 + i] = s_DefaultTangent;
+                }
+
+                // Front Face
+                this.triangles[index_x_s1 + 0] = index_x_s0 + 0;
+                this.triangles[index_x_s1 + 1] = index_x_s0 + 1;
+                this.triangles[index_x_s1 + 2] = index_x_s0 + 2;
+                this.triangles[index_x_s1 + 3] = index_x_s0 + 2;
+                this.triangles[index_x_s1 + 4] = index_x_s0 + 3;
+                this.triangles[index_x_s1 + 5] = index_x_s0 + 0;
+
+                if (isVolumetric)
+                {
+                    // Left Face
+                    this.triangles[index_x_s1 + 6] = index_x_s0 + 4;
+                    this.triangles[index_x_s1 + 7] = index_x_s0 + 5;
+                    this.triangles[index_x_s1 + 8] = index_x_s0 + 1;
+                    this.triangles[index_x_s1 + 9] = index_x_s0 + 1;
+                    this.triangles[index_x_s1 + 10] = index_x_s0 + 0;
+                    this.triangles[index_x_s1 + 11] = index_x_s0 + 4;
+
+                    // Right Face
+                    this.triangles[index_x_s1 + 12] = index_x_s0 + 3;
+                    this.triangles[index_x_s1 + 13] = index_x_s0 + 2;
+                    this.triangles[index_x_s1 + 14] = index_x_s0 + 6;
+                    this.triangles[index_x_s1 + 15] = index_x_s0 + 6;
+                    this.triangles[index_x_s1 + 16] = index_x_s0 + 7;
+                    this.triangles[index_x_s1 + 17] = index_x_s0 + 3;
+
+                    // Top Face
+                    this.triangles[index_x_s1 + 18] = index_x_s0 + 1;
+                    this.triangles[index_x_s1 + 19] = index_x_s0 + 5;
+                    this.triangles[index_x_s1 + 20] = index_x_s0 + 6;
+                    this.triangles[index_x_s1 + 21] = index_x_s0 + 6;
+                    this.triangles[index_x_s1 + 22] = index_x_s0 + 2;
+                    this.triangles[index_x_s1 + 23] = index_x_s0 + 1;
+
+                    // Bottom Face
+                    this.triangles[index_x_s1 + 24] = index_x_s0 + 4;
+                    this.triangles[index_x_s1 + 25] = index_x_s0 + 0;
+                    this.triangles[index_x_s1 + 26] = index_x_s0 + 3;
+                    this.triangles[index_x_s1 + 27] = index_x_s0 + 3;
+                    this.triangles[index_x_s1 + 28] = index_x_s0 + 7;
+                    this.triangles[index_x_s1 + 29] = index_x_s0 + 4;
+
+                    // Back Face
+                    this.triangles[index_x_s1 + 30] = index_x_s0 + 7;
+                    this.triangles[index_x_s1 + 31] = index_x_s0 + 6;
+                    this.triangles[index_x_s1 + 32] = index_x_s0 + 5;
+                    this.triangles[index_x_s1 + 33] = index_x_s0 + 5;
+                    this.triangles[index_x_s1 + 34] = index_x_s0 + 4;
+                    this.triangles[index_x_s1 + 35] = index_x_s0 + 7;
+                }
+
+                index_x_s0 += s0;
+                index_x_s1 += s1;
+            }
+
+            // Pre-assign base vertex attributes.
+            this.mesh.vertices = this.vertices;
+            this.mesh.normals = this.normals;
+            this.mesh.tangents = this.tangents;
+            this.mesh.triangles = this.triangles;
+            this.mesh.bounds = s_DefaultBounds;
+        }
+
+
+        /// <summary>
+        /// Function to resized the content of MeshData and re-assign normals, tangents and triangles.
+        /// </summary>
+        /// <param name="meshData"></param>
+        /// <param name="size"></param>
+        public void ResizeMeshInfo(int size)
+        {
+            // Limit the mesh to less than 65535 vertices which is the limit for Unity's Mesh.
+            size = Mathf.Min(size, 16383);
+
+            int size_X4 = size * 4;
+            int size_X6 = size * 6;
+
+            int previousSize = this.vertices.Length / 4;
+
+            Array.Resize(ref this.vertices, size_X4);
+            Array.Resize(ref this.normals, size_X4);
+            Array.Resize(ref this.tangents, size_X4);
+
+            Array.Resize(ref this.uvs0, size_X4);
+            Array.Resize(ref this.uvs2, size_X4);
+            //Array.Resize(ref this.uvs4, size_X4);
+
+            Array.Resize(ref this.colors32, size_X4);
+
+            Array.Resize(ref this.triangles, size_X6);
+
+
+            // Re-assign Normals, Tangents and Triangles
+            if (size <= previousSize)
+            {
+                this.mesh.triangles = this.triangles;
+                this.mesh.vertices = this.vertices;
+                this.mesh.normals = this.normals;
+                this.mesh.tangents = this.tangents;
+
+                return;
+            }
+
+            for (int i = previousSize; i < size; i++)
+            {
+                int index_X4 = i * 4;
+                int index_X6 = i * 6;
+
+                this.normals[0 + index_X4] = s_DefaultNormal;
+                this.normals[1 + index_X4] = s_DefaultNormal;
+                this.normals[2 + index_X4] = s_DefaultNormal;
+                this.normals[3 + index_X4] = s_DefaultNormal;
+
+                this.tangents[0 + index_X4] = s_DefaultTangent;
+                this.tangents[1 + index_X4] = s_DefaultTangent;
+                this.tangents[2 + index_X4] = s_DefaultTangent;
+                this.tangents[3 + index_X4] = s_DefaultTangent;
+
+                // Setup Triangles
+                this.triangles[0 + index_X6] = 0 + index_X4;
+                this.triangles[1 + index_X6] = 1 + index_X4;
+                this.triangles[2 + index_X6] = 2 + index_X4;
+                this.triangles[3 + index_X6] = 2 + index_X4;
+                this.triangles[4 + index_X6] = 3 + index_X4;
+                this.triangles[5 + index_X6] = 0 + index_X4;
+            }
+
+            this.mesh.vertices = this.vertices;
+            this.mesh.normals = this.normals;
+            this.mesh.tangents = this.tangents;
+            this.mesh.triangles = this.triangles;
+        }
+
+
+        /// <summary>
+        /// Function to resized the content of MeshData and re-assign normals, tangents and triangles.
+        /// </summary>
+        /// <param name="size"></param>
+        /// <param name="isVolumetric"></param>
+        public void ResizeMeshInfo(int size, bool isVolumetric)
+        {
+            int s0 = !isVolumetric ? 4 : 8;
+            int s1 = !isVolumetric ? 6 : 36;
+
+            // Limit the mesh to less than 65535 vertices which is the limit for Unity's Mesh.
+            size = Mathf.Min(size, 65532 / s0);
+
+            int size_X4 = size * s0;
+            int size_X6 = size * s1;
+
+            int previousSize = this.vertices.Length / s0;
+
+            Array.Resize(ref this.vertices, size_X4);
+            Array.Resize(ref this.normals, size_X4);
+            Array.Resize(ref this.tangents, size_X4);
+
+            Array.Resize(ref this.uvs0, size_X4);
+            Array.Resize(ref this.uvs2, size_X4);
+            //Array.Resize(ref this.uvs4, size_X4);
+
+            Array.Resize(ref this.colors32, size_X4);
+
+            Array.Resize(ref this.triangles, size_X6);
+
+
+            // Re-assign Normals, Tangents and Triangles
+            if (size <= previousSize)
+            {
+                this.mesh.triangles = this.triangles;
+                this.mesh.vertices = this.vertices;
+                this.mesh.normals = this.normals;
+                this.mesh.tangents = this.tangents;
+
+                return;
+            }
+
+            for (int i = previousSize; i < size; i++)
+            {
+                int index_X4 = i * s0;
+                int index_X6 = i * s1;
+
+                this.normals[0 + index_X4] = s_DefaultNormal;
+                this.normals[1 + index_X4] = s_DefaultNormal;
+                this.normals[2 + index_X4] = s_DefaultNormal;
+                this.normals[3 + index_X4] = s_DefaultNormal;
+
+                this.tangents[0 + index_X4] = s_DefaultTangent;
+                this.tangents[1 + index_X4] = s_DefaultTangent;
+                this.tangents[2 + index_X4] = s_DefaultTangent;
+                this.tangents[3 + index_X4] = s_DefaultTangent;
+
+                if (isVolumetric)
+                {
+                    this.normals[4 + index_X4] = s_DefaultNormal;
+                    this.normals[5 + index_X4] = s_DefaultNormal;
+                    this.normals[6 + index_X4] = s_DefaultNormal;
+                    this.normals[7 + index_X4] = s_DefaultNormal;
+
+                    this.tangents[4 + index_X4] = s_DefaultTangent;
+                    this.tangents[5 + index_X4] = s_DefaultTangent;
+                    this.tangents[6 + index_X4] = s_DefaultTangent;
+                    this.tangents[7 + index_X4] = s_DefaultTangent;
+                }
+
+                // Setup Triangles
+                this.triangles[0 + index_X6] = 0 + index_X4;
+                this.triangles[1 + index_X6] = 1 + index_X4;
+                this.triangles[2 + index_X6] = 2 + index_X4;
+                this.triangles[3 + index_X6] = 2 + index_X4;
+                this.triangles[4 + index_X6] = 3 + index_X4;
+                this.triangles[5 + index_X6] = 0 + index_X4;
+
+                if (isVolumetric)
+                {
+                    // Left Face
+                    this.triangles[index_X6 + 6] = index_X4 + 4;
+                    this.triangles[index_X6 + 7] = index_X4 + 5;
+                    this.triangles[index_X6 + 8] = index_X4 + 1;
+                    this.triangles[index_X6 + 9] = index_X4 + 1;
+                    this.triangles[index_X6 + 10] = index_X4 + 0;
+                    this.triangles[index_X6 + 11] = index_X4 + 4;
+
+                    // Right Face
+                    this.triangles[index_X6 + 12] = index_X4 + 3;
+                    this.triangles[index_X6 + 13] = index_X4 + 2;
+                    this.triangles[index_X6 + 14] = index_X4 + 6;
+                    this.triangles[index_X6 + 15] = index_X4 + 6;
+                    this.triangles[index_X6 + 16] = index_X4 + 7;
+                    this.triangles[index_X6 + 17] = index_X4 + 3;
+
+                    // Top Face
+                    this.triangles[index_X6 + 18] = index_X4 + 1;
+                    this.triangles[index_X6 + 19] = index_X4 + 5;
+                    this.triangles[index_X6 + 20] = index_X4 + 6;
+                    this.triangles[index_X6 + 21] = index_X4 + 6;
+                    this.triangles[index_X6 + 22] = index_X4 + 2;
+                    this.triangles[index_X6 + 23] = index_X4 + 1;
+
+                    // Bottom Face
+                    this.triangles[index_X6 + 24] = index_X4 + 4;
+                    this.triangles[index_X6 + 25] = index_X4 + 0;
+                    this.triangles[index_X6 + 26] = index_X4 + 3;
+                    this.triangles[index_X6 + 27] = index_X4 + 3;
+                    this.triangles[index_X6 + 28] = index_X4 + 7;
+                    this.triangles[index_X6 + 29] = index_X4 + 4;
+
+                    // Back Face
+                    this.triangles[index_X6 + 30] = index_X4 + 7;
+                    this.triangles[index_X6 + 31] = index_X4 + 6;
+                    this.triangles[index_X6 + 32] = index_X4 + 5;
+                    this.triangles[index_X6 + 33] = index_X4 + 5;
+                    this.triangles[index_X6 + 34] = index_X4 + 4;
+                    this.triangles[index_X6 + 35] = index_X4 + 7;
+                }
+            }
+
+            this.mesh.vertices = this.vertices;
+            this.mesh.normals = this.normals;
+            this.mesh.tangents = this.tangents;
+            this.mesh.triangles = this.triangles;
+        }
+
+
+        /// <summary>
+        /// Function to clear the vertices while preserving the Triangles, Normals and Tangents.
+        /// </summary>
+        public void Clear()
+        {
+            if (this.vertices == null) return;
+
+            Array.Clear(this.vertices, 0, this.vertices.Length);
+            this.vertexCount = 0;
+
+            if (this.mesh != null)
+                this.mesh.vertices = this.vertices;
+        }
+
+
+        /// <summary>
+        /// Function to clear the vertices while preserving the Triangles, Normals and Tangents.
+        /// </summary>
+        public void Clear(bool uploadChanges)
+        {
+            if (this.vertices == null) return;
+
+            Array.Clear(this.vertices, 0, this.vertices.Length);
+            this.vertexCount = 0;
+
+            if (uploadChanges && this.mesh != null)
+                this.mesh.vertices = this.vertices;
+
+            if (this.mesh != null)
+                this.mesh.bounds = s_DefaultBounds;
+        }
+
+
+        /// <summary>
+        /// Function to clear the vertices while preserving the Triangles, Normals and Tangents.
+        /// </summary>
+        public void ClearUnusedVertices()
+        {
+            int length = vertices.Length - vertexCount;
+
+            if (length > 0)
+                Array.Clear(vertices, vertexCount, length);
+        }
+
+
+        /// <summary>
+        /// Function used to mark unused vertices as degenerate.
+        /// </summary>
+        /// <param name="startIndex"></param>
+        public void ClearUnusedVertices(int startIndex)
+        {
+            int length = this.vertices.Length - startIndex;
+
+            if (length > 0)
+                Array.Clear(this.vertices, startIndex, length);
+        }
+
+
+        /// <summary>
+        /// Function used to mark unused vertices as degenerate an upload resulting data to the mesh.
+        /// </summary>
+        /// <param name="startIndex"></param>
+        public void ClearUnusedVertices(int startIndex, bool updateMesh)
+        {
+            int length = this.vertices.Length - startIndex;
+
+            if (length > 0)
+                Array.Clear(this.vertices, startIndex, length);
+
+            if (updateMesh && mesh != null)
+                this.mesh.vertices = this.vertices;
+        }
+
+
+        public void SortGeometry (VertexSortingOrder order)
+        {
+            switch (order)
+            {
+                case VertexSortingOrder.Normal:
+                    // Do nothing 
+                    break;
+                case VertexSortingOrder.Reverse:
+                    int size = vertexCount / 4;
+                    for (int i = 0; i < size; i++)
+                    {
+                        int src = i * 4;
+                        int dst = (size - i - 1) * 4;
+
+                        if (src < dst)
+                            SwapVertexData(src, dst);
+
+                    }
+                    break;
+                //case VertexSortingOrder.Depth:
+                //    break;
+
+            }
+        }
+
+
+        /// <summary>
+        /// Function to rearrange the quads of the text object to change their rendering order.
+        /// </summary>
+        /// <param name="sortingOrder"></param>
+        public void SortGeometry(IList<int> sortingOrder)
+        {
+            // Make sure the sorting order array is not larger than the vertices array.
+            int indexCount = sortingOrder.Count;
+
+            if (indexCount * 4 > vertices.Length) return;
+
+            int src_index;
+
+            for (int dst_index = 0; dst_index < indexCount; dst_index++)
+            {
+                src_index = sortingOrder[dst_index];
+
+                while (src_index < dst_index)
+                {
+                    src_index = sortingOrder[src_index];
+                }
+
+                // Swap items
+                if (src_index != dst_index)
+                    SwapVertexData(src_index * 4, dst_index * 4);
+
+                //Debug.Log("Swap element [" + dst_index + "] with [" + src_index + "]. Vertex[" + dst_index + "] is " + vertices[dst_index * 4].z);
+            }
+        }
+
+
+        /// <summary>
+        /// Method to swap the vertex attributes between src and dst quads.
+        /// </summary>
+        /// <param name="src">Index of the first vertex attribute of the source character / quad.</param>
+        /// <param name="dst">Index of the first vertex attribute of the destination character / quad.</param>
+        public void SwapVertexData(int src, int dst)
+        {
+            int src_Index = src; //  * 4;
+            int dst_Index = dst; // * 4;
+
+            // Swap vertices
+            Vector3 vertex;
+            vertex = vertices[dst_Index + 0];
+            vertices[dst_Index + 0] = vertices[src_Index + 0];
+            vertices[src_Index + 0] = vertex;
+
+            vertex = vertices[dst_Index + 1];
+            vertices[dst_Index + 1] = vertices[src_Index + 1];
+            vertices[src_Index + 1] = vertex;
+
+            vertex = vertices[dst_Index + 2];
+            vertices[dst_Index + 2] = vertices[src_Index + 2];
+            vertices[src_Index + 2] = vertex;
+
+            vertex = vertices[dst_Index + 3];
+            vertices[dst_Index + 3] = vertices[src_Index + 3];
+            vertices[src_Index + 3] = vertex;
+
+
+            //Swap UVs0
+            Vector2 uvs;
+            uvs = uvs0[dst_Index + 0];
+            uvs0[dst_Index + 0] = uvs0[src_Index + 0];
+            uvs0[src_Index + 0] = uvs;
+
+            uvs = uvs0[dst_Index + 1];
+            uvs0[dst_Index + 1] = uvs0[src_Index + 1];
+            uvs0[src_Index + 1] = uvs;
+
+            uvs = uvs0[dst_Index + 2];
+            uvs0[dst_Index + 2] = uvs0[src_Index + 2];
+            uvs0[src_Index + 2] = uvs;
+
+            uvs = uvs0[dst_Index + 3];
+            uvs0[dst_Index + 3] = uvs0[src_Index + 3];
+            uvs0[src_Index + 3] = uvs;
+
+            // Swap UVs2
+            uvs = uvs2[dst_Index + 0];
+            uvs2[dst_Index + 0] = uvs2[src_Index + 0];
+            uvs2[src_Index + 0] = uvs;
+
+            uvs = uvs2[dst_Index + 1];
+            uvs2[dst_Index + 1] = uvs2[src_Index + 1];
+            uvs2[src_Index + 1] = uvs;
+
+            uvs = uvs2[dst_Index + 2];
+            uvs2[dst_Index + 2] = uvs2[src_Index + 2];
+            uvs2[src_Index + 2] = uvs;
+
+            uvs = uvs2[dst_Index + 3];
+            uvs2[dst_Index + 3] = uvs2[src_Index + 3];
+            uvs2[src_Index + 3] = uvs;
+
+            // Vertex Colors
+            Color32 color;
+            color = colors32[dst_Index + 0];
+            colors32[dst_Index + 0] = colors32[src_Index + 0];
+            colors32[src_Index + 0] = color;
+
+            color = colors32[dst_Index + 1];
+            colors32[dst_Index + 1] = colors32[src_Index + 1];
+            colors32[src_Index + 1] = color;
+
+            color = colors32[dst_Index + 2];
+            colors32[dst_Index + 2] = colors32[src_Index + 2];
+            colors32[src_Index + 2] = color;
+
+            color = colors32[dst_Index + 3];
+            colors32[dst_Index + 3] = colors32[src_Index + 3];
+            colors32[src_Index + 3] = color;
+        }
+
+
+        //int Partition (int start, int end)
+        //{
+        //    float pivot = vertices[end].z;
+
+        //    int partitionIndex = start;
+        //    for (int i = start; i < end; i++)
+        //    {
+        //        if (vertices[i].z <= pivot)
+        //        {
+        //            Swap(vertices[i], vertices[partitionIndex]);
+        //            partitionIndex += 1;
+        //        }
+        //    }
+        //    Swap(vertices[partitionIndex], vertices[end]);
+        //    return partitionIndex;
+        //}
+
+
+        //void Swap(Vector3 a, Vector3 b)
+        //{
+        //    Vector3 temp = a;
+        //    a = b;
+        //    b = a;
+        //}
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..bdf872f0cbbb678899ad2d56aa01c3a3d75a1f29
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_MeshInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e21bec35f48a44298911b25ead550ce3
+timeCreated: 1462398762
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ea857f1b5b82779382e248c9ff9b7f77af6d5185
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs
@@ -0,0 +1,51 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+
+namespace TMPro
+{
+
+    internal class TMP_ObjectPool<T> where T : new()
+    {
+        private readonly Stack<T> m_Stack = new Stack<T>();
+        private readonly UnityAction<T> m_ActionOnGet;
+        private readonly UnityAction<T> m_ActionOnRelease;
+
+        public int countAll { get; private set; }
+        public int countActive { get { return countAll - countInactive; } }
+        public int countInactive { get { return m_Stack.Count; } }
+
+        public TMP_ObjectPool(UnityAction<T> actionOnGet, UnityAction<T> actionOnRelease)
+        {
+            m_ActionOnGet = actionOnGet;
+            m_ActionOnRelease = actionOnRelease;
+        }
+
+        public T Get()
+        {
+            T element;
+            if (m_Stack.Count == 0)
+            {
+                element = new T();
+                countAll++;
+            }
+            else
+            {
+                element = m_Stack.Pop();
+            }
+            if (m_ActionOnGet != null)
+                m_ActionOnGet(element);
+            return element;
+        }
+
+        public void Release(T element)
+        {
+            if (m_Stack.Count > 0 && ReferenceEquals(m_Stack.Peek(), element))
+                Debug.LogError("Internal error. Trying to destroy object that is already released to pool.");
+            if (m_ActionOnRelease != null)
+                m_ActionOnRelease(element);
+            m_Stack.Push(element);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..98d159172a0798002eed758e2ad1cd770728b75a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ObjectPool.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e69259f6ff914146ad610be5491eb44a
+timeCreated: 1458521389
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0d962de5994641d687d079b8110c66d8de48f623
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs
@@ -0,0 +1,212 @@
+#if UNITY_EDITOR
+
+using System;
+using System.IO;
+using UnityEngine;
+using UnityEditor;
+ 
+
+namespace TMPro
+{
+    [System.Serializable]
+    public class TMP_PackageResourceImporter
+    {
+        bool m_EssentialResourcesImported;
+        bool m_ExamplesAndExtrasResourcesImported;
+        internal bool m_IsImportingExamples;
+
+        public TMP_PackageResourceImporter() { }
+
+        public void OnDestroy()
+        {
+        }
+
+        public void OnGUI()
+        {
+            // Check if the resources state has changed.
+            m_EssentialResourcesImported = Directory.Exists("Assets/TextMesh Pro");
+            m_ExamplesAndExtrasResourcesImported = Directory.Exists("Assets/TextMesh Pro/Examples & Extras");
+
+            GUILayout.BeginVertical();
+            {
+                // Display options to import Essential resources
+                GUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    GUILayout.Label("TMP Essentials", EditorStyles.boldLabel);
+                    GUILayout.Label("This appears to be the first time you access TextMesh Pro, as such we need to add resources to your project that are essential for using TextMesh Pro. These new resources will be placed at the root of your project in the \"TextMesh Pro\" folder.", new GUIStyle(EditorStyles.label) { wordWrap = true } );
+                    GUILayout.Space(5f);
+
+                    GUI.enabled = !m_EssentialResourcesImported;
+                    if (GUILayout.Button("Import TMP Essentials"))
+                    {
+                        AssetDatabase.importPackageCompleted += ImportCallback;
+
+                        string packageFullPath = GetPackageFullPath();
+                        AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Essential Resources.unitypackage", false);
+                    }
+                    GUILayout.Space(5f);
+                    GUI.enabled = true;
+                }
+                GUILayout.EndVertical();
+
+                // Display options to import Examples & Extras
+                GUILayout.BeginVertical(EditorStyles.helpBox);
+                {
+                    GUILayout.Label("TMP Examples & Extras", EditorStyles.boldLabel);
+                    GUILayout.Label("The Examples & Extras package contains addition resources and examples that will make discovering and learning about TextMesh Pro's powerful features easier. These additional resources will be placed in the same folder as the TMP essential resources.", new GUIStyle(EditorStyles.label) { wordWrap = true });
+                    GUILayout.Space(5f);
+
+                    GUI.enabled = m_EssentialResourcesImported && !m_ExamplesAndExtrasResourcesImported;
+                    if (GUILayout.Button("Import TMP Examples & Extras"))
+                    {
+                        // Set flag to get around importing scripts as per of this package which results in an assembly reload which in turn prevents / clears any callbacks.
+                        m_IsImportingExamples = true;
+
+                        var packageFullPath = GetPackageFullPath();
+                        AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Examples & Extras.unitypackage", false);
+                    }
+                    GUILayout.Space(5f);
+                    GUI.enabled = true;
+                }
+                GUILayout.EndVertical();
+            }
+            GUILayout.EndVertical();
+            GUILayout.Space(5f);
+        }
+
+        internal void RegisterResourceImportCallback()
+        {
+            AssetDatabase.importPackageCompleted += ImportCallback;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="packageName"></param>
+        void ImportCallback(string packageName)
+        {
+            if (packageName == "TMP Essential Resources")
+            {
+                m_EssentialResourcesImported = true;
+                TMPro_EventManager.ON_RESOURCES_LOADED();
+
+                #if UNITY_2018_3_OR_NEWER
+                SettingsService.NotifySettingsProviderChanged();
+                #endif
+            }
+            else if (packageName == "TMP Examples & Extras")
+            {
+                m_ExamplesAndExtrasResourcesImported = true;
+                m_IsImportingExamples = false;
+            }
+
+            Debug.Log("[" + packageName + "] have been imported.");
+
+            AssetDatabase.importPackageCompleted -= ImportCallback;
+        }
+
+        static string GetPackageFullPath()
+        {
+            // Check for potential UPM package
+            string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro");
+            if (Directory.Exists(packagePath))
+            {
+                return packagePath;
+            }
+
+            packagePath = Path.GetFullPath("Assets/..");
+            if (Directory.Exists(packagePath))
+            {
+                // Search default location for development package
+                if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources"))
+                {
+                    return packagePath + "/Assets/Packages/com.unity.TextMeshPro";
+                }
+
+                // Search for default location of normal TextMesh Pro AssetStore package
+                if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources"))
+                {
+                    return packagePath + "/Assets/TextMesh Pro";
+                }
+
+                // Search for potential alternative locations in the user project
+                string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories);
+                string path = ValidateLocation(matchingPaths, packagePath);
+                if (path != null) return packagePath + path;
+            }
+
+            return null;
+        }
+
+        static string ValidateLocation(string[] paths, string projectPath)
+        {
+            for (int i = 0; i < paths.Length; i++)
+            {
+                // Check if the Editor Resources folder exists.
+                if (Directory.Exists(paths[i] + "/Editor Resources"))
+                {
+                    string folderPath = paths[i].Replace(projectPath, "");
+                    folderPath = folderPath.TrimStart('\\', '/');
+                    return folderPath;
+                }
+            }
+
+            return null;
+        }
+    }
+
+    public class TMP_PackageResourceImporterWindow : EditorWindow
+    {
+        [SerializeField]
+        TMP_PackageResourceImporter m_ResourceImporter;
+
+        public static void ShowPackageImporterWindow()
+        {
+            var window = GetWindow<TMP_PackageResourceImporterWindow>();
+            window.titleContent = new GUIContent("TMP Importer");
+            window.Focus();
+        }
+
+        void OnEnable()
+        {
+            // Set Editor Window Size
+            SetEditorWindowSize();
+
+            if (m_ResourceImporter == null)
+                m_ResourceImporter = new TMP_PackageResourceImporter();
+
+            if (m_ResourceImporter.m_IsImportingExamples)
+                m_ResourceImporter.RegisterResourceImportCallback();
+        }
+
+        void OnDestroy()
+        {
+            m_ResourceImporter.OnDestroy();
+        }
+
+        void OnGUI()
+        {
+            m_ResourceImporter.OnGUI();
+        }
+
+        void OnInspectorUpdate()
+        {
+            Repaint();
+        }
+        
+        /// <summary>
+        /// Limits the minimum size of the editor window.
+        /// </summary>
+        void SetEditorWindowSize()
+        {
+            EditorWindow editorWindow = this;
+
+            Vector2 windowSize = new Vector2(640, 210);
+            editorWindow.minSize = windowSize;
+            editorWindow.maxSize = windowSize;
+        }
+    }
+
+}
+
+#endif
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1243ebfd60fced578ff857dd3f690023bdb75ea4
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_PackageResourceImporter.cs.meta
@@ -0,0 +1,16 @@
+fileFormatVersion: 2
+guid: cf1fe50a641faac4691bf49eb32ce333
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences:
+  - m_PersistentViewDataDictionary: {instanceID: 0}
+  - LightSkin: {fileID: 11400000, guid: 0c156a7b2f4d450da1716b1625b5441d, type: 2}
+  - DarkSkin: {fileID: 11400000, guid: 9d345c3252c147c89e8b61a249a46a9d, type: 2}
+  - TMPEssentials: {fileID: 102900000, guid: ce4ff17ca867d2b48b5c8a4181611901, type: 3}
+  - TMPExamples: {fileID: 102900000, guid: bc00e25696e4132499f56528d3fed2e3, type: 3}
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2567a28d8b3d9637376ed41d84bdc27f5a86002c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs
@@ -0,0 +1,278 @@
+namespace TMPro
+{
+    /// <summary>
+    /// Structure used to track basic XML tags which are binary (on / off)
+    /// </summary>
+    public struct TMP_FontStyleStack
+    {
+        public byte bold;
+        public byte italic;
+        public byte underline;
+        public byte strikethrough;
+        public byte highlight;
+        public byte superscript;
+        public byte subscript;
+        public byte uppercase;
+        public byte lowercase;
+        public byte smallcaps;
+
+        /// <summary>
+        /// Clear the basic XML tag stack.
+        /// </summary>
+        public void Clear()
+        {
+            bold = 0;
+            italic = 0;
+            underline = 0;
+            strikethrough = 0;
+            highlight = 0;
+            superscript = 0;
+            subscript = 0;
+            uppercase = 0;
+            lowercase = 0;
+            smallcaps = 0;
+        }
+
+        public byte Add(FontStyles style)
+        {
+            switch (style)
+            {
+                case FontStyles.Bold:
+                    bold++;
+                    return bold;
+                case FontStyles.Italic:
+                    italic++;
+                    return italic;
+                case FontStyles.Underline:
+                    underline++;
+                    return underline;
+                case FontStyles.Strikethrough:
+                    strikethrough++;
+                    return strikethrough;
+                case FontStyles.Superscript:
+                    superscript++;
+                    return superscript;
+                case FontStyles.Subscript:
+                    subscript++;
+                    return subscript;
+                case FontStyles.Highlight:
+                    highlight++;
+                    return highlight;
+            }
+
+            return 0;
+        }
+
+        public byte Remove(FontStyles style)
+        {
+            switch (style)
+            {
+                case FontStyles.Bold:
+                    if (bold > 1)
+                        bold--;
+                    else
+                        bold = 0;
+                    return bold;
+                case FontStyles.Italic:
+                    if (italic > 1)
+                        italic--;
+                    else
+                        italic = 0;
+                    return italic;
+                case FontStyles.Underline:
+                    if (underline > 1)
+                        underline--;
+                    else
+                        underline = 0;
+                    return underline;
+                case FontStyles.Strikethrough:
+                    if (strikethrough > 1)
+                        strikethrough--;
+                    else
+                        strikethrough = 0;
+                    return strikethrough;
+                case FontStyles.Highlight:
+                    if (highlight > 1)
+                        highlight--;
+                    else
+                        highlight = 0;
+                    return highlight;
+                case FontStyles.Superscript:
+                    if (superscript > 1)
+                        superscript--;
+                    else
+                        superscript = 0;
+                    return superscript;
+                case FontStyles.Subscript:
+                    if (subscript > 1)
+                        subscript--;
+                    else
+                        subscript = 0;
+                    return subscript;
+            }
+
+            return 0;
+        }
+    }
+
+
+    /// <summary>
+    /// Structure used to track XML tags of various types.
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public struct TMP_RichTextTagStack<T>
+    {
+        public T[] m_ItemStack;
+        public int m_Index;
+        private int m_Capacity;
+
+        private T m_DefaultItem;
+
+        private const int k_DefaultCapacity = 4;
+        //static readonly T[] m_EmptyStack = new T[0];
+
+        /// <summary>
+        /// Constructor to create a new item stack.
+        /// </summary>
+        /// <param name="tagStack"></param>
+        public TMP_RichTextTagStack(T[] tagStack)
+        {
+            m_ItemStack = tagStack;
+            m_Capacity = tagStack.Length;
+            m_Index = 0;
+
+            m_DefaultItem = default(T);
+        }
+
+        /// <summary>
+        /// Constructor for a new item stack with the given capacity.
+        /// </summary>
+        /// <param name="capacity"></param>
+        public TMP_RichTextTagStack(int capacity)
+        {
+            m_ItemStack = new T[capacity];
+            m_Capacity = capacity;
+            m_Index = 0;
+
+            m_DefaultItem = default(T);
+        }
+
+
+        /// <summary>
+        /// Function to clear and reset stack to first item.
+        /// </summary>
+        public void Clear()
+        {
+            m_Index = 0;
+        }
+
+
+        /// <summary>
+        /// Function to set the first item on the stack and reset index.
+        /// </summary>
+        /// <param name="item"></param>
+        public void SetDefault(T item)
+        {
+            m_ItemStack[0] = item;
+            m_Index = 1;
+        }
+
+
+        /// <summary>
+        /// Function to add a new item to the stack.
+        /// </summary>
+        /// <param name="item"></param>
+        public void Add(T item)
+        {
+            if (m_Index < m_ItemStack.Length)
+            {
+                m_ItemStack[m_Index] = item;
+                m_Index += 1;
+            }
+        }
+
+
+        /// <summary>
+        /// Function to retrieve an item from the stack.
+        /// </summary>
+        /// <returns></returns>
+        public T Remove()
+        {
+            m_Index -= 1;
+
+            if (m_Index <= 0)
+            {
+                m_Index = 1;
+                return m_ItemStack[0];
+
+            }
+
+            return m_ItemStack[m_Index - 1];
+        }
+
+        public void Push(T item)
+        {
+            if (m_Index == m_Capacity)
+            {
+                m_Capacity *= 2;
+                if (m_Capacity == 0)
+                    m_Capacity = k_DefaultCapacity;
+
+                System.Array.Resize(ref m_ItemStack, m_Capacity);
+            }
+
+            m_ItemStack[m_Index] = item;
+            m_Index += 1;
+        }
+
+        public T Pop()
+        {
+            if (m_Index == 0)
+                return default(T);
+
+            m_Index -= 1;
+            T item = m_ItemStack[m_Index];
+            m_ItemStack[m_Index] = m_DefaultItem;
+
+            return item;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public T Peek()
+        {
+            if (m_Index == 0)
+                return m_DefaultItem;
+
+            return m_ItemStack[m_Index - 1];
+        }
+
+
+        /// <summary>
+        /// Function to retrieve the current item from the stack.
+        /// </summary>
+        /// <returns>itemStack <T></returns>
+        public T CurrentItem()
+        {
+            if (m_Index > 0)
+                return m_ItemStack[m_Index - 1];
+
+            return m_ItemStack[0];
+        }
+
+
+        /// <summary>
+        /// Function to retrieve the previous item without affecting the stack.
+        /// </summary>
+        /// <returns></returns>
+        public T PreviousItem()
+        {
+            if (m_Index > 1)
+                return m_ItemStack[m_Index - 2];
+
+            return m_ItemStack[0];
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c1ba7179be052418d6d9fee748076eab917ae1d5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagStack.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 20a9b557a46149dfbfa04a3a7080f5aa
+timeCreated: 1448242247
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs
new file mode 100644
index 0000000000000000000000000000000000000000..912ec8889466da15d395c63aaa178aa56b963c12
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs
@@ -0,0 +1,113 @@
+using System;
+using UnityEngine.Bindings;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Rich Text Tags and Attribute definitions and their respective HashCode values.
+    /// </summary>
+    enum RichTextTag : uint
+    {
+        // Rich Text Tags
+        BOLD = 66,                      // <b>
+        SLASH_BOLD = 1613,              // </b>
+        ITALIC = 73,                    // <i>
+        SLASH_ITALIC = 1606,            // </i>
+        UNDERLINE = 85,                 // <u>
+        SLASH_UNDERLINE = 1626,         // </u>
+        STRIKETHROUGH = 83,             // <s>
+        SLASH_STRIKETHROUGH = 1628,     // </s>
+        COLOR = 81999901,               // <color>
+        SLASH_COLOR = 1909026194,       // </color>
+        SIZE = 3061285,                 // <size>
+        SLASH_SIZE = 58429962,          // </size>
+        SPRITE = 3303439849,            // <sprite>
+        BR = 2256,                      // <br>
+        STYLE = 100252951,              // <style>
+        SLASH_STYLE = 1927738392,       // </style>
+        FONT = 2586451,                 // <font>
+        SLASH_FONT = 57747708,          // </font>
+        LINK = 2656128,                 // <link>
+        SLASH_LINK = 57686191,          // </link>
+        FONT_WEIGHT = 2405071134,       // <font-weight=xxx>
+        SLASH_FONT_WEIGHT = 3536990865, // </font-weight>
+
+
+        // Font Features
+        LIGA = 2655971,                 // <liga>
+        SLASH_LIGA = 57686604,          // </liga>
+        FRAC = 2598518,                 // <frac>
+        SLASH_FRAC = 57774681,          // </frac>
+
+        // Attributes
+        NAME = 2875623,                 // <sprite name="Name of Sprite">
+        INDEX = 84268030,               // <sprite index=7>
+        TINT = 2960519,                 // <tint=bool>
+        ANIM = 2283339,                 // <anim="first frame, last frame, frame rate">
+        MATERIAL = 825491659,           // <font="Name of font asset" material="Name of material">
+
+        // Named Colors
+        RED = 91635,
+        GREEN = 87065851,
+        BLUE = 2457214,
+        YELLOW = 3412522628,
+        ORANGE = 3186379376,
+
+        // Prefix and Unit suffix
+        PLUS = 43,
+        MINUS = 45,
+        PX = 2568,
+        PLUS_PX = 49507,
+        MINUS_PX = 47461,
+        EM = 2216,
+        PLUS_EM = 49091,
+        MINUS_EM = 46789,
+        PCT = 85031,
+        PLUS_PCT = 1634348,
+        MINUS_PCT = 1567082,
+        PERCENTAGE = 37,
+        PLUS_PERCENTAGE = 1454,
+        MINUS_PERCENTAGE = 1512,
+
+        TRUE = 2932022,
+        FALSE = 85422813,
+
+        DEFAULT = 3673993291,           // <font="Default">
+
+    };
+
+    /// <summary>
+    /// Defines the type of value used by a rich text tag or tag attribute.
+    /// </summary>
+    public enum TagValueType
+    {
+        None            = 0x0,
+        NumericalValue  = 0x1,
+        StringValue     = 0x2,
+        ColorValue      = 0x4,
+    }
+
+    public enum TagUnitType
+    {
+        Pixels      = 0x0,
+        FontUnits   = 0x1,
+        Percentage  = 0x2,
+    }
+
+    /// <summary>
+    /// Commonly referenced Unicode characters in the text generation process.
+    /// </summary>
+    enum UnicodeCharacter : uint
+    {
+        HYPHEN_MINUS = 0x2D,
+        SOFT_HYPHEN = 0xAD,
+        HYPHEN = 0x2010,
+        NON_BREAKING_HYPHEN = 0x2011,
+        ZERO_WIDTH_SPACE = 0x200B,
+        RIGHT_SINGLE_QUOTATION = 0x2019,
+        APOSTROPHE = 0x27,
+        WORD_JOINER = 0x2060,           // Prohibits line break.
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8fe5ec41c444014cc51b0893298890b23e8259fc
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_RichTextTagsCommon.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b458b2c7f196bdc4581b2f9fd6a5d931
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a24e2aaa1f6293399cb56f79ac2c0965b3e58b25
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs
@@ -0,0 +1,31 @@
+using UnityEngine;
+using UnityEngine.Events;
+using UnityEngine.EventSystems;
+using System;
+
+
+namespace TMPro
+{
+
+    public class TMP_ScrollbarEventHandler : MonoBehaviour, IPointerClickHandler, ISelectHandler, IDeselectHandler
+    {
+        public bool isSelected;
+
+        public void OnPointerClick(PointerEventData eventData)
+        {
+            Debug.Log("Scrollbar click...");
+        }
+
+        public void OnSelect(BaseEventData eventData)
+        {
+            Debug.Log("Scrollbar selected");
+            isSelected = true;
+        }
+
+        public void OnDeselect(BaseEventData eventData)
+        {
+            Debug.Log("Scrollbar De-Selected");
+            isSelected = false;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e283d82e202498e34df23bc120e68f1e424e08cb
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ScrollbarEventHandler.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 34e150112c1c42ac83170b52d898e322
+timeCreated: 1484171293
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs
new file mode 100644
index 0000000000000000000000000000000000000000..9a48e238b54f1179af82764791afb0f1b7ce4932
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// A simple component that can be added to a newly created object where inheriting from MaskableGraphic is needed.
+    /// </summary>
+    public class TMP_SelectionCaret : MaskableGraphic
+    {
+
+        /// <summary>
+        /// Override to Cull function of MaskableGraphic to prevent Culling.
+        /// </summary>
+        /// <param name="clipRect"></param>
+        /// <param name="validRect"></param>
+        public override void Cull(Rect clipRect, bool validRect)
+        {
+            //base.Cull(clipRect, validRect);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ad26005a4e4da0d5e567bd5eb29b31a1a6579bfd
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SelectionCaret.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ca819640f53b48919bf7774744f7f15e
+timeCreated: 1477609203
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs
new file mode 100644
index 0000000000000000000000000000000000000000..43f1f7ab7bd3101ebcea6c35d536a03d8c619934
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs
@@ -0,0 +1,440 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+
+#pragma warning disable 0649 // Disabled warnings related to serialized fields not assigned in this script but used in the editor.
+
+namespace TMPro
+{
+    [System.Serializable]
+    public class TMP_Settings : ScriptableObject
+    {
+        private static TMP_Settings s_Instance;
+
+        /// <summary>
+        /// Returns the release version of the product.
+        /// </summary>
+        public static string version
+        {
+            get { return "1.4.0"; }
+        }
+
+        /// <summary>
+        /// Controls if Word Wrapping will be enabled on newly created text objects by default.
+        /// </summary>
+        public static bool enableWordWrapping
+        {
+            get { return instance.m_enableWordWrapping; }
+        }
+        [SerializeField]
+        private bool m_enableWordWrapping;
+
+        /// <summary>
+        /// Controls if Kerning is enabled on newly created text objects by default.
+        /// </summary>
+        public static bool enableKerning
+        {
+            get { return instance.m_enableKerning; }
+        }
+        [SerializeField]
+        private bool m_enableKerning;
+
+        /// <summary>
+        /// Controls if Extra Padding is enabled on newly created text objects by default.
+        /// </summary>
+        public static bool enableExtraPadding
+        {
+            get { return instance.m_enableExtraPadding; }
+        }
+        [SerializeField]
+        private bool m_enableExtraPadding;
+
+        /// <summary>
+        /// Controls if TintAllSprites is enabled on newly created text objects by default.
+        /// </summary>
+        public static bool enableTintAllSprites
+        {
+            get { return instance.m_enableTintAllSprites; }
+        }
+        [SerializeField]
+        private bool m_enableTintAllSprites;
+
+        /// <summary>
+        /// Controls if Escape Characters will be parsed in the Text Input Box on newly created text objects.
+        /// </summary>
+        public static bool enableParseEscapeCharacters
+        {
+            get { return instance.m_enableParseEscapeCharacters; }
+        }
+        [SerializeField]
+        private bool m_enableParseEscapeCharacters;
+
+        /// <summary>
+        /// Controls if Raycast Target is enabled by default on newly created text objects.
+        /// </summary>
+        public static bool enableRaycastTarget
+        {
+            get { return instance.m_EnableRaycastTarget; }
+        }
+        [SerializeField]
+        private bool m_EnableRaycastTarget = true;
+
+        /// <summary>
+        /// Determines if OpenType Font Features should be retrieved at runtime from the source font file.
+        /// </summary>
+        public static bool getFontFeaturesAtRuntime
+        {
+            get { return instance.m_GetFontFeaturesAtRuntime; }
+        }
+        [SerializeField]
+        private bool m_GetFontFeaturesAtRuntime = true;
+
+        /// <summary>
+        /// The character that will be used as a replacement for missing glyphs in a font asset.
+        /// </summary>
+        public static int missingGlyphCharacter
+        {
+            get { return instance.m_missingGlyphCharacter; }
+            set { instance.m_missingGlyphCharacter = value; }
+        }
+        [SerializeField]
+        private int m_missingGlyphCharacter;
+
+        /// <summary>
+        /// Controls the display of warning message in the console.
+        /// </summary>
+        public static bool warningsDisabled
+        {
+            get { return instance.m_warningsDisabled; }
+        }
+        [SerializeField]
+        private bool m_warningsDisabled;
+
+        /// <summary>
+        /// Returns the Default Font Asset to be used by newly created text objects.
+        /// </summary>
+        public static TMP_FontAsset defaultFontAsset
+        {
+            get { return instance.m_defaultFontAsset; }
+        }
+        [SerializeField]
+        private TMP_FontAsset m_defaultFontAsset;
+
+        /// <summary>
+        /// The relative path to a Resources folder in the project.
+        /// </summary>
+        public static string defaultFontAssetPath
+        {
+            get { return instance.m_defaultFontAssetPath; }
+        }
+        [SerializeField]
+        private string m_defaultFontAssetPath;
+
+        /// <summary>
+        /// The Default Point Size of newly created text objects.
+        /// </summary>
+        public static float defaultFontSize
+        {
+            get { return instance.m_defaultFontSize; }
+        }
+        [SerializeField]
+        private float m_defaultFontSize;
+
+        /// <summary>
+        /// The multiplier used to computer the default Min point size when Text Auto Sizing is used.
+        /// </summary>
+        public static float defaultTextAutoSizingMinRatio
+        {
+            get { return instance.m_defaultAutoSizeMinRatio; }
+        }
+        [SerializeField]
+        private float m_defaultAutoSizeMinRatio;
+
+        /// <summary>
+        /// The multiplier used to computer the default Max point size when Text Auto Sizing is used.
+        /// </summary>
+        public static float defaultTextAutoSizingMaxRatio
+        {
+            get { return instance.m_defaultAutoSizeMaxRatio; }
+        }
+        [SerializeField]
+        private float m_defaultAutoSizeMaxRatio;
+
+        /// <summary>
+        /// The Default Size of the Text Container of a TextMeshPro object.
+        /// </summary>
+        public static Vector2 defaultTextMeshProTextContainerSize
+        {
+            get { return instance.m_defaultTextMeshProTextContainerSize; }
+        }
+        [SerializeField]
+        private Vector2 m_defaultTextMeshProTextContainerSize;
+
+        /// <summary>
+        /// The Default Width of the Text Container of a TextMeshProUI object.
+        /// </summary>
+        public static Vector2 defaultTextMeshProUITextContainerSize
+        {
+            get { return instance.m_defaultTextMeshProUITextContainerSize; }
+        }
+        [SerializeField]
+        private Vector2 m_defaultTextMeshProUITextContainerSize;
+
+        /// <summary>
+        /// Set the size of the text container of newly created text objects to match the size of the text.
+        /// </summary>
+        public static bool autoSizeTextContainer
+        {
+            get { return instance.m_autoSizeTextContainer; }
+        }
+        [SerializeField]
+        private bool m_autoSizeTextContainer;
+
+        /// <summary>
+        /// Returns the list of Fallback Fonts defined in the TMP Settings file.
+        /// </summary>
+        public static List<TMP_FontAsset> fallbackFontAssets
+        {
+            get { return instance.m_fallbackFontAssets; }
+        }
+        [SerializeField]
+        private List<TMP_FontAsset> m_fallbackFontAssets;
+
+        /// <summary>
+        /// Controls whether or not TMP will create a matching material preset or use the default material of the fallback font asset.
+        /// </summary>
+        public static bool matchMaterialPreset
+        {
+            get { return instance.m_matchMaterialPreset; }
+        }
+        [SerializeField]
+        private bool m_matchMaterialPreset;
+
+        /// <summary>
+        /// The Default Sprite Asset to be used by default.
+        /// </summary>
+        public static TMP_SpriteAsset defaultSpriteAsset
+        {
+            get { return instance.m_defaultSpriteAsset; }
+        }
+        [SerializeField]
+        private TMP_SpriteAsset m_defaultSpriteAsset;
+
+        /// <summary>
+        /// The relative path to a Resources folder in the project.
+        /// </summary>
+        public static string defaultSpriteAssetPath
+        {
+            get { return instance.m_defaultSpriteAssetPath; }
+        }
+        [SerializeField]
+        private string m_defaultSpriteAssetPath;
+
+        /// <summary>
+        /// The relative path to a Resources folder in the project that contains Color Gradient Presets.
+        /// </summary>
+        public static string defaultColorGradientPresetsPath
+        {
+            get { return instance.m_defaultColorGradientPresetsPath; }
+        }
+        [SerializeField]
+        private string m_defaultColorGradientPresetsPath;
+
+        /// <summary>
+        /// Determines if Emoji support is enabled in the Input Field TouchScreenKeyboard.
+        /// </summary>
+        public static bool enableEmojiSupport
+        {
+            get { return instance.m_enableEmojiSupport; }
+            set { instance.m_enableEmojiSupport = value; }
+        }
+        [SerializeField]
+        private bool m_enableEmojiSupport;
+
+        /// <summary>
+        /// The Default Style Sheet used by the text objects.
+        /// </summary>
+        public static TMP_StyleSheet defaultStyleSheet
+        {
+            get { return instance.m_defaultStyleSheet; }
+        }
+        [SerializeField]
+        private TMP_StyleSheet m_defaultStyleSheet;
+
+        /// <summary>
+        /// Text file that contains the leading characters used for line breaking for Asian languages.
+        /// </summary>
+        public static TextAsset leadingCharacters
+        {
+            get { return instance.m_leadingCharacters; }
+        }
+        [SerializeField]
+        private TextAsset m_leadingCharacters;
+
+        /// <summary>
+        /// Text file that contains the following characters used for line breaking for Asian languages.
+        /// </summary>
+        public static TextAsset followingCharacters
+        {
+            get { return instance.m_followingCharacters; }
+        }
+        [SerializeField]
+        private TextAsset m_followingCharacters;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static LineBreakingTable linebreakingRules
+        {
+            get
+            {
+                if (instance.m_linebreakingRules == null)
+                    LoadLinebreakingRules();
+
+                return instance.m_linebreakingRules;
+            }
+        }
+        [SerializeField]
+        private LineBreakingTable m_linebreakingRules;
+
+        /// <summary>
+        /// Get a singleton instance of the settings class.
+        /// </summary>
+        public static TMP_Settings instance
+        {
+            get
+            {
+                if (TMP_Settings.s_Instance == null)
+                {
+                    TMP_Settings.s_Instance = Resources.Load<TMP_Settings>("TMP Settings");
+
+                    #if UNITY_EDITOR
+                    // Make sure TextMesh Pro UPM packages resources have been added to the user project
+                    if (TMP_Settings.s_Instance == null)
+                    {
+                        // Open TMP Resources Importer
+                        TMP_PackageResourceImporterWindow.ShowPackageImporterWindow();
+                    }
+                    #endif
+                }
+
+                return TMP_Settings.s_Instance;
+            }
+        }
+
+
+        /// <summary>
+        /// Static Function to load the TMP Settings file.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_Settings LoadDefaultSettings()
+        {
+            if (s_Instance == null)
+            {
+                // Load settings from TMP_Settings file
+                TMP_Settings settings = Resources.Load<TMP_Settings>("TMP Settings");
+                if (settings != null)
+                    s_Instance = settings;
+            }
+
+            return s_Instance;
+        }
+
+
+        /// <summary>
+        /// Returns the Sprite Asset defined in the TMP Settings file.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_Settings GetSettings()
+        {
+            if (TMP_Settings.instance == null) return null;
+
+            return TMP_Settings.instance;
+        }
+
+
+        /// <summary>
+        /// Returns the Font Asset defined in the TMP Settings file.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_FontAsset GetFontAsset()
+        {
+            if (TMP_Settings.instance == null) return null;
+
+            return TMP_Settings.instance.m_defaultFontAsset;
+        }
+
+
+        /// <summary>
+        /// Returns the Sprite Asset defined in the TMP Settings file.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_SpriteAsset GetSpriteAsset()
+        {
+            if (TMP_Settings.instance == null) return null;
+
+            return TMP_Settings.instance.m_defaultSpriteAsset;
+        }
+
+
+        /// <summary>
+        /// Returns the Sprite Asset defined in the TMP Settings file.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_StyleSheet GetStyleSheet()
+        {
+            if (TMP_Settings.instance == null) return null;
+
+            return TMP_Settings.instance.m_defaultStyleSheet;
+        }
+
+
+        public static void LoadLinebreakingRules()
+        {
+            //Debug.Log("Loading Line Breaking Rules for Asian Languages.");
+
+            if (TMP_Settings.instance == null) return;
+
+            if (s_Instance.m_linebreakingRules == null)
+                s_Instance.m_linebreakingRules = new LineBreakingTable();
+
+            s_Instance.m_linebreakingRules.leadingCharacters = GetCharacters(s_Instance.m_leadingCharacters);
+            s_Instance.m_linebreakingRules.followingCharacters = GetCharacters(s_Instance.m_followingCharacters);
+        }
+
+
+        /// <summary>
+        ///  Get the characters from the line breaking files
+        /// </summary>
+        /// <param name="file"></param>
+        /// <returns></returns>
+        private static Dictionary<int, char> GetCharacters(TextAsset file)
+        {
+            Dictionary<int, char> dict = new Dictionary<int, char>();
+            string text = file.text;
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                char c = text[i];
+                // Check to make sure we don't include duplicates
+                if (dict.ContainsKey((int)c) == false)
+                {
+                    dict.Add((int)c, c);
+                    //Debug.Log("Adding [" + (int)c + "] to dictionary.");
+                }
+                //else
+                //    Debug.Log("Character [" + text[i] + "] is a duplicate.");
+            }
+
+            return dict;
+        }
+
+
+        public class LineBreakingTable
+        {
+            public Dictionary<int, char> leadingCharacters;
+            public Dictionary<int, char> followingCharacters;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4d929ffaf135979c311562d236bef40e22c389cf
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Settings.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2705215ac5b84b70bacc50632be6e391
+timeCreated: 1457654851
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..18b9852aff03be5bab7e43061958e467519bc848
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs
@@ -0,0 +1,563 @@
+using UnityEngine;
+using System.Linq;
+using System.Collections;
+
+
+namespace TMPro
+{
+    public static class ShaderUtilities
+    {
+        // Shader Property IDs
+        public static int ID_MainTex;
+
+        public static int ID_FaceTex;
+        public static int ID_FaceColor; 
+        public static int ID_FaceDilate;
+        public static int ID_Shininess;
+
+        public static int ID_UnderlayColor;
+        public static int ID_UnderlayOffsetX; 
+        public static int ID_UnderlayOffsetY; 
+        public static int ID_UnderlayDilate;
+        public static int ID_UnderlaySoftness;
+
+        public static int ID_WeightNormal; 
+        public static int ID_WeightBold;
+
+        public static int ID_OutlineTex;
+        public static int ID_OutlineWidth; 
+        public static int ID_OutlineSoftness;
+        public static int ID_OutlineColor;
+
+        public static int ID_Padding;
+        public static int ID_GradientScale; 
+        public static int ID_ScaleX; 
+        public static int ID_ScaleY; 
+        public static int ID_PerspectiveFilter;
+        public static int ID_Sharpness;
+
+        public static int ID_TextureWidth; 
+        public static int ID_TextureHeight; 
+
+        public static int ID_BevelAmount; 
+
+        public static int ID_GlowColor; 
+        public static int ID_GlowOffset;
+        public static int ID_GlowPower;  
+        public static int ID_GlowOuter; 
+       
+        public static int ID_LightAngle;
+
+        public static int ID_EnvMap;
+        public static int ID_EnvMatrix;
+        public static int ID_EnvMatrixRotation;
+
+        //public static int ID_MaskID;
+        public static int ID_MaskCoord;
+        public static int ID_ClipRect; 
+        public static int ID_MaskSoftnessX; 
+        public static int ID_MaskSoftnessY; 
+        public static int ID_VertexOffsetX; 
+        public static int ID_VertexOffsetY;
+        public static int ID_UseClipRect;
+
+        public static int ID_StencilID;
+        public static int ID_StencilOp;
+        public static int ID_StencilComp;
+        public static int ID_StencilReadMask;
+        public static int ID_StencilWriteMask;
+        
+        public static int ID_ShaderFlags; 
+        public static int ID_ScaleRatio_A;
+        public static int ID_ScaleRatio_B;
+        public static int ID_ScaleRatio_C;
+        
+        public static string Keyword_Bevel = "BEVEL_ON";
+        public static string Keyword_Glow = "GLOW_ON";
+        public static string Keyword_Underlay = "UNDERLAY_ON";
+        public static string Keyword_Ratios = "RATIOS_OFF";
+        //public static string Keyword_MASK_OFF = "MASK_OFF";
+        public static string Keyword_MASK_SOFT = "MASK_SOFT";
+        public static string Keyword_MASK_HARD = "MASK_HARD";
+        public static string Keyword_MASK_TEX = "MASK_TEX";
+        public static string Keyword_Outline = "OUTLINE_ON";
+
+        public static string ShaderTag_ZTestMode = "unity_GUIZTestMode";
+        public static string ShaderTag_CullMode = "_CullMode";
+
+        private static float m_clamp = 1.0f;
+        public static bool isInitialized = false;
+
+
+        /// <summary>
+        /// Returns a reference to the mobile distance field shader.
+        /// </summary>
+        internal static Shader ShaderRef_MobileSDF
+        {
+            get
+            {
+                if (k_ShaderRef_MobileSDF == null)
+                    k_ShaderRef_MobileSDF = Shader.Find("TextMeshPro/Mobile/Distance Field");
+
+                return k_ShaderRef_MobileSDF;
+            }
+        }
+        static Shader k_ShaderRef_MobileSDF;
+
+        /// <summary>
+        /// Returns a reference to the mobile bitmap shader.
+        /// </summary>
+        internal static Shader ShaderRef_MobileBitmap
+        {
+            get
+            {
+                if (k_ShaderRef_MobileBitmap == null)
+                    k_ShaderRef_MobileBitmap = Shader.Find("TextMeshPro/Mobile/Bitmap");
+
+                return k_ShaderRef_MobileBitmap;
+            }
+        }
+        static Shader k_ShaderRef_MobileBitmap;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static ShaderUtilities()
+        {
+            GetShaderPropertyIDs();
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static void GetShaderPropertyIDs()
+        {
+            if (isInitialized == false)
+            {
+                //Debug.Log("Getting Shader property IDs");
+                isInitialized = true;
+
+                ID_MainTex = Shader.PropertyToID("_MainTex");
+
+                ID_FaceTex = Shader.PropertyToID("_FaceTex");
+                ID_FaceColor = Shader.PropertyToID("_FaceColor");
+                ID_FaceDilate = Shader.PropertyToID("_FaceDilate");
+                ID_Shininess = Shader.PropertyToID("_FaceShininess");
+            
+                ID_UnderlayColor = Shader.PropertyToID("_UnderlayColor");
+                ID_UnderlayOffsetX = Shader.PropertyToID("_UnderlayOffsetX");
+                ID_UnderlayOffsetY = Shader.PropertyToID("_UnderlayOffsetY");
+                ID_UnderlayDilate = Shader.PropertyToID("_UnderlayDilate");
+                ID_UnderlaySoftness = Shader.PropertyToID("_UnderlaySoftness");
+
+                ID_WeightNormal = Shader.PropertyToID("_WeightNormal");
+                ID_WeightBold = Shader.PropertyToID("_WeightBold");
+
+                ID_OutlineTex = Shader.PropertyToID("_OutlineTex");
+                ID_OutlineWidth = Shader.PropertyToID("_OutlineWidth");
+                ID_OutlineSoftness = Shader.PropertyToID("_OutlineSoftness");
+                ID_OutlineColor = Shader.PropertyToID("_OutlineColor");
+
+                ID_Padding = Shader.PropertyToID("_Padding");
+                ID_GradientScale = Shader.PropertyToID("_GradientScale");
+                ID_ScaleX = Shader.PropertyToID("_ScaleX");
+                ID_ScaleY = Shader.PropertyToID("_ScaleY");
+                ID_PerspectiveFilter = Shader.PropertyToID("_PerspectiveFilter");
+                ID_Sharpness = Shader.PropertyToID("_Sharpness");
+
+                ID_TextureWidth = Shader.PropertyToID("_TextureWidth");
+                ID_TextureHeight = Shader.PropertyToID("_TextureHeight");
+
+                ID_BevelAmount = Shader.PropertyToID("_Bevel");
+
+                ID_LightAngle = Shader.PropertyToID("_LightAngle");
+
+                ID_EnvMap = Shader.PropertyToID("_Cube");
+                ID_EnvMatrix = Shader.PropertyToID("_EnvMatrix");
+                ID_EnvMatrixRotation = Shader.PropertyToID("_EnvMatrixRotation");
+
+
+                ID_GlowColor = Shader.PropertyToID("_GlowColor");
+                ID_GlowOffset = Shader.PropertyToID("_GlowOffset");
+                ID_GlowPower = Shader.PropertyToID("_GlowPower");
+                ID_GlowOuter = Shader.PropertyToID("_GlowOuter");
+
+                //ID_MaskID = Shader.PropertyToID("_MaskID");
+                ID_MaskCoord = Shader.PropertyToID("_MaskCoord");
+                ID_ClipRect = Shader.PropertyToID("_ClipRect");
+                ID_UseClipRect = Shader.PropertyToID("_UseClipRect");
+                ID_MaskSoftnessX = Shader.PropertyToID("_MaskSoftnessX");
+                ID_MaskSoftnessY = Shader.PropertyToID("_MaskSoftnessY");
+                ID_VertexOffsetX = Shader.PropertyToID("_VertexOffsetX");
+                ID_VertexOffsetY = Shader.PropertyToID("_VertexOffsetY");
+
+                ID_StencilID = Shader.PropertyToID("_Stencil");
+                ID_StencilOp = Shader.PropertyToID("_StencilOp");
+                ID_StencilComp = Shader.PropertyToID("_StencilComp");
+                ID_StencilReadMask = Shader.PropertyToID("_StencilReadMask");
+                ID_StencilWriteMask = Shader.PropertyToID("_StencilWriteMask");
+
+                ID_ShaderFlags = Shader.PropertyToID("_ShaderFlags");
+                ID_ScaleRatio_A = Shader.PropertyToID("_ScaleRatioA");
+                ID_ScaleRatio_B = Shader.PropertyToID("_ScaleRatioB");
+                ID_ScaleRatio_C = Shader.PropertyToID("_ScaleRatioC");
+
+                // Set internal shader references
+                if (k_ShaderRef_MobileSDF == null)
+                    k_ShaderRef_MobileSDF = Shader.Find("TextMeshPro/Mobile/Distance Field");
+
+                if (k_ShaderRef_MobileBitmap == null)
+                    k_ShaderRef_MobileBitmap = Shader.Find("TextMeshPro/Mobile/Bitmap");
+            }
+        }
+
+
+
+        // Scale Ratios to ensure property ranges are optimum in Material Editor  
+        public static void UpdateShaderRatios(Material mat)
+        {
+            //Debug.Log("UpdateShaderRatios() called.");
+
+            float ratio_A = 1;
+            float ratio_B = 1;
+            float ratio_C = 1;
+
+            bool isRatioEnabled = !mat.shaderKeywords.Contains(Keyword_Ratios);
+
+            // Compute Ratio A
+            float scale = mat.GetFloat(ID_GradientScale);
+            float faceDilate = mat.GetFloat(ID_FaceDilate);
+            float outlineThickness = mat.GetFloat(ID_OutlineWidth);
+            float outlineSoftness = mat.GetFloat(ID_OutlineSoftness);
+
+            float weight = Mathf.Max(mat.GetFloat(ID_WeightNormal), mat.GetFloat(ID_WeightBold)) / 4.0f;
+
+            float t = Mathf.Max(1, weight + faceDilate + outlineThickness + outlineSoftness);
+
+            ratio_A = isRatioEnabled ? (scale - m_clamp) / (scale * t) : 1;
+
+            //float ratio_A_old = mat.GetFloat(ID_ScaleRatio_A);
+
+            // Only set the ratio if it has changed.
+            //if (ratio_A != ratio_A_old)
+                mat.SetFloat(ID_ScaleRatio_A, ratio_A);
+
+            // Compute Ratio B
+            if (mat.HasProperty(ID_GlowOffset))
+            {
+                float glowOffset = mat.GetFloat(ID_GlowOffset);
+                float glowOuter = mat.GetFloat(ID_GlowOuter);
+
+                float range = (weight + faceDilate) * (scale - m_clamp);
+
+                t = Mathf.Max(1, glowOffset + glowOuter);
+
+                ratio_B = isRatioEnabled ? Mathf.Max(0, scale - m_clamp - range) / (scale * t) : 1;
+                //float ratio_B_old = mat.GetFloat(ID_ScaleRatio_B);
+
+                // Only set the ratio if it has changed.
+                //if (ratio_B != ratio_B_old)
+                    mat.SetFloat(ID_ScaleRatio_B, ratio_B);
+            }
+
+            // Compute Ratio C
+            if (mat.HasProperty(ID_UnderlayOffsetX))
+            {
+                float underlayOffsetX = mat.GetFloat(ID_UnderlayOffsetX);
+                float underlayOffsetY = mat.GetFloat(ID_UnderlayOffsetY);
+                float underlayDilate = mat.GetFloat(ID_UnderlayDilate);
+                float underlaySoftness = mat.GetFloat(ID_UnderlaySoftness);
+
+                float range = (weight + faceDilate) * (scale - m_clamp);
+
+                t = Mathf.Max(1, Mathf.Max(Mathf.Abs(underlayOffsetX), Mathf.Abs(underlayOffsetY)) + underlayDilate + underlaySoftness);
+
+                ratio_C = isRatioEnabled ? Mathf.Max(0, scale - m_clamp - range) / (scale * t) : 1;
+                //float ratio_C_old = mat.GetFloat(ID_ScaleRatio_C);
+
+                // Only set the ratio if it has changed.
+                //if (ratio_C != ratio_C_old)
+                    mat.SetFloat(ID_ScaleRatio_C, ratio_C);
+            }
+        }
+
+
+
+        // Function to calculate padding required for Outline Width & Dilation for proper text alignment
+        public static Vector4 GetFontExtent(Material material)
+        {
+            // Revised implementation where style no longer affects alignment
+            return Vector4.zero;
+
+            /*
+            if (material == null || !material.HasProperty(ShaderUtilities.ID_GradientScale))
+                return Vector4.zero;   // We are using an non SDF Shader.
+            
+            float scaleRatioA = material.GetFloat(ID_ScaleRatio_A);
+            float faceDilate = material.GetFloat(ID_FaceDilate) * scaleRatioA;
+            float outlineThickness = material.GetFloat(ID_OutlineWidth) * scaleRatioA;
+
+            float extent = Mathf.Min(1, faceDilate + outlineThickness);
+            extent *= material.GetFloat(ID_GradientScale);
+
+            return new Vector4(extent, extent, extent, extent);
+            */
+        }
+
+
+        // Function to check if Masking is enabled
+        public static bool IsMaskingEnabled(Material material)
+        {
+            if (material == null || !material.HasProperty(ShaderUtilities.ID_ClipRect))
+                return false;
+
+            if (material.shaderKeywords.Contains(ShaderUtilities.Keyword_MASK_SOFT) || material.shaderKeywords.Contains(ShaderUtilities.Keyword_MASK_HARD) || material.shaderKeywords.Contains(ShaderUtilities.Keyword_MASK_TEX))
+                return true;
+
+            return false;
+        }
+
+
+        // Function to determine how much extra padding is required as a result of material properties like dilate, outline thickness, softness, glow, etc...
+        public static float GetPadding(Material material, bool enableExtraPadding, bool isBold)
+        {
+            //Debug.Log("GetPadding() called.");
+
+            if (isInitialized == false)
+                GetShaderPropertyIDs();
+
+            // Return if Material is null
+            if (material == null) return 0;
+
+            int extraPadding = enableExtraPadding ? 4 : 0;
+
+            // Check if we are using a non Distance Field Shader
+            if (material.HasProperty(ID_GradientScale) == false)
+            {
+                if (material.HasProperty(ID_Padding))
+                    extraPadding += (int)material.GetFloat(ID_Padding);
+
+                return extraPadding;
+            }
+
+            Vector4 padding = Vector4.zero;
+            Vector4 maxPadding = Vector4.zero;
+
+            //float weight = 0;
+            float faceDilate = 0;
+            float faceSoftness = 0;
+            float outlineThickness = 0;
+            float scaleRatio_A = 0;
+            float scaleRatio_B = 0;
+            float scaleRatio_C = 0;
+
+            float glowOffset = 0;
+            float glowOuter = 0;
+
+            float uniformPadding = 0;
+            // Iterate through each of the assigned materials to find the max values to set the padding.
+           
+            // Update Shader Ratios prior to computing padding
+            UpdateShaderRatios(material);
+
+            string[] shaderKeywords = material.shaderKeywords;
+
+            if (material.HasProperty(ID_ScaleRatio_A))
+                scaleRatio_A = material.GetFloat(ID_ScaleRatio_A);
+
+            //weight = 0; // Mathf.Max(material.GetFloat(ID_WeightNormal), material.GetFloat(ID_WeightBold)) / 2.0f * scaleRatio_A;
+
+            if (material.HasProperty(ID_FaceDilate))
+                faceDilate = material.GetFloat(ID_FaceDilate) * scaleRatio_A;
+
+            if (material.HasProperty(ID_OutlineSoftness))
+                faceSoftness = material.GetFloat(ID_OutlineSoftness) * scaleRatio_A;
+
+            if (material.HasProperty(ID_OutlineWidth))
+                outlineThickness = material.GetFloat(ID_OutlineWidth) * scaleRatio_A;
+
+            uniformPadding = outlineThickness + faceSoftness + faceDilate;
+
+            // Glow padding contribution
+            if (material.HasProperty(ID_GlowOffset) && shaderKeywords.Contains(Keyword_Glow)) // Generates GC
+            {
+                if (material.HasProperty(ID_ScaleRatio_B))
+                    scaleRatio_B = material.GetFloat(ID_ScaleRatio_B);
+
+                glowOffset = material.GetFloat(ID_GlowOffset) * scaleRatio_B;
+                glowOuter = material.GetFloat(ID_GlowOuter) * scaleRatio_B;
+            }
+
+            uniformPadding = Mathf.Max(uniformPadding, faceDilate + glowOffset + glowOuter);
+
+            // Underlay padding contribution
+            if (material.HasProperty(ID_UnderlaySoftness) && shaderKeywords.Contains(Keyword_Underlay)) // Generates GC
+            {
+                if (material.HasProperty(ID_ScaleRatio_C))
+                    scaleRatio_C = material.GetFloat(ID_ScaleRatio_C);
+
+                float offsetX = material.GetFloat(ID_UnderlayOffsetX) * scaleRatio_C;
+                float offsetY = material.GetFloat(ID_UnderlayOffsetY) * scaleRatio_C;
+                float dilate = material.GetFloat(ID_UnderlayDilate) * scaleRatio_C;
+                float softness = material.GetFloat(ID_UnderlaySoftness) * scaleRatio_C;
+
+                padding.x = Mathf.Max(padding.x, faceDilate + dilate + softness - offsetX);
+                padding.y = Mathf.Max(padding.y, faceDilate + dilate + softness - offsetY);
+                padding.z = Mathf.Max(padding.z, faceDilate + dilate + softness + offsetX);
+                padding.w = Mathf.Max(padding.w, faceDilate + dilate + softness + offsetY);
+            }
+
+            padding.x = Mathf.Max(padding.x, uniformPadding);
+            padding.y = Mathf.Max(padding.y, uniformPadding);
+            padding.z = Mathf.Max(padding.z, uniformPadding);
+            padding.w = Mathf.Max(padding.w, uniformPadding);
+
+            padding.x += extraPadding;
+            padding.y += extraPadding;
+            padding.z += extraPadding;
+            padding.w += extraPadding;
+
+            padding.x = Mathf.Min(padding.x, 1);
+            padding.y = Mathf.Min(padding.y, 1);
+            padding.z = Mathf.Min(padding.z, 1);
+            padding.w = Mathf.Min(padding.w, 1);
+
+            maxPadding.x = maxPadding.x < padding.x ? padding.x : maxPadding.x;
+            maxPadding.y = maxPadding.y < padding.y ? padding.y : maxPadding.y;
+            maxPadding.z = maxPadding.z < padding.z ? padding.z : maxPadding.z;
+            maxPadding.w = maxPadding.w < padding.w ? padding.w : maxPadding.w;
+
+            float gradientScale = material.GetFloat(ID_GradientScale);
+            padding *= gradientScale;
+
+            // Set UniformPadding to the maximum value of any of its components.
+            uniformPadding = Mathf.Max(padding.x, padding.y);
+            uniformPadding = Mathf.Max(padding.z, uniformPadding);
+            uniformPadding = Mathf.Max(padding.w, uniformPadding);
+
+            return uniformPadding + 1.25f;
+        }
+
+
+
+
+        // Function to determine how much extra padding is required as a result of material properties like dilate, outline thickness, softness, glow, etc...
+        public static float GetPadding(Material[] materials, bool enableExtraPadding, bool isBold)
+        {
+            //Debug.Log("GetPadding() called.");
+            
+            if (isInitialized == false)
+                GetShaderPropertyIDs();
+
+            // Return if Material is null
+            if (materials == null) return 0;
+            
+            int extraPadding = enableExtraPadding ? 4 : 0;
+
+            // Check if we are using a Bitmap Shader
+            if (materials[0].HasProperty(ID_Padding))
+                return extraPadding + materials[0].GetFloat(ID_Padding);
+
+            Vector4 padding = Vector4.zero;
+            Vector4 maxPadding = Vector4.zero;
+
+            float faceDilate = 0;
+            float faceSoftness = 0;
+            float outlineThickness = 0;
+            float scaleRatio_A = 0;
+            float scaleRatio_B = 0;
+            float scaleRatio_C = 0;
+
+            float glowOffset = 0;
+            float glowOuter = 0;
+
+            float uniformPadding = 0;
+            // Iterate through each of the assigned materials to find the max values to set the padding.
+            for (int i = 0; i < materials.Length; i++)
+            {
+                // Update Shader Ratios prior to computing padding
+                ShaderUtilities.UpdateShaderRatios(materials[i]);
+
+                string[] shaderKeywords = materials[i].shaderKeywords;
+
+                if (materials[i].HasProperty(ShaderUtilities.ID_ScaleRatio_A))
+                    scaleRatio_A = materials[i].GetFloat(ShaderUtilities.ID_ScaleRatio_A);
+
+                if (materials[i].HasProperty(ShaderUtilities.ID_FaceDilate))
+                    faceDilate = materials[i].GetFloat(ShaderUtilities.ID_FaceDilate) * scaleRatio_A;
+
+                if (materials[i].HasProperty(ShaderUtilities.ID_OutlineSoftness))
+                    faceSoftness = materials[i].GetFloat(ShaderUtilities.ID_OutlineSoftness) * scaleRatio_A;
+
+                if (materials[i].HasProperty(ShaderUtilities.ID_OutlineWidth))
+                    outlineThickness = materials[i].GetFloat(ShaderUtilities.ID_OutlineWidth) * scaleRatio_A;
+
+                uniformPadding = outlineThickness + faceSoftness + faceDilate;
+
+                // Glow padding contribution
+                if (materials[i].HasProperty(ShaderUtilities.ID_GlowOffset) && shaderKeywords.Contains(ShaderUtilities.Keyword_Glow))
+                {
+                    if (materials[i].HasProperty(ShaderUtilities.ID_ScaleRatio_B))
+                        scaleRatio_B = materials[i].GetFloat(ShaderUtilities.ID_ScaleRatio_B);
+
+                    glowOffset = materials[i].GetFloat(ShaderUtilities.ID_GlowOffset) * scaleRatio_B;
+                    glowOuter = materials[i].GetFloat(ShaderUtilities.ID_GlowOuter) * scaleRatio_B;
+                }
+
+                uniformPadding = Mathf.Max(uniformPadding, faceDilate + glowOffset + glowOuter);
+
+                // Underlay padding contribution
+                if (materials[i].HasProperty(ShaderUtilities.ID_UnderlaySoftness) && shaderKeywords.Contains(ShaderUtilities.Keyword_Underlay))
+                {
+                    if (materials[i].HasProperty(ShaderUtilities.ID_ScaleRatio_C))
+                        scaleRatio_C = materials[i].GetFloat(ShaderUtilities.ID_ScaleRatio_C);
+
+                    float offsetX = materials[i].GetFloat(ShaderUtilities.ID_UnderlayOffsetX) * scaleRatio_C;
+                    float offsetY = materials[i].GetFloat(ShaderUtilities.ID_UnderlayOffsetY) * scaleRatio_C;
+                    float dilate = materials[i].GetFloat(ShaderUtilities.ID_UnderlayDilate) * scaleRatio_C;
+                    float softness = materials[i].GetFloat(ShaderUtilities.ID_UnderlaySoftness) * scaleRatio_C;
+
+                    padding.x = Mathf.Max(padding.x, faceDilate + dilate + softness - offsetX);
+                    padding.y = Mathf.Max(padding.y, faceDilate + dilate + softness - offsetY);
+                    padding.z = Mathf.Max(padding.z, faceDilate + dilate + softness + offsetX);
+                    padding.w = Mathf.Max(padding.w, faceDilate + dilate + softness + offsetY);
+                }
+
+                padding.x = Mathf.Max(padding.x, uniformPadding);
+                padding.y = Mathf.Max(padding.y, uniformPadding);
+                padding.z = Mathf.Max(padding.z, uniformPadding);
+                padding.w = Mathf.Max(padding.w, uniformPadding);
+
+                padding.x += extraPadding;
+                padding.y += extraPadding;
+                padding.z += extraPadding;
+                padding.w += extraPadding;
+
+                padding.x = Mathf.Min(padding.x, 1);
+                padding.y = Mathf.Min(padding.y, 1);
+                padding.z = Mathf.Min(padding.z, 1);
+                padding.w = Mathf.Min(padding.w, 1);
+
+                maxPadding.x = maxPadding.x < padding.x ? padding.x : maxPadding.x;
+                maxPadding.y = maxPadding.y < padding.y ? padding.y : maxPadding.y;
+                maxPadding.z = maxPadding.z < padding.z ? padding.z : maxPadding.z;
+                maxPadding.w = maxPadding.w < padding.w ? padding.w : maxPadding.w;
+
+            }
+
+            float gradientScale = materials[0].GetFloat(ShaderUtilities.ID_GradientScale);
+            padding *= gradientScale;
+
+            // Set UniformPadding to the maximum value of any of its components.
+            uniformPadding = Mathf.Max(padding.x, padding.y);
+            uniformPadding = Mathf.Max(padding.z, uniformPadding);
+            uniformPadding = Mathf.Max(padding.w, uniformPadding);
+
+            return uniformPadding + 0.25f;
+        }
+
+
+    }
+
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a16b9630a97c16a2e9ed634bdac0b99a1075b577
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_ShaderUtilities.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: fea49a0730244a98bf1087f7ca9410a8
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0d118e997768c75befddec94ddc7585e49dfe9a0
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs
@@ -0,0 +1,31 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+
+    // Class which contains the Sprite Info for each sprite contained in the sprite asset.
+    [Serializable]
+    public class TMP_Sprite : TMP_TextElement_Legacy
+    {
+        //public int fileID;
+        //public int id;
+        public string name;
+        public int hashCode;
+        public int unicode;
+        //public float x;
+        //public float y;
+        //public float width;
+        //public float height;
+        public Vector2 pivot;
+        //public float xOffset; // Pivot X
+        //public float yOffset; // Pivot Y
+        //public float xAdvance;
+        //public float scale;
+
+        public Sprite sprite;
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c3a9106aef1d5508aac32c4adc8a1491d2a2199f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Sprite.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 968a09f153574430a6e15ae975145768
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs
new file mode 100644
index 0000000000000000000000000000000000000000..87703cfa9964c27a8d43ecbf7f6a9b71d6cf5b26
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs
@@ -0,0 +1,149 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace TMPro
+{
+    [DisallowMultipleComponent]
+    public class TMP_SpriteAnimator : MonoBehaviour
+    {
+        private Dictionary<int, bool> m_animations = new Dictionary<int, bool>(16);
+        //private bool isPlaying = false;
+
+        private TMP_Text m_TextComponent;
+
+
+        void Awake()
+        {
+            m_TextComponent = GetComponent<TMP_Text>();
+        }
+
+
+
+
+        void OnEnable()
+        {
+            //m_playAnimations = true;
+        }
+
+
+        void OnDisable()
+        {
+            //m_playAnimations = false;
+        }
+
+
+        public void StopAllAnimations()
+        {
+            StopAllCoroutines();
+            m_animations.Clear();
+        }
+
+
+
+        public void DoSpriteAnimation(int currentCharacter, TMP_SpriteAsset spriteAsset, int start, int end, int framerate)
+        {
+            bool isPlaying;
+
+            // Need to add tracking of coroutines that have been lunched for this text object.
+            if (!m_animations.TryGetValue(currentCharacter, out isPlaying))
+            {
+                StartCoroutine(DoSpriteAnimationInternal(currentCharacter, spriteAsset, start, end, framerate));
+                m_animations.Add(currentCharacter, true);
+            }
+        }
+
+
+        IEnumerator DoSpriteAnimationInternal(int currentCharacter, TMP_SpriteAsset spriteAsset, int start, int end, int framerate)
+        {
+            if (m_TextComponent == null) yield break;
+
+            // We yield otherwise this gets called before the sprite has rendered.
+            yield return null;
+
+            int currentFrame = start;
+
+            // Make sure end frame does not exceed the number of sprites in the sprite asset.
+            if (end > spriteAsset.spriteCharacterTable.Count)
+                end = spriteAsset.spriteCharacterTable.Count - 1;
+
+            // Get a reference to the geometry of the current character.
+            TMP_CharacterInfo charInfo = m_TextComponent.textInfo.characterInfo[currentCharacter];
+
+            int materialIndex = charInfo.materialReferenceIndex;
+            int vertexIndex = charInfo.vertexIndex;
+
+            TMP_MeshInfo meshInfo = m_TextComponent.textInfo.meshInfo[materialIndex];
+
+            float elapsedTime = 0;
+            float targetTime = 1f / Mathf.Abs(framerate);
+
+            while (true)
+            {
+                if (elapsedTime > targetTime)
+                {
+                    elapsedTime = 0;
+
+                    // Get a reference to the current sprite
+                    TMP_SpriteCharacter spriteCharacter = spriteAsset.spriteCharacterTable[currentFrame];
+
+                    // Update the vertices for the new sprite
+                    Vector3[] vertices = meshInfo.vertices;
+
+                    Vector2 origin = new Vector2(charInfo.origin, charInfo.baseLine);
+                    float spriteScale = charInfo.fontAsset.faceInfo.ascentLine / spriteCharacter.glyph.metrics.height * spriteCharacter.scale * charInfo.scale;
+
+                    Vector3 bl = new Vector3(origin.x + spriteCharacter.glyph.metrics.horizontalBearingX * spriteScale, origin.y + (spriteCharacter.glyph.metrics.horizontalBearingY - spriteCharacter.glyph.metrics.height) * spriteScale);
+                    Vector3 tl = new Vector3(bl.x, origin.y + spriteCharacter.glyph.metrics.horizontalBearingY * spriteScale);
+                    Vector3 tr = new Vector3(origin.x + (spriteCharacter.glyph.metrics.horizontalBearingX + spriteCharacter.glyph.metrics.width) * spriteScale, tl.y);
+                    Vector3 br = new Vector3(tr.x, bl.y);
+
+                    vertices[vertexIndex + 0] = bl;
+                    vertices[vertexIndex + 1] = tl;
+                    vertices[vertexIndex + 2] = tr;
+                    vertices[vertexIndex + 3] = br;
+
+                    // Update the UV to point to the new sprite
+                    Vector2[] uvs0 = meshInfo.uvs0;
+
+                    Vector2 uv0 = new Vector2((float)spriteCharacter.glyph.glyphRect.x / spriteAsset.spriteSheet.width, (float)spriteCharacter.glyph.glyphRect.y / spriteAsset.spriteSheet.height);
+                    Vector2 uv1 = new Vector2(uv0.x, (float)(spriteCharacter.glyph.glyphRect.y + spriteCharacter.glyph.glyphRect.height) / spriteAsset.spriteSheet.height);
+                    Vector2 uv2 = new Vector2((float)(spriteCharacter.glyph.glyphRect.x + spriteCharacter.glyph.glyphRect.width) / spriteAsset.spriteSheet.width, uv1.y);
+                    Vector2 uv3 = new Vector2(uv2.x, uv0.y);
+
+                    uvs0[vertexIndex + 0] = uv0;
+                    uvs0[vertexIndex + 1] = uv1;
+                    uvs0[vertexIndex + 2] = uv2;
+                    uvs0[vertexIndex + 3] = uv3;
+
+                    // Update the modified vertex attributes
+                    meshInfo.mesh.vertices = vertices;
+                    meshInfo.mesh.uv = uvs0;
+                    m_TextComponent.UpdateGeometry(meshInfo.mesh, materialIndex);
+
+
+                    if (framerate > 0)
+                    {
+                        if (currentFrame < end)
+                            currentFrame += 1;
+                        else
+                            currentFrame = start;
+                    }
+                    else
+                    {
+                        if (currentFrame > start)
+                            currentFrame -= 1;
+                        else
+                            currentFrame = end;
+                    }
+                }
+
+                elapsedTime += Time.deltaTime;
+
+                yield return null;
+            }
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e3cbbb484a2b9c78b3569637940c1efb83253b45
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAnimator.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6366ee97f6b541449155028b9487355a
+timeCreated: 1471590333
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7af0bdb1d726e3ee308146bd033a78dda61d10e9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs
@@ -0,0 +1,508 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using System.Collections.Generic;
+using System.Linq;
+
+
+namespace TMPro
+{
+
+    public class TMP_SpriteAsset : TMP_Asset
+    {
+        internal Dictionary<uint, int> m_UnicodeLookup;
+        internal Dictionary<int, int> m_NameLookup;
+        internal Dictionary<uint, int> m_GlyphIndexLookup;
+
+        /// <summary>
+        /// The version of the sprite asset class.
+        /// Version 1.1.0 updates the asset data structure to be compatible with new font asset structure.
+        /// </summary>
+        public string version
+        {
+            get { return m_Version; }
+            internal set { m_Version = value; }
+        }
+        [SerializeField]
+        private string m_Version;
+
+        // The texture which contains the sprites.
+        public Texture spriteSheet;
+
+        public List<TMP_SpriteCharacter> spriteCharacterTable
+        {
+            get
+            {
+                if (m_GlyphIndexLookup == null)
+                    UpdateLookupTables();
+
+                return m_SpriteCharacterTable;
+            }
+            internal set { m_SpriteCharacterTable = value; }
+        }
+        [SerializeField]
+        private List<TMP_SpriteCharacter> m_SpriteCharacterTable = new List<TMP_SpriteCharacter>();
+
+
+        public List<TMP_SpriteGlyph> spriteGlyphTable
+        {
+            get { return m_SpriteGlyphTable; }
+            internal set { m_SpriteGlyphTable = value; }
+        }
+        [SerializeField]
+        private List<TMP_SpriteGlyph> m_SpriteGlyphTable = new List<TMP_SpriteGlyph>();
+
+        // List which contains the SpriteInfo for the sprites contained in the sprite sheet.
+        public List<TMP_Sprite> spriteInfoList;
+
+        /// <summary>
+        /// Dictionary used to lookup the index of a given sprite based on a Unicode value.
+        /// </summary>
+        //private Dictionary<int, int> m_SpriteUnicodeLookup;
+
+
+        /// <summary>
+        /// List which contains the Fallback font assets for this font.
+        /// </summary>
+        [SerializeField]
+        public List<TMP_SpriteAsset> fallbackSpriteAssets;
+
+        internal bool m_IsSpriteAssetLookupTablesDirty = false;
+
+        void Awake()
+        {
+            // Check version number of sprite asset to see if it needs to be upgraded.
+            if (this.material != null && string.IsNullOrEmpty(m_Version))
+                UpgradeSpriteAsset();
+        }
+
+
+        #if UNITY_EDITOR
+        /// <summary>
+        /// 
+        /// </summary>
+        void OnValidate()
+        {
+            //Debug.Log("Sprite Asset [" + name + "] has changed.");
+
+            //UpdateLookupTables();
+
+            //TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, this);
+        }
+        #endif
+
+
+        /// <summary>
+        /// Create a material for the sprite asset.
+        /// </summary>
+        /// <returns></returns>
+        Material GetDefaultSpriteMaterial()
+        {
+            //isEditingAsset = true;
+            ShaderUtilities.GetShaderPropertyIDs();
+
+            // Add a new material
+            Shader shader = Shader.Find("TextMeshPro/Sprite");
+            Material tempMaterial = new Material(shader);
+            tempMaterial.SetTexture(ShaderUtilities.ID_MainTex, spriteSheet);
+            tempMaterial.hideFlags = HideFlags.HideInHierarchy;
+
+            #if UNITY_EDITOR
+            UnityEditor.AssetDatabase.AddObjectToAsset(tempMaterial, this);
+            UnityEditor.AssetDatabase.ImportAsset(UnityEditor.AssetDatabase.GetAssetPath(this));
+            #endif
+            //isEditingAsset = false;
+
+            return tempMaterial;
+        }
+
+
+        /// <summary>
+        /// Function to update the sprite name and unicode lookup tables.
+        /// This function should be called when a sprite's name or unicode value changes or when a new sprite is added.
+        /// </summary>
+        public void UpdateLookupTables()
+        {
+            //Debug.Log("Updating [" + this.name + "] Lookup tables.");
+
+            // Check version number of sprite asset to see if it needs to be upgraded.
+            if (this.material != null && string.IsNullOrEmpty(m_Version))
+                UpgradeSpriteAsset();
+
+            // Initialize / Clear glyph index lookup dictionary.
+            if (m_GlyphIndexLookup == null)
+                m_GlyphIndexLookup = new Dictionary<uint, int>();
+            else
+                m_GlyphIndexLookup.Clear();
+
+            for (int i = 0; i < m_SpriteGlyphTable.Count; i++)
+            {
+                uint glyphIndex = m_SpriteGlyphTable[i].index;
+
+                if (m_GlyphIndexLookup.ContainsKey(glyphIndex) == false)
+                    m_GlyphIndexLookup.Add(glyphIndex, i);
+            }
+
+            if (m_NameLookup == null)
+                m_NameLookup = new Dictionary<int, int>();
+            else
+                m_NameLookup.Clear();
+
+            if (m_UnicodeLookup == null)
+                m_UnicodeLookup = new Dictionary<uint, int>();
+            else
+                m_UnicodeLookup.Clear();
+
+            for (int i = 0; i < m_SpriteCharacterTable.Count; i++)
+            {
+                int nameHashCode = m_SpriteCharacterTable[i].hashCode;
+
+                if (m_NameLookup.ContainsKey(nameHashCode) == false)
+                    m_NameLookup.Add(nameHashCode, i);
+
+                uint unicode = m_SpriteCharacterTable[i].unicode;
+
+                if (m_UnicodeLookup.ContainsKey(unicode) == false)
+                    m_UnicodeLookup.Add(unicode, i);
+
+                // Update glyph reference which is not serialized
+                uint glyphIndex = m_SpriteCharacterTable[i].glyphIndex;
+                int index;
+
+                if (m_GlyphIndexLookup.TryGetValue(glyphIndex, out index))
+                    m_SpriteCharacterTable[i].glyph = m_SpriteGlyphTable[index];
+            }
+
+            m_IsSpriteAssetLookupTablesDirty = false;
+        }
+
+
+        /// <summary>
+        /// Function which returns the sprite index using the hashcode of the name
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <returns></returns>
+        public int GetSpriteIndexFromHashcode(int hashCode)
+        {
+            if (m_NameLookup == null)
+                UpdateLookupTables();
+
+            int index;
+
+            if (m_NameLookup.TryGetValue(hashCode, out index))
+                return index;
+
+            return -1;
+        }
+
+
+        /// <summary>
+        /// Returns the index of the sprite for the given unicode value.
+        /// </summary>
+        /// <param name="unicode"></param>
+        /// <returns></returns>
+        public int GetSpriteIndexFromUnicode (uint unicode)
+        {
+            if (m_UnicodeLookup == null)
+                UpdateLookupTables();
+
+            int index;
+
+            if (m_UnicodeLookup.TryGetValue(unicode, out index))
+                return index;
+
+            return -1;
+        }
+
+
+        /// <summary>
+        /// Returns the index of the sprite for the given name.
+        /// </summary>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        public int GetSpriteIndexFromName (string name)
+        {
+            if (m_NameLookup == null)
+                UpdateLookupTables();
+
+            int hashCode = TMP_TextUtilities.GetSimpleHashCode(name);
+
+            return GetSpriteIndexFromHashcode(hashCode);
+        }
+
+
+        /// <summary>
+        /// Used to keep track of which Sprite Assets have been searched.
+        /// </summary>
+        private static List<int> k_searchedSpriteAssets;
+
+        /// <summary>
+        /// Search through the given sprite asset and its fallbacks for the specified sprite matching the given unicode character.
+        /// </summary>
+        /// <param name="spriteAsset">The font asset to search for the given character.</param>
+        /// <param name="unicode">The character to find.</param>
+        /// <param name="glyph">out parameter containing the glyph for the specified character (if found).</param>
+        /// <returns></returns>
+        public static TMP_SpriteAsset SearchForSpriteByUnicode(TMP_SpriteAsset spriteAsset, uint unicode, bool includeFallbacks, out int spriteIndex)
+        {
+            // Check to make sure sprite asset is not null
+            if (spriteAsset == null) { spriteIndex = -1; return null; }
+
+            // Get sprite index for the given unicode
+            spriteIndex = spriteAsset.GetSpriteIndexFromUnicode(unicode);
+            if (spriteIndex != -1)
+                return spriteAsset;
+
+            // Initialize list to track instance of Sprite Assets that have already been searched.
+            if (k_searchedSpriteAssets == null)
+                k_searchedSpriteAssets = new List<int>();
+
+            k_searchedSpriteAssets.Clear();
+
+            // Get instance ID of sprite asset and add to list.
+            int id = spriteAsset.GetInstanceID();
+            k_searchedSpriteAssets.Add(id);
+
+            // Search potential fallback sprite assets if includeFallbacks is true.
+            if (includeFallbacks && spriteAsset.fallbackSpriteAssets != null && spriteAsset.fallbackSpriteAssets.Count > 0)
+                return SearchForSpriteByUnicodeInternal(spriteAsset.fallbackSpriteAssets, unicode, includeFallbacks, out spriteIndex);
+
+            // Search default sprite asset potentially assigned in the TMP Settings.
+            if (includeFallbacks && TMP_Settings.defaultSpriteAsset != null)
+                return SearchForSpriteByUnicodeInternal(TMP_Settings.defaultSpriteAsset, unicode, includeFallbacks, out spriteIndex);
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        /// Search through the given list of sprite assets and fallbacks for a sprite whose unicode value matches the target unicode.
+        /// </summary>
+        /// <param name="spriteAssets"></param>
+        /// <param name="unicode"></param>
+        /// <param name="includeFallbacks"></param>
+        /// <param name="spriteIndex"></param>
+        /// <returns></returns>
+        private static TMP_SpriteAsset SearchForSpriteByUnicodeInternal(List<TMP_SpriteAsset> spriteAssets, uint unicode, bool includeFallbacks, out int spriteIndex)
+        {
+            for (int i = 0; i < spriteAssets.Count; i++)
+            {
+                TMP_SpriteAsset temp = spriteAssets[i];
+                if (temp == null) continue;
+
+                int id = temp.GetInstanceID();
+
+                // Skip over the fallback sprite asset if it has already been searched.
+                if (k_searchedSpriteAssets.Contains(id)) continue;
+
+                // Add to list of font assets already searched.
+                k_searchedSpriteAssets.Add(id);
+
+                temp = SearchForSpriteByUnicodeInternal(temp, unicode, includeFallbacks, out spriteIndex);
+
+                if (temp != null)
+                    return temp;
+            }
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        /// Search the given sprite asset and fallbacks for a sprite whose unicode value matches the target unicode.
+        /// </summary>
+        /// <param name="spriteAsset"></param>
+        /// <param name="unicode"></param>
+        /// <param name="includeFallbacks"></param>
+        /// <param name="spriteIndex"></param>
+        /// <returns></returns>
+        private static TMP_SpriteAsset SearchForSpriteByUnicodeInternal(TMP_SpriteAsset spriteAsset, uint unicode, bool includeFallbacks, out int spriteIndex)
+        {
+            // Get sprite index for the given unicode
+            spriteIndex = spriteAsset.GetSpriteIndexFromUnicode(unicode);
+            if (spriteIndex != -1)
+                return spriteAsset;
+
+            if (includeFallbacks && spriteAsset.fallbackSpriteAssets != null && spriteAsset.fallbackSpriteAssets.Count > 0)
+                return SearchForSpriteByUnicodeInternal(spriteAsset.fallbackSpriteAssets, unicode, includeFallbacks, out spriteIndex);
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        /// Search the given sprite asset and fallbacks for a sprite whose hash code value of its name matches the target hash code.
+        /// </summary>
+        /// <param name="spriteAsset">The Sprite Asset to search for the given sprite whose name matches the hashcode value</param>
+        /// <param name="hashCode">The hash code value matching the name of the sprite</param>
+        /// <param name="includeFallbacks">Include fallback sprite assets in the search</param>
+        /// <param name="spriteIndex">The index of the sprite matching the provided hash code</param>
+        /// <returns>The Sprite Asset that contains the sprite</returns>
+        public static TMP_SpriteAsset SearchForSpriteByHashCode(TMP_SpriteAsset spriteAsset, int hashCode, bool includeFallbacks, out int spriteIndex)
+        {
+            // Make sure sprite asset is not null
+            if (spriteAsset == null) { spriteIndex = -1; return null; }
+
+            spriteIndex = spriteAsset.GetSpriteIndexFromHashcode(hashCode);
+            if (spriteIndex != -1)
+                return spriteAsset;
+
+            // Initialize list to track instance of Sprite Assets that have already been searched.
+            if (k_searchedSpriteAssets == null)
+                k_searchedSpriteAssets = new List<int>();
+
+            k_searchedSpriteAssets.Clear();
+
+            int id = spriteAsset.GetInstanceID();
+            // Add to list of font assets already searched.
+            k_searchedSpriteAssets.Add(id);
+
+            if (includeFallbacks && spriteAsset.fallbackSpriteAssets != null && spriteAsset.fallbackSpriteAssets.Count > 0)
+                return SearchForSpriteByHashCodeInternal(spriteAsset.fallbackSpriteAssets, hashCode, includeFallbacks, out spriteIndex);
+
+            // Search default sprite asset potentially assigned in the TMP Settings.
+            if (includeFallbacks && TMP_Settings.defaultSpriteAsset != null)
+                return SearchForSpriteByHashCodeInternal(TMP_Settings.defaultSpriteAsset, hashCode, includeFallbacks, out spriteIndex);
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        ///  Search through the given list of sprite assets and fallbacks for a sprite whose hash code value of its name matches the target hash code.
+        /// </summary>
+        /// <param name="spriteAssets"></param>
+        /// <param name="hashCode"></param>
+        /// <param name="searchFallbacks"></param>
+        /// <param name="spriteIndex"></param>
+        /// <returns></returns>
+        private static TMP_SpriteAsset SearchForSpriteByHashCodeInternal(List<TMP_SpriteAsset> spriteAssets, int hashCode, bool searchFallbacks, out int spriteIndex)
+        {
+            // Search through the list of sprite assets
+            for (int i = 0; i < spriteAssets.Count; i++)
+            {
+                TMP_SpriteAsset temp = spriteAssets[i];
+                if (temp == null) continue;
+
+                int id = temp.GetInstanceID();
+
+                // Skip over the fallback sprite asset if it has already been searched.
+                if (k_searchedSpriteAssets.Contains(id)) continue;
+
+                // Add to list of font assets already searched.
+                k_searchedSpriteAssets.Add(id);
+
+                temp = SearchForSpriteByHashCodeInternal(temp, hashCode, searchFallbacks, out spriteIndex);
+
+                if (temp != null)
+                    return temp;
+            }
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        /// Search through the given sprite asset and fallbacks for a sprite whose hash code value of its name matches the target hash code.
+        /// </summary>
+        /// <param name="spriteAsset"></param>
+        /// <param name="hashCode"></param>
+        /// <param name="searchFallbacks"></param>
+        /// <param name="spriteIndex"></param>
+        /// <returns></returns>
+        private static TMP_SpriteAsset SearchForSpriteByHashCodeInternal(TMP_SpriteAsset spriteAsset, int hashCode, bool searchFallbacks, out int spriteIndex)
+        {
+            // Get the sprite for the given hash code.
+            spriteIndex = spriteAsset.GetSpriteIndexFromHashcode(hashCode);
+            if (spriteIndex != -1)
+                return spriteAsset;
+
+            if (searchFallbacks && spriteAsset.fallbackSpriteAssets != null && spriteAsset.fallbackSpriteAssets.Count > 0)
+                return SearchForSpriteByHashCodeInternal(spriteAsset.fallbackSpriteAssets, hashCode, searchFallbacks, out spriteIndex);
+
+            spriteIndex = -1;
+            return null;
+        }
+
+
+        /// <summary>
+        /// Sort the sprite glyph table by glyph index.
+        /// </summary>
+        public void SortGlyphTable()
+        {
+            if (m_SpriteGlyphTable == null || m_SpriteGlyphTable.Count == 0) return;
+
+            m_SpriteGlyphTable = m_SpriteGlyphTable.OrderBy(item => item.index).ToList();
+        }
+
+        /// <summary>
+        /// Sort the sprite character table by Unicode values.
+        /// </summary>
+        internal void SortCharacterTable()
+        {
+            if (m_SpriteCharacterTable != null && m_SpriteCharacterTable.Count > 0)
+                m_SpriteCharacterTable = m_SpriteCharacterTable.OrderBy(c => c.unicode).ToList();
+        }
+
+        /// <summary>
+        /// Sort both sprite glyph and character tables.
+        /// </summary>
+        internal void SortGlyphAndCharacterTables()
+        {
+            SortGlyphTable();
+            SortCharacterTable();
+        }
+
+
+        /// <summary>
+        /// Internal method used to upgrade sprite asset.
+        /// </summary>
+        private void UpgradeSpriteAsset()
+        {
+            m_Version = "1.1.0";
+
+            Debug.Log("Upgrading sprite asset [" + this.name + "] to version " + m_Version + ".", this);
+
+            // Convert legacy glyph and character tables to new format
+            m_SpriteCharacterTable.Clear();
+            m_SpriteGlyphTable.Clear();
+
+            for (int i = 0; i < spriteInfoList.Count; i++)
+            {
+                TMP_Sprite oldSprite = spriteInfoList[i];
+
+                TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph();
+                spriteGlyph.index = (uint)i; 
+                spriteGlyph.sprite = oldSprite.sprite;
+                spriteGlyph.metrics = new GlyphMetrics(oldSprite.width, oldSprite.height, oldSprite.xOffset, oldSprite.yOffset, oldSprite.xAdvance);
+                spriteGlyph.glyphRect = new GlyphRect((int)oldSprite.x, (int)oldSprite.y, (int)oldSprite.width, (int)oldSprite.height);
+
+                spriteGlyph.scale = 1.0f;
+                spriteGlyph.atlasIndex = 0;
+
+                m_SpriteGlyphTable.Add(spriteGlyph);
+
+                TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter((uint)oldSprite.unicode, spriteGlyph);
+                spriteCharacter.name = oldSprite.name;
+                spriteCharacter.scale = oldSprite.scale;
+
+                m_SpriteCharacterTable.Add(spriteCharacter);
+            }
+
+            // Clear legacy glyph info list.
+            //spriteInfoList.Clear();
+
+            UpdateLookupTables();
+
+            #if UNITY_EDITOR
+            UnityEditor.EditorUtility.SetDirty(this);
+            UnityEditor.AssetDatabase.SaveAssets();
+            #endif
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4f9abe140529a645ca4e6bd9cb93f630151483ca
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAsset.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 84a92b25f83d49b9bc132d206b370281
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: ec7c645d93308c04d8840982af12101e, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3968f9a319069e5650ccc36188364038558a0936
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs
@@ -0,0 +1,61 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro.SpriteAssetUtilities
+{
+    public enum SpriteAssetImportFormats { None = 0, TexturePacker = 0x1 };
+
+    public class TexturePacker
+    {
+        [System.Serializable]
+        public struct SpriteFrame
+        {
+            public float x;
+            public float y;
+            public float w;
+            public float h;
+
+            public override string ToString()
+            {
+                string s = "x: " + x.ToString("f2") + " y: " + y.ToString("f2") + " h: " + h.ToString("f2") + " w: " + w.ToString("f2");
+                return s;
+            }
+        }
+
+        [System.Serializable]
+        public struct SpriteSize
+        {
+            public float w;
+            public float h;
+
+            public override string ToString()
+            {
+                string s = "w: " + w.ToString("f2") + " h: " + h.ToString("f2");
+                return s;
+            }
+        }
+
+        [System.Serializable]
+        public struct SpriteData
+        {
+            public string filename;
+            public SpriteFrame frame;
+            public bool rotated;
+            public bool trimmed;
+            public SpriteFrame spriteSourceSize;
+            public SpriteSize sourceSize;
+            public Vector2 pivot;
+
+        }
+
+        [System.Serializable]
+        public class SpriteDataObject
+        {
+            public List<SpriteData> frames;
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..5e066415cef30b1e1941509474cd965e98362c07
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteAssetImportFormats.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e4e0b1de1aee400d81ed4273141e7823
+timeCreated: 1480042510
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fa9169083996f3ea9ac4a0180b781e10b36d1736
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs
@@ -0,0 +1,74 @@
+using System;
+using UnityEngine;
+
+namespace TMPro
+{
+    /// <summary>
+    /// A basic element of text representing a pictograph, image, sprite or emoji.
+    /// </summary>
+    [Serializable]
+    public class TMP_SpriteCharacter : TMP_TextElement
+    {
+        /// <summary>
+        /// The name of the sprite element.
+        /// </summary>
+        public string name
+        {
+            get { return m_Name; }
+            set
+            {
+                if (value == m_Name)
+                    return;
+
+                m_Name = value;
+                m_HashCode = TMP_TextParsingUtilities.GetHashCodeCaseSensitive(m_Name);
+            }
+        }
+
+        /// <summary>
+        /// The hashcode value which is computed from the name of the sprite element.
+        /// This value is read-only and updated when the name of the text sprite is changed.
+        /// </summary>
+        public int hashCode { get { return m_HashCode; } }
+
+
+        // =============================================
+        // Private backing fields for public properties.
+        // =============================================
+
+        [SerializeField]
+        private string m_Name;
+
+        [SerializeField]
+        private int m_HashCode;
+
+
+        // ********************
+        // CONSTRUCTORS
+        // ********************
+
+        /// <summary>
+        /// Default constructor.
+        /// </summary>
+        public TMP_SpriteCharacter()
+        {
+            m_ElementType = TextElementType.Sprite;
+        }
+
+        /// <summary>
+        /// Constructor for new sprite character.
+        /// </summary>
+        /// <param name="unicode">Unicode value of the sprite character.</param>
+        /// <param name="glyph">Glyph used by the sprite character.</param>
+        public TMP_SpriteCharacter(uint unicode, TMP_SpriteGlyph glyph)
+        {
+            m_ElementType = TextElementType.Sprite;
+
+            this.unicode = unicode;
+            this.glyphIndex = glyph.index;
+            this.glyph = glyph;
+            this.scale = 1.0f;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..2b7c8d6668bebc96a4cfb300d406e6e744abf476
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteCharacter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 202d758d102b6854a9710c8b93db742c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs
new file mode 100644
index 0000000000000000000000000000000000000000..589843ab10e8faa3d0b7b99d945cb0ae8a1166b6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs
@@ -0,0 +1,61 @@
+using System;
+using UnityEngine;
+using UnityEngine.TextCore;
+
+namespace TMPro
+{
+    /// <summary>
+    /// The visual representation of the sprite character using this glyph.
+    /// </summary>
+    [Serializable]
+    public class TMP_SpriteGlyph : Glyph
+    {
+        /// <summary>
+        /// An optional reference to the underlying sprite used to create this glyph. 
+        /// </summary>
+        public Sprite sprite;
+
+
+        // ********************
+        // CONSTRUCTORS
+        // ********************
+
+        public TMP_SpriteGlyph() { }
+
+        /// <summary>
+        /// Constructor for new sprite glyph.
+        /// </summary>
+        /// <param name="index">Index of the sprite glyph.</param>
+        /// <param name="metrics">Metrics which define the position of the glyph in the context of text layout.</param>
+        /// <param name="glyphRect">GlyphRect which defines the coordinates of the glyph in the atlas texture.</param>
+        /// <param name="scale">Scale of the glyph.</param>
+        /// <param name="atlasIndex">Index of the atlas texture that contains the glyph.</param>      
+        public TMP_SpriteGlyph(uint index, GlyphMetrics metrics, GlyphRect glyphRect, float scale, int atlasIndex)
+        {
+            this.index = index;
+            this.metrics = metrics;
+            this.glyphRect = glyphRect;
+            this.scale = scale;
+            this.atlasIndex = atlasIndex;
+        }
+
+        /// <summary>
+        /// Constructor for new sprite glyph.
+        /// </summary>
+        /// <param name="index">>Index of the sprite glyph.</param>
+        /// <param name="metrics">Metrics which define the position of the glyph in the context of text layout.</param>
+        /// <param name="glyphRect">GlyphRect which defines the coordinates of the glyph in the atlas texture.</param>
+        /// <param name="scale">Scale of the glyph.</param>
+        /// <param name="atlasIndex">Index of the atlas texture that contains the glyph.</param>
+        /// <param name="sprite">A reference to the Unity Sprite representing this sprite glyph.</param>
+        public TMP_SpriteGlyph(uint index, GlyphMetrics metrics, GlyphRect glyphRect, float scale, int atlasIndex, Sprite sprite)
+        {
+            this.index = index;
+            this.metrics = metrics;
+            this.glyphRect = glyphRect;
+            this.scale = scale;
+            this.atlasIndex = atlasIndex;
+            this.sprite = sprite;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..386ebb54bea83d8f8c22c17f9d3f538d0d11438b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SpriteGlyph.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5b5c6a576605b3c4aab7d27193785f27
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7ce5a0739f1d6fcdf9f3ec67b928395dc5af54c8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs
@@ -0,0 +1,95 @@
+using UnityEngine;
+using System.Collections;
+
+#pragma warning disable 0649 // Disabled warnings.
+
+namespace TMPro
+{
+    
+    [System.Serializable]
+    public class TMP_Style
+    {
+        // PUBLIC PROPERTIES
+
+        /// <summary>
+        /// The name identifying this style. ex. <style="name">.
+        /// </summary>
+        public string name
+        { get { return m_Name; } set { if (value != m_Name) m_Name = value; } }
+       
+        /// <summary>
+        /// The hash code corresponding to the name of this style.
+        /// </summary>
+        public int hashCode
+        { get { return m_HashCode; } set { if (value != m_HashCode) m_HashCode = value; } }
+
+        /// <summary>
+        /// The initial definition of the style. ex. <b> <u>.
+        /// </summary>
+        public string styleOpeningDefinition
+        { get { return m_OpeningDefinition; } }
+
+        /// <summary>
+        /// The closing definition of the style. ex. </b> </u>.
+        /// </summary>
+        public string styleClosingDefinition
+        { get { return m_ClosingDefinition; } }
+
+
+        public int[] styleOpeningTagArray
+        { get { return m_OpeningTagArray; } }
+
+
+        public int[] styleClosingTagArray
+        { get { return m_ClosingTagArray; } }
+
+       
+        // PRIVATE FIELDS
+        [SerializeField]
+        private string m_Name;
+
+        [SerializeField]
+        private int m_HashCode;
+
+        [SerializeField]
+        private string m_OpeningDefinition;
+
+        [SerializeField]
+        private string m_ClosingDefinition;
+
+        [SerializeField]
+        private int[] m_OpeningTagArray;
+
+        [SerializeField]
+        private int[] m_ClosingTagArray;
+
+
+        //public TMP_Style()
+        //{
+            //Debug.Log("New Style with Name: " + m_Name + " was created. ID: ");
+        //}
+
+
+        /// <summary>
+        /// Function to update the content of the int[] resulting from changes to OpeningDefinition & ClosingDefinition.
+        /// </summary>
+        public void RefreshStyle()
+        {
+            m_HashCode = TMP_TextUtilities.GetSimpleHashCode(m_Name);
+            
+            m_OpeningTagArray = new int[m_OpeningDefinition.Length];
+            for (int i = 0; i < m_OpeningDefinition.Length; i++)       
+                m_OpeningTagArray[i] = m_OpeningDefinition[i];
+
+            m_ClosingTagArray = new int[m_ClosingDefinition.Length];
+            for (int i = 0; i < m_ClosingDefinition.Length; i++)
+                m_ClosingTagArray[i] = m_ClosingDefinition[i];
+
+#if UNITY_EDITOR
+            // Event to update objects when styles are changed in the editor.
+            TMPro_EventManager.ON_TEXT_STYLE_PROPERTY_CHANGED(true);
+#endif
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c025a95bfd3a26766d6fc4cfff845d12ae62dc5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Style.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 30bed781e402439ab8ce4e3357708115
+timeCreated: 1432681409
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e9040308219ab10be6c32a49b3f11e8d933997b6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs
@@ -0,0 +1,133 @@
+using UnityEngine;
+using System;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+
+    [Serializable]
+    public class TMP_StyleSheet : ScriptableObject
+    {
+        private static TMP_StyleSheet s_Instance;
+
+        [SerializeField]
+        private List<TMP_Style> m_StyleList = new List<TMP_Style>(1);
+        private Dictionary<int, TMP_Style> m_StyleDictionary = new Dictionary<int, TMP_Style>();
+
+
+        /// <summary>
+        /// Get a singleton instance of the TMP_StyleSheet
+        /// </summary>
+        public static TMP_StyleSheet instance
+        {
+            get
+            {
+                if (s_Instance == null)
+                {
+                    s_Instance = TMP_Settings.defaultStyleSheet;
+
+                    if (s_Instance == null)
+                        s_Instance = Resources.Load<TMP_StyleSheet>("Style Sheets/Default Style Sheet");
+
+                    if (s_Instance == null) return null;
+
+                    // Load the style dictionary.
+                    s_Instance.LoadStyleDictionaryInternal();
+                }
+
+                return s_Instance;
+            }
+        }
+
+
+        /// <summary>
+        /// Static Function to load the Default Style Sheet.
+        /// </summary>
+        /// <returns></returns>
+        public static TMP_StyleSheet LoadDefaultStyleSheet()
+        {
+            return instance;
+        }
+
+
+        /// <summary>
+        /// Function to retrieve the Style matching the HashCode.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <returns></returns>
+        public static TMP_Style GetStyle(int hashCode)
+        {
+            return instance.GetStyleInternal(hashCode);
+        }
+
+
+        /// <summary>
+        /// Internal method to retrieve the Style matching the Hashcode.
+        /// </summary>
+        /// <param name="hashCode"></param>
+        /// <returns></returns>
+        private TMP_Style GetStyleInternal(int hashCode)
+        {
+            TMP_Style style;
+
+            if (m_StyleDictionary.TryGetValue(hashCode, out style))
+            {
+                return style;
+            }
+
+            return null;
+        }
+
+
+        public void UpdateStyleDictionaryKey(int old_key, int new_key)
+        {
+            if (m_StyleDictionary.ContainsKey(old_key))
+            {
+                TMP_Style style = m_StyleDictionary[old_key];
+                m_StyleDictionary.Add(new_key, style);
+                m_StyleDictionary.Remove(old_key);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to update the internal reference to a newly assigned style sheet in the TMP Settings.
+        /// </summary>
+        public static void UpdateStyleSheet()
+        {
+            // Reset instance
+            s_Instance = null;
+
+            RefreshStyles();
+        }
+
+
+        /// <summary>
+        /// Function to refresh the Style Dictionary.
+        /// </summary>
+        public static void RefreshStyles()
+        {
+            instance.LoadStyleDictionaryInternal();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        private void LoadStyleDictionaryInternal()
+        {
+            m_StyleDictionary.Clear();
+            
+            // Read Styles from style list and store them into dictionary for faster access.
+            for (int i = 0; i < m_StyleList.Count; i++)
+            {
+                m_StyleList[i].RefreshStyle();
+              
+                if (!m_StyleDictionary.ContainsKey(m_StyleList[i].hashCode))
+                    m_StyleDictionary.Add(m_StyleList[i].hashCode, m_StyleList[i]);
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..412dff874059b112badfdc3e7cf161fd0cd1ab12
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_StyleSheet.cs.meta
@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: ab2114bdc8544297b417dfefe9f1e410
+timeCreated: 1436650317
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences:
+  - StyleSheet: {fileID: 11400000, guid: cab1ac28c8e6be24e995befe0c36d7c1, type: 2}
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2b31f57c10e53ac3bf0c36e3000dd4963442d7ad
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs
@@ -0,0 +1,580 @@
+using UnityEngine;
+using System;
+using System.Collections;
+
+#pragma warning disable 0109 // Disable warning due to conflict between Unity Editor DLL and Runtime DLL related to .renderer property being available in one but not the other. 
+
+namespace TMPro
+{
+    [RequireComponent(typeof(MeshRenderer))]
+    [RequireComponent(typeof(MeshFilter))]
+    [ExecuteAlways]
+    public class TMP_SubMesh : MonoBehaviour
+    {
+        /// <summary>
+        /// The TMP Font Asset assigned to this sub text object.
+        /// </summary>
+        public TMP_FontAsset fontAsset
+        {
+            get { return m_fontAsset; }
+            set { m_fontAsset = value; }
+        }
+        [SerializeField]
+        private TMP_FontAsset m_fontAsset;
+
+
+        /// <summary>
+        /// The TMP Sprite Asset assigned to this sub text object.
+        /// </summary>
+        public TMP_SpriteAsset spriteAsset
+        {
+            get { return m_spriteAsset; }
+            set { m_spriteAsset = value; }
+        }
+        [SerializeField]
+        private TMP_SpriteAsset m_spriteAsset;
+
+
+        /// <summary>
+        /// The material to be assigned to this object. Returns an instance of the material.
+        /// </summary>
+        public Material material
+        {
+            // Return a new Instance of the Material if none exists. Otherwise return the current Material Instance.
+            get { return GetMaterial(m_sharedMaterial); }
+
+            // Assign new font material
+            set
+            {
+                if (m_sharedMaterial.GetInstanceID() == value.GetInstanceID())
+                    return;
+
+                m_sharedMaterial = m_material = value;
+
+                m_padding = GetPaddingForMaterial();
+
+                SetVerticesDirty();
+                SetMaterialDirty();
+            }
+        }
+        [SerializeField]
+        private Material m_material;
+
+
+        /// <summary>
+        /// The material to be assigned to this text object.
+        /// </summary>
+        public Material sharedMaterial
+        {
+            get { return m_sharedMaterial; }
+            set { SetSharedMaterial(value); }
+        }
+        [SerializeField]
+        private Material m_sharedMaterial;
+
+
+        /// <summary>
+        /// The fallback material created from the properties of the fallback source material.
+        /// </summary>
+        public Material fallbackMaterial
+        {
+            get { return m_fallbackMaterial; }
+            set
+            {
+                if (m_fallbackMaterial == value) return;
+
+                if (m_fallbackMaterial != null && m_fallbackMaterial != value)
+                    TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+
+                m_fallbackMaterial = value;
+                TMP_MaterialManager.AddFallbackMaterialReference(m_fallbackMaterial);
+
+                SetSharedMaterial(m_fallbackMaterial);
+            }
+        }
+        private Material m_fallbackMaterial;
+
+
+        /// <summary>
+        /// The source material used by the fallback font
+        /// </summary>
+        public Material fallbackSourceMaterial
+        {
+            get { return m_fallbackSourceMaterial; }
+            set { m_fallbackSourceMaterial = value; }
+        }
+        private Material m_fallbackSourceMaterial;
+
+
+        /// <summary>
+        /// Is the text object using the default font asset material.
+        /// </summary>
+        public bool isDefaultMaterial
+        {
+            get { return m_isDefaultMaterial; }
+            set { m_isDefaultMaterial = value; }
+        }
+        [SerializeField]
+        private bool m_isDefaultMaterial;
+
+
+        /// <summary>
+        /// Padding value resulting for the property settings on the material.
+        /// </summary>
+        public float padding
+        {
+            get { return m_padding; }
+            set { m_padding = value; }
+        }
+        [SerializeField]
+        private float m_padding;
+
+
+        /// <summary>
+        /// The Mesh Renderer of this text sub object.
+        /// </summary>
+        public new Renderer renderer
+        {
+            get { if (m_renderer == null) m_renderer = GetComponent<Renderer>();
+
+                return m_renderer;
+            }
+        }
+        [SerializeField]
+        private Renderer m_renderer;
+
+
+        /// <summary>
+        /// The MeshFilter of this text sub object.
+        /// </summary>
+        public MeshFilter meshFilter
+        {
+            get { if (m_meshFilter == null) m_meshFilter = GetComponent<MeshFilter>();
+                return m_meshFilter;
+            }
+        }
+        [SerializeField]
+        private MeshFilter m_meshFilter;
+
+
+        /// <summary>
+        /// The Mesh of this text sub object.
+        /// </summary>
+        public Mesh mesh
+        {
+            get
+            {
+                if (m_mesh == null)
+                {
+                    m_mesh = new Mesh();
+                    m_mesh.hideFlags = HideFlags.HideAndDontSave;
+                    this.meshFilter.mesh = m_mesh;
+                }
+
+                return m_mesh;
+            }
+            set { m_mesh = value; }
+        }
+        private Mesh m_mesh;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public BoxCollider boxCollider
+        //{
+        //    get
+        //    {
+        //        if (m_boxCollider == null)
+        //        {
+        //            //
+        //            m_boxCollider = GetComponent<BoxCollider>();
+        //            if (m_boxCollider == null)
+        //            {
+        //                m_boxCollider = gameObject.AddComponent<BoxCollider>();
+        //                gameObject.AddComponent<Rigidbody>();
+        //            }
+        //        }
+
+        //        return m_boxCollider;
+        //    }
+        //}
+        //[SerializeField]
+        //private BoxCollider m_boxCollider;
+
+        [SerializeField]
+        private TextMeshPro m_TextComponent;
+
+        [NonSerialized]
+        private bool m_isRegisteredForEvents;
+
+
+        void OnEnable()
+        {
+            // Register Callbacks for various events.
+            if (!m_isRegisteredForEvents)
+            {
+                #if UNITY_EDITOR
+                TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Add(ON_MATERIAL_PROPERTY_CHANGED);
+                TMPro_EventManager.FONT_PROPERTY_EVENT.Add(ON_FONT_PROPERTY_CHANGED);
+                //TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Add(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+                TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Add(ON_DRAG_AND_DROP_MATERIAL);
+                //TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED);
+                TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Add(ON_SPRITE_ASSET_PROPERTY_CHANGED);
+                //TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Add(ON_TMP_SETTINGS_CHANGED);
+                #endif
+
+                m_isRegisteredForEvents = true;
+            }
+
+            // Make the geometry visible when the object is enabled.
+            meshFilter.sharedMesh = mesh;
+
+            // Update _ClipRect values
+            if (m_sharedMaterial != null)
+                m_sharedMaterial.SetVector(ShaderUtilities.ID_ClipRect, new Vector4(-32767, -32767, 32767, 32767));
+        }
+
+
+        void OnDisable()
+        {
+            // Hide the geometry when the object is disabled.
+            m_meshFilter.sharedMesh = null;
+
+            if (m_fallbackMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+                m_fallbackMaterial = null;
+            }
+
+
+        }
+
+
+        void OnDestroy()
+        {
+            // Destroy Mesh
+            if (m_mesh != null) DestroyImmediate(m_mesh);
+
+            if (m_fallbackMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+                m_fallbackMaterial = null;
+            }
+
+            #if UNITY_EDITOR
+            // Unregister the event this object was listening to
+            TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Remove(ON_MATERIAL_PROPERTY_CHANGED);
+            TMPro_EventManager.FONT_PROPERTY_EVENT.Remove(ON_FONT_PROPERTY_CHANGED);
+            //TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Remove(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+            TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Remove(ON_DRAG_AND_DROP_MATERIAL);
+            //TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED);
+            TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Remove(ON_SPRITE_ASSET_PROPERTY_CHANGED);
+            //TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Remove(ON_TMP_SETTINGS_CHANGED);
+            #endif
+            m_isRegisteredForEvents = false;
+        }
+
+
+
+        #if UNITY_EDITOR
+        // Event received when custom material editor properties are changed.
+        void ON_MATERIAL_PROPERTY_CHANGED(bool isChanged, Material mat)
+        {
+            //Debug.Log("*** ON_MATERIAL_PROPERTY_CHANGED ***");
+            int targetMaterialID = mat.GetInstanceID();
+            int sharedMaterialID = m_sharedMaterial.GetInstanceID();
+            int fallbackSourceMaterialID = m_fallbackSourceMaterial == null ? 0 : m_fallbackSourceMaterial.GetInstanceID();
+
+            // Filter events and return if the affected material is not this object's material.
+            if (targetMaterialID != sharedMaterialID)
+            {
+                // Check if event applies to the source fallback material
+                if (m_fallbackMaterial != null && fallbackSourceMaterialID == targetMaterialID)
+                    TMP_MaterialManager.CopyMaterialPresetProperties(mat, m_fallbackMaterial);
+                else
+                    return;
+            }
+
+            if (m_TextComponent == null) m_TextComponent = GetComponentInParent<TextMeshPro>();
+
+            m_padding = GetPaddingForMaterial();
+
+            m_TextComponent.havePropertiesChanged = true;
+            m_TextComponent.SetVerticesDirty();
+        }
+
+
+        // Event to Track Material Changed resulting from Drag-n-drop.
+        void ON_DRAG_AND_DROP_MATERIAL(GameObject obj, Material currentMaterial, Material newMaterial)
+        {
+            // Check if event applies to this current object
+            #if UNITY_2018_2_OR_NEWER
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject) == obj)
+            #else
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetPrefabParent(gameObject) == obj)
+            #endif
+            {
+                if (!m_isDefaultMaterial) return;
+
+                // Make sure we have a valid reference to the renderer.
+                if (m_renderer == null) m_renderer = GetComponent<Renderer>();
+
+                UnityEditor.Undo.RecordObject(this, "Material Assignment");
+                UnityEditor.Undo.RecordObject(m_renderer, "Material Assignment");
+
+                SetSharedMaterial(newMaterial);
+                m_TextComponent.havePropertiesChanged = true;
+            }
+        }
+
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_SPRITE_ASSET_PROPERTY_CHANGED(bool isChanged, UnityEngine.Object obj)
+        {
+            //if (spriteSheet != null && (obj as TMP_SpriteAsset == m_spriteAsset || obj as Texture2D == m_spriteAsset.spriteSheet))
+            //{
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.havePropertiesChanged = true;
+                //m_TextComponent.SetVerticesDirty();
+            }
+
+            //}
+        }
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_FONT_PROPERTY_CHANGED(bool isChanged, TMP_FontAsset font)
+        {
+            if (m_fontAsset != null && font.GetInstanceID() == m_fontAsset.GetInstanceID())
+            {
+                // Copy Normal and Bold Weight
+                if (m_fallbackMaterial != null)
+                {
+                    m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightNormal, m_fontAsset.normalStyle);
+                    m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightBold, m_fontAsset.boldStyle);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Event received when the TMP Settings are changed.
+        /// </summary>
+        void ON_TMP_SETTINGS_CHANGED()
+        {
+        //    //Debug.Log("TMP Setting have changed.");
+        //    //SetVerticesDirty();
+        //    SetMaterialDirty();
+        }
+        #endif
+
+
+
+        public static TMP_SubMesh AddSubTextObject(TextMeshPro textComponent, MaterialReference materialReference)
+        {
+            GameObject go = new GameObject("TMP SubMesh [" + materialReference.material.name + "]", typeof(TMP_SubMesh));
+
+            TMP_SubMesh subMesh = go.GetComponent<TMP_SubMesh>();
+
+            go.transform.SetParent(textComponent.transform, false);
+            go.transform.localPosition = Vector3.zero;
+            go.transform.localRotation = Quaternion.identity;
+            go.transform.localScale = Vector3.one;
+            go.layer = textComponent.gameObject.layer;
+
+            subMesh.m_meshFilter = go.GetComponent<MeshFilter>();
+
+            subMesh.m_TextComponent = textComponent;
+            subMesh.m_fontAsset = materialReference.fontAsset;
+            subMesh.m_spriteAsset = materialReference.spriteAsset;
+            subMesh.m_isDefaultMaterial = materialReference.isDefaultMaterial;
+            subMesh.SetSharedMaterial(materialReference.material);
+
+            subMesh.renderer.sortingLayerID = textComponent.renderer.sortingLayerID;
+            subMesh.renderer.sortingOrder = textComponent.renderer.sortingOrder;
+
+            return subMesh;
+        }
+
+
+        public void DestroySelf()
+        {
+            Destroy(this.gameObject, 1f);
+        }
+
+        // Function called internally when a new material is assigned via the fontMaterial property.
+        Material GetMaterial(Material mat)
+        {
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object.
+            if (m_renderer == null)
+                m_renderer = GetComponent<Renderer>();
+
+            // Create Instance Material only if the new material is not the same instance previously used.
+            if (m_material == null || m_material.GetInstanceID() != mat.GetInstanceID())
+                m_material = CreateMaterialInstance(mat);
+
+            m_sharedMaterial = m_material;
+
+            // Compute and Set new padding values for this new material. 
+            m_padding = GetPaddingForMaterial();
+
+            SetVerticesDirty();
+            SetMaterialDirty();
+
+            return m_sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Method used to create an instance of the material
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        Material CreateMaterialInstance(Material source)
+        {
+            Material mat = new Material(source);
+            mat.shaderKeywords = source.shaderKeywords;
+            mat.name += " (Instance)";
+
+            return mat;
+        }
+
+
+        /// <summary>
+        /// Method returning the shared material assigned to the text object.
+        /// </summary>
+        /// <returns></returns>
+        Material GetSharedMaterial()
+        {
+            if (m_renderer == null)
+                m_renderer = GetComponent<Renderer>();
+
+            return m_renderer.sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Method to set the shared material.
+        /// </summary>
+        /// <param name="mat"></param>
+        void SetSharedMaterial(Material mat)
+        {
+            //Debug.Log("*** SetSharedMaterial() *** FRAME (" + Time.frameCount + ")");
+
+            // Assign new material.
+            m_sharedMaterial = mat;
+
+            // Compute and Set new padding values for this new material. 
+            m_padding = GetPaddingForMaterial();
+
+            SetMaterialDirty();
+
+            #if UNITY_EDITOR
+            if (m_sharedMaterial != null)
+                gameObject.name = "TMP SubMesh [" + m_sharedMaterial.name + "]";
+            #endif
+        }
+
+
+        /// <summary>
+        /// Function called when the padding value for the material needs to be re-calculated.
+        /// </summary>
+        /// <returns></returns>
+        public float GetPaddingForMaterial()
+        {
+            float padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_TextComponent.extraPadding, m_TextComponent.isUsingBold);
+
+            return padding;
+        }
+
+
+        /// <summary>
+        /// Function to update the padding values of the object.
+        /// </summary>
+        /// <param name="isExtraPadding"></param>
+        /// <param name="isBold"></param>
+        public void UpdateMeshPadding(bool isExtraPadding, bool isUsingBold)
+        {
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, isExtraPadding, isUsingBold);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetVerticesDirty()
+        {
+            if (!this.enabled)
+                return;
+
+            // This is called on the parent TextMeshPro component.
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.havePropertiesChanged = true;
+                m_TextComponent.SetVerticesDirty();
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetMaterialDirty()
+        {
+            //if (!this.enabled)
+            //    return;
+
+            UpdateMaterial();
+
+            //m_materialDirty = true;
+            //TMP_UpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected void UpdateMaterial()
+        {
+            //Debug.Log("*** STO - UpdateMaterial() *** FRAME (" + Time.frameCount + ")");
+
+            //if (!this.enabled)
+            //    return;
+
+            if (m_renderer == null) m_renderer = this.renderer;
+
+            m_renderer.sharedMaterial = m_sharedMaterial;
+
+            #if UNITY_EDITOR
+            if (m_sharedMaterial != null && gameObject.name != "TMP SubMesh [" + m_sharedMaterial.name + "]")
+                gameObject.name = "TMP SubMesh [" + m_sharedMaterial.name + "]";
+            #endif
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public void UpdateColliders(int vertexCount)
+        //{
+        //    if (this.boxCollider == null) return;
+
+        //    Vector2 bl = TMP_Math.MAX_16BIT;
+        //    Vector2 tr = TMP_Math.MIN_16BIT;
+        //    // Compute the bounds of the sub text object mesh (excluding the transform position).
+        //    for (int i = 0; i < vertexCount; i++)
+        //    {
+        //        bl.x = Mathf.Min(bl.x, m_mesh.vertices[i].x);
+        //        bl.y = Mathf.Min(bl.y, m_mesh.vertices[i].y);
+
+        //        tr.x = Mathf.Max(tr.x, m_mesh.vertices[i].x);
+        //        tr.y = Mathf.Max(tr.y, m_mesh.vertices[i].y);
+        //    }
+
+        //    Vector3 center = (bl + tr) / 2;
+        //    Vector3 size = tr - bl;
+        //    size.z = .1f;
+        //    this.boxCollider.center = center;
+        //    this.boxCollider.size = size;
+        //}
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..eef9ab030fc47a8eb218442d4c77902c23532be6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMesh.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 07994bfe8b0e4adb97d706de5dea48d5
+timeCreated: 1454709708
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88ecd9f2dda19dd88d834bec0a86e7a6b39fbd75
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs
@@ -0,0 +1,807 @@
+using UnityEngine;
+using UnityEngine.UI;
+using System.Collections;
+using System.Collections.Generic;
+
+#pragma warning disable 0414 // Disabled a few warnings related to serialized variables not used in this script but used in the editor.
+
+namespace TMPro
+{
+    [ExecuteAlways]
+    public class TMP_SubMeshUI : MaskableGraphic, IClippable, IMaskable, IMaterialModifier
+    {
+        /// <summary>
+        /// The TMP Font Asset assigned to this sub text object.
+        /// </summary>
+        public TMP_FontAsset fontAsset
+        {
+            get { return m_fontAsset; }
+            set { m_fontAsset = value; }
+        }
+        [SerializeField]
+        private TMP_FontAsset m_fontAsset;
+
+
+        /// <summary>
+        /// The TMP Sprite Asset assigned to this sub text object.
+        /// </summary>
+        public TMP_SpriteAsset spriteAsset
+        {
+            get { return m_spriteAsset; }
+            set { m_spriteAsset = value; }
+        }
+        [SerializeField]
+        private TMP_SpriteAsset m_spriteAsset;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override Texture mainTexture
+        {
+            get
+            {
+                if (this.sharedMaterial != null)
+                    return this.sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex);
+
+
+                return null;
+            }
+        }
+
+
+        /// <summary>
+        /// The material to be assigned to this object. Returns an instance of the material.
+        /// </summary>
+        public override Material material
+        {
+            // Return a new Instance of the Material if none exists. Otherwise return the current Material Instance.
+            get { return GetMaterial(m_sharedMaterial); }
+
+            // Assign new font material
+            set
+            {
+                if (m_sharedMaterial != null && m_sharedMaterial.GetInstanceID() == value.GetInstanceID())
+                    return;
+
+                m_sharedMaterial = m_material = value;
+
+                m_padding = GetPaddingForMaterial();
+
+                SetVerticesDirty();
+                SetMaterialDirty();
+            }
+        }
+        [SerializeField]
+        private Material m_material;
+
+
+        /// <summary>
+        /// The material to be assigned to this text object.
+        /// </summary>
+        public Material sharedMaterial
+        {
+            get { return m_sharedMaterial; }
+            set { SetSharedMaterial(value); }
+        }
+        [SerializeField]
+        private Material m_sharedMaterial;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public Material fallbackMaterial
+        {
+            get { return m_fallbackMaterial; }
+            set
+            {
+                if (m_fallbackMaterial == value) return;
+
+                if (m_fallbackMaterial != null && m_fallbackMaterial != value)
+                    TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+
+                m_fallbackMaterial = value;
+                TMP_MaterialManager.AddFallbackMaterialReference(m_fallbackMaterial);
+
+                SetSharedMaterial(m_fallbackMaterial);
+            }
+        }
+        private Material m_fallbackMaterial;
+
+
+        /// <summary>
+        /// The source material used by the fallback font
+        /// </summary>
+        public Material fallbackSourceMaterial
+        {
+            get { return m_fallbackSourceMaterial; }
+            set { m_fallbackSourceMaterial = value; }
+        }
+        private Material m_fallbackSourceMaterial;
+
+
+        /// <summary>
+        /// Get the material that will be used for rendering.
+        /// </summary>
+        public override Material materialForRendering
+        {
+            get
+            {
+                return TMP_MaterialManager.GetMaterialForRendering(this, m_sharedMaterial);
+            }
+        }
+
+
+        /// <summary>
+        /// Is the text object using the default font asset material.
+        /// </summary>
+        public bool isDefaultMaterial
+        {
+            get { return m_isDefaultMaterial; }
+            set { m_isDefaultMaterial = value; }
+        }
+        [SerializeField]
+        private bool m_isDefaultMaterial;
+
+
+        /// <summary>
+        /// Padding value resulting for the property settings on the material.
+        /// </summary>
+        public float padding
+        {
+            get { return m_padding; }
+            set { m_padding = value; }
+        }
+        [SerializeField]
+        private float m_padding;
+
+
+        /// <summary>
+        /// The Mesh Renderer of this text sub object.
+        /// </summary>
+        public new CanvasRenderer canvasRenderer
+        {
+            get { if (m_canvasRenderer == null) m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+                return m_canvasRenderer;
+            }
+        }
+        [SerializeField]
+        private CanvasRenderer m_canvasRenderer;
+
+
+        /// <summary>
+        /// The Mesh of this text sub object.
+        /// </summary>
+        public Mesh mesh
+        {
+            get
+            {
+                if (m_mesh == null)
+                {
+                    m_mesh = new Mesh();
+                    m_mesh.hideFlags = HideFlags.HideAndDontSave;
+                }
+
+                return m_mesh;
+            }
+            set { m_mesh = value; }
+        }
+        private Mesh m_mesh;
+
+
+        [SerializeField]
+        private TextMeshProUGUI m_TextComponent;
+
+
+        [System.NonSerialized]
+        private bool m_isRegisteredForEvents;
+        private bool m_materialDirty;
+        [SerializeField]
+        private int m_materialReferenceIndex;
+
+
+
+        /// <summary>
+        /// Function to add a new sub text object.
+        /// </summary>
+        /// <param name="textComponent"></param>
+        /// <param name="materialReference"></param>
+        /// <returns></returns>
+        public static TMP_SubMeshUI AddSubTextObject(TextMeshProUGUI textComponent, MaterialReference materialReference)
+        {
+            GameObject go = new GameObject("TMP UI SubObject [" + materialReference.material.name + "]", typeof(RectTransform));
+
+            go.transform.SetParent(textComponent.transform, false);
+            go.layer = textComponent.gameObject.layer;
+
+            RectTransform rectTransform = go.GetComponent<RectTransform>();
+            rectTransform.anchorMin = Vector2.zero;
+            rectTransform.anchorMax = Vector2.one;
+            rectTransform.sizeDelta = Vector2.zero;
+            rectTransform.pivot = textComponent.rectTransform.pivot;
+
+            TMP_SubMeshUI subMesh = go.AddComponent<TMP_SubMeshUI>();
+
+            subMesh.m_canvasRenderer = subMesh.canvasRenderer;
+            subMesh.m_TextComponent = textComponent;
+
+            subMesh.m_materialReferenceIndex = materialReference.index;
+            subMesh.m_fontAsset = materialReference.fontAsset;
+            subMesh.m_spriteAsset = materialReference.spriteAsset;
+            subMesh.m_isDefaultMaterial = materialReference.isDefaultMaterial;
+            subMesh.SetSharedMaterial(materialReference.material);
+
+            return subMesh;
+        }
+
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnEnable()
+        {
+            //Debug.Log("*** SubObject OnEnable() ***");
+
+            // Register Callbacks for various events.
+            if (!m_isRegisteredForEvents)
+            {
+
+            #if UNITY_EDITOR
+                TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Add(ON_MATERIAL_PROPERTY_CHANGED);
+                TMPro_EventManager.FONT_PROPERTY_EVENT.Add(ON_FONT_PROPERTY_CHANGED);
+                //TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Add(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+                TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Add(ON_DRAG_AND_DROP_MATERIAL);
+                //TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED);
+                TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Add(ON_SPRITE_ASSET_PROPERTY_CHANGED);
+                //TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Add(ON_TMP_SETTINGS_CHANGED);
+            #endif
+
+                m_isRegisteredForEvents = true;
+            }
+
+            m_ShouldRecalculateStencil = true;
+            RecalculateClipping();
+            RecalculateMasking();
+
+            //SetAllDirty();
+        }
+
+
+        protected override void OnDisable()
+        {
+            //Debug.Log("*** SubObject OnDisable() ***");
+
+            //m_canvasRenderer.Clear();
+            TMP_UpdateRegistry.UnRegisterCanvasElementForRebuild(this);
+
+            if (m_MaskMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+                m_MaskMaterial = null;
+            }
+
+            if (m_fallbackMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+                m_fallbackMaterial = null;
+            }
+
+            base.OnDisable();
+        }
+
+
+        protected override void OnDestroy()
+        {
+            //Debug.Log("*** OnDestroy() ***");
+
+            // Destroy Mesh
+            if (m_mesh != null) DestroyImmediate(m_mesh);
+
+            if (m_MaskMaterial != null)
+                TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+
+            if (m_fallbackMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
+                m_fallbackMaterial = null;
+            }
+
+#if UNITY_EDITOR
+            // Unregister the event this object was listening to
+            TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Remove(ON_MATERIAL_PROPERTY_CHANGED);
+            TMPro_EventManager.FONT_PROPERTY_EVENT.Remove(ON_FONT_PROPERTY_CHANGED);
+            //TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Remove(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+            TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Remove(ON_DRAG_AND_DROP_MATERIAL);
+            //TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED);
+            TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Remove(ON_SPRITE_ASSET_PROPERTY_CHANGED);
+            //TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Remove(ON_TMP_SETTINGS_CHANGED);
+        #endif
+
+            m_isRegisteredForEvents = false;
+
+            RecalculateClipping();
+        }
+
+
+
+#if UNITY_EDITOR
+        // Event received when custom material editor properties are changed.
+        void ON_MATERIAL_PROPERTY_CHANGED(bool isChanged, Material mat)
+        {
+            //Debug.Log("*** ON_MATERIAL_PROPERTY_CHANGED ***");
+
+            int targetMaterialID = mat.GetInstanceID();
+            int sharedMaterialID = m_sharedMaterial.GetInstanceID();
+            int maskingMaterialID = m_MaskMaterial == null ? 0 : m_MaskMaterial.GetInstanceID();
+            int fallbackSourceMaterialID = m_fallbackSourceMaterial == null ? 0 : m_fallbackSourceMaterial.GetInstanceID();
+
+            // Filter events and return if the affected material is not this object's material.
+            //if (targetMaterialID != sharedMaterialID && targetMaterialID != maskingMaterialID) return;
+
+            // Filter events and return if the affected material is not this object's material.
+            if (m_fallbackMaterial != null && fallbackSourceMaterialID == targetMaterialID)
+                TMP_MaterialManager.CopyMaterialPresetProperties(mat, m_fallbackMaterial);
+
+            if (m_TextComponent == null) m_TextComponent = GetComponentInParent<TextMeshProUGUI>();
+
+            // Make sure material properties are synchronized between the assigned material and masking material.
+            if (m_MaskMaterial != null)
+            {
+                UnityEditor.Undo.RecordObject(m_MaskMaterial, "Material Property Changes");
+                UnityEditor.Undo.RecordObject(m_sharedMaterial, "Material Property Changes");
+
+                if (targetMaterialID == sharedMaterialID)
+                {
+                    //Debug.Log("Copy base material properties to masking material if not null.");
+                    float stencilID = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilID);
+                    float stencilComp = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilComp);
+                    m_MaskMaterial.CopyPropertiesFromMaterial(mat);
+                    m_MaskMaterial.shaderKeywords = mat.shaderKeywords;
+
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilID, stencilID);
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp);
+                }
+                else if (targetMaterialID == maskingMaterialID)
+                {
+                    // Update the padding 
+                    GetPaddingForMaterial(mat);
+
+                    m_sharedMaterial.CopyPropertiesFromMaterial(mat);
+                    m_sharedMaterial.shaderKeywords = mat.shaderKeywords;
+                    m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilID, 0);
+                    m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilComp, 8);
+                }
+                else if (fallbackSourceMaterialID == targetMaterialID)
+                {
+                    float stencilID = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilID);
+                    float stencilComp = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilComp);
+                    m_MaskMaterial.CopyPropertiesFromMaterial(m_fallbackMaterial);
+                    m_MaskMaterial.shaderKeywords = m_fallbackMaterial.shaderKeywords;
+
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilID, stencilID);
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp);
+                }
+            }
+
+            m_padding = GetPaddingForMaterial();
+
+            SetVerticesDirty();
+            m_ShouldRecalculateStencil = true;
+            RecalculateClipping();
+            RecalculateMasking();
+        }
+
+
+        // Event to Track Material Changed resulting from Drag-n-drop.
+        void ON_DRAG_AND_DROP_MATERIAL(GameObject obj, Material currentMaterial, Material newMaterial)
+        {
+            // Check if event applies to this current object
+            #if UNITY_2018_2_OR_NEWER
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject) == obj)
+            #else
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetPrefabParent(gameObject) == obj)
+            #endif
+            {
+                if (!m_isDefaultMaterial) return;
+
+                // Make sure we have a valid reference to the renderer.
+                if (m_canvasRenderer == null) m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+                UnityEditor.Undo.RecordObject(this, "Material Assignment");
+                UnityEditor.Undo.RecordObject(m_canvasRenderer, "Material Assignment");
+
+                SetSharedMaterial(newMaterial);
+                m_TextComponent.havePropertiesChanged = true;
+            }
+        }
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_SPRITE_ASSET_PROPERTY_CHANGED(bool isChanged, UnityEngine.Object obj)
+        {
+            //if (spriteSheet != null && (obj as TMP_SpriteAsset == m_spriteAsset || obj as Texture2D == m_spriteAsset.spriteSheet))
+            //{
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.havePropertiesChanged = true;
+                //m_TextComponent.SetVerticesDirty();
+            }
+
+            //}
+        }
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_FONT_PROPERTY_CHANGED(bool isChanged, TMP_FontAsset font)
+        {
+            if (m_fontAsset != null && font.GetInstanceID() == m_fontAsset.GetInstanceID())
+            {
+                // Copy Normal and Bold Weight
+                if (m_fallbackMaterial != null)
+                {
+                    m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightNormal, m_fontAsset.normalStyle);
+                    m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightBold, m_fontAsset.boldStyle);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Event received when the TMP Settings are changed.
+        /// </summary>
+        void ON_TMP_SETTINGS_CHANGED()
+        {
+            //Debug.Log("TMP Setting have changed.");
+            //SetVerticesDirty();
+            //SetMaterialDirty();
+        }
+#endif
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnTransformParentChanged()
+        {
+            if (!this.IsActive())
+                return;
+
+            m_ShouldRecalculateStencil = true;
+            RecalculateClipping();
+            RecalculateMasking();
+        }
+
+
+        /// <summary>
+        /// Function returning the modified material for masking if necessary.
+        /// </summary>
+        /// <param name="baseMaterial"></param>
+        /// <returns></returns>
+        public override Material GetModifiedMaterial(Material baseMaterial)
+        {
+            Material mat = baseMaterial;
+
+            if (m_ShouldRecalculateStencil)
+            {
+                m_StencilValue = TMP_MaterialManager.GetStencilID(gameObject);
+                m_ShouldRecalculateStencil = false;
+            }
+
+            if (m_StencilValue > 0)
+            {
+                mat = TMP_MaterialManager.GetStencilMaterial(baseMaterial, m_StencilValue);
+                if (m_MaskMaterial != null)
+                    TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+
+                m_MaskMaterial = mat;
+            }
+
+            return mat;
+        }
+
+
+        /// <summary>
+        /// Function called when the padding value for the material needs to be re-calculated.
+        /// </summary>
+        /// <returns></returns>
+        public float GetPaddingForMaterial()
+        {
+            float padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_TextComponent.extraPadding, m_TextComponent.isUsingBold);
+
+            return padding;
+        }
+
+
+        /// <summary>
+        /// Function called when the padding value for the material needs to be re-calculated.
+        /// </summary>
+        /// <returns></returns>
+        public float GetPaddingForMaterial(Material mat)
+        {
+            float padding = ShaderUtilities.GetPadding(mat, m_TextComponent.extraPadding, m_TextComponent.isUsingBold);
+
+            return padding;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="isExtraPadding"></param>
+        /// <param name="isBold"></param>
+        public void UpdateMeshPadding(bool isExtraPadding, bool isUsingBold)
+        {
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, isExtraPadding, isUsingBold);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetAllDirty()
+        {
+            //SetLayoutDirty();
+            //SetVerticesDirty();
+            //SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetVerticesDirty()
+        {
+            if (!this.IsActive())
+                return;
+
+            // This is called on the parent TextMeshPro component.
+            if (m_TextComponent != null)
+            {
+                m_TextComponent.havePropertiesChanged = true;
+                m_TextComponent.SetVerticesDirty();
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetLayoutDirty()
+        {
+
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetMaterialDirty()
+        {
+            //Debug.Log("*** STO-UI - SetMaterialDirty() *** FRAME (" + Time.frameCount + ")");
+
+            //if (!this.IsActive())
+            //    return;
+
+            m_materialDirty = true;
+
+            UpdateMaterial();
+
+            if (m_OnDirtyMaterialCallback != null)
+                m_OnDirtyMaterialCallback();
+
+            //TMP_ITextElementUpdateManager.RegisterTextElementForGraphicRebuild(this);
+
+            //TMP_UpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);
+            //m_TextComponent.SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void SetPivotDirty()
+        {
+            if (!this.IsActive())
+                return;
+
+            this.rectTransform.pivot = m_TextComponent.rectTransform.pivot;
+        }
+
+
+        /// <summary>
+        /// Override to Cull function of MaskableGraphic to prevent Culling.
+        /// </summary>
+        /// <param name="clipRect"></param>
+        /// <param name="validRect"></param>
+        public override void Cull(Rect clipRect, bool validRect)
+        {
+            if (m_TextComponent.ignoreRectMaskCulling) return;
+
+            base.Cull(clipRect, validRect);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void UpdateGeometry()
+        {
+            // Need to override to prevent Unity from changing the geometry of the object.
+            Debug.Log("UpdateGeometry()");
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="update"></param>
+        public override void Rebuild(CanvasUpdate update)
+        {
+            if (update == CanvasUpdate.PreRender)
+            {
+                if (!m_materialDirty) return;
+
+                UpdateMaterial();
+                m_materialDirty = false;
+            }
+        }
+
+
+        /// <summary>
+        /// Function to update the material from the parent text object.
+        /// </summary>
+        public void RefreshMaterial()
+        {
+            UpdateMaterial();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void UpdateMaterial()
+        {
+            //Debug.Log("*** STO-UI - UpdateMaterial() *** FRAME (" + Time.frameCount + ")");
+
+            //if (!this.IsActive())
+            //    return;
+
+            if (m_canvasRenderer == null) m_canvasRenderer = this.canvasRenderer;
+
+            m_canvasRenderer.materialCount = 1;
+            m_canvasRenderer.SetMaterial(materialForRendering, 0);
+            m_canvasRenderer.SetTexture(mainTexture);
+
+            #if UNITY_EDITOR
+            if (m_sharedMaterial != null && gameObject.name != "TMP SubMeshUI [" + m_sharedMaterial.name + "]")
+                gameObject.name = "TMP SubMeshUI [" + m_sharedMaterial.name + "]";
+            #endif
+        }
+
+
+        // IClippable implementation
+        /// <summary>
+        /// Method called when the state of a parent changes.
+        /// </summary>
+        public override void RecalculateClipping()
+        {
+            //Debug.Log("*** RecalculateClipping() ***");
+            base.RecalculateClipping();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void RecalculateMasking()
+        {
+            //Debug.Log("RecalculateMasking()");
+
+            this.m_ShouldRecalculateStencil = true;
+            SetMaterialDirty();
+        }
+
+
+
+        /// <summary>
+        /// Method which returns an instance of the shared material
+        /// </summary>
+        /// <returns></returns>
+        Material GetMaterial()
+        {
+            // Make sure we have a valid reference to the renderer.
+            //if (m_renderer == null) m_renderer = GetComponent<Renderer>();
+
+            //if (m_material == null || m_isNewSharedMaterial)
+            //{
+            //    m_renderer.material = m_sharedMaterial;
+            //    m_material = m_renderer.material;
+            //    m_sharedMaterial = m_material;
+            //    m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_TextMeshPro.extraPadding, false);
+            //    m_isNewSharedMaterial = false;
+            //}
+
+            return m_sharedMaterial;
+        }
+
+
+        // Function called internally when a new material is assigned via the fontMaterial property.
+        Material GetMaterial(Material mat)
+        {
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object.
+            //if (m_renderer == null)
+            //    m_renderer = GetComponent<Renderer>();
+
+            // Create Instance Material only if the new material is not the same instance previously used.
+            if (m_material == null || m_material.GetInstanceID() != mat.GetInstanceID())
+                m_material = CreateMaterialInstance(mat);
+
+            m_sharedMaterial = m_material;
+
+            // Compute and Set new padding values for this new material. 
+            m_padding = GetPaddingForMaterial();
+
+            SetVerticesDirty();
+            SetMaterialDirty();
+
+            return m_sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Method used to create an instance of the material
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        Material CreateMaterialInstance(Material source)
+        {
+            Material mat = new Material(source);
+            mat.shaderKeywords = source.shaderKeywords;
+            mat.name += " (Instance)";
+
+            return mat;
+        }
+
+
+        /// <summary>
+        /// Method returning the shared material assigned to the text object.
+        /// </summary>
+        /// <returns></returns>
+        Material GetSharedMaterial()
+        {
+            if (m_canvasRenderer == null)
+                m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+            return m_canvasRenderer.GetMaterial();
+        }
+
+
+        /// <summary>
+        /// Method to set the shared material.
+        /// </summary>
+        /// <param name="mat"></param>
+        void SetSharedMaterial(Material mat)
+        {
+            //Debug.Log("*** SetSharedMaterial UI() *** FRAME (" + Time.frameCount + ")");
+
+            // Assign new material.
+            m_sharedMaterial = mat;
+            m_Material = m_sharedMaterial;
+
+            //m_isDefaultMaterial = false;
+            //if (mat.GetInstanceID() == m_fontAsset.material.GetInstanceID())
+            //    m_isDefaultMaterial = true;
+
+            // Compute and Set new padding values for this new material.
+            m_padding = GetPaddingForMaterial();
+
+            //SetVerticesDirty();
+            SetMaterialDirty();
+
+#if UNITY_EDITOR
+            //if (m_sharedMaterial != null)
+            //    gameObject.name = "TMP SubMesh [" + m_sharedMaterial.name + "]";
+#endif
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..614f42d6a110df98f1beb6fc9317cb8f17a3a5c5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_SubMeshUI.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 058cba836c1846c3aa1c5fd2e28aea77
+timeCreated: 1454709708
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs
new file mode 100644
index 0000000000000000000000000000000000000000..44cc7f0ddc4a58bd7df93e50890d6604bcb5bb76
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs
@@ -0,0 +1,7630 @@
+#define TMP_PRESENT
+
+using UnityEngine;
+using UnityEngine.TextCore;
+using UnityEngine.UI;
+using UnityEngine.Events;
+using UnityEngine.EventSystems;
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    public interface ITextElement
+    {
+        Material sharedMaterial { get; }
+
+        void Rebuild(CanvasUpdate update);
+        int GetInstanceID();
+    }
+
+    public enum TextAlignmentOptions
+    {
+        TopLeft = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Top,
+        Top = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Top,
+        TopRight = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Top,
+        TopJustified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Top,
+        TopFlush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Top,
+        TopGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Top,
+
+        Left = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Middle,
+        Center = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Middle,
+        Right = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Middle,
+        Justified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Middle,
+        Flush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Middle,
+        CenterGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Middle,
+
+        BottomLeft = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Bottom,
+        Bottom = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Bottom,
+        BottomRight = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Bottom,
+        BottomJustified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Bottom,
+        BottomFlush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Bottom,
+        BottomGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Bottom,
+
+        BaselineLeft = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Baseline,
+        Baseline = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Baseline,
+        BaselineRight = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Baseline,
+        BaselineJustified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Baseline,
+        BaselineFlush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Baseline,
+        BaselineGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Baseline,
+
+        MidlineLeft = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Geometry,
+        Midline = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Geometry,
+        MidlineRight = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Geometry,
+        MidlineJustified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Geometry,
+        MidlineFlush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Geometry,
+        MidlineGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Geometry,
+
+        CaplineLeft = _HorizontalAlignmentOptions.Left | _VerticalAlignmentOptions.Capline,
+        Capline = _HorizontalAlignmentOptions.Center | _VerticalAlignmentOptions.Capline,
+        CaplineRight = _HorizontalAlignmentOptions.Right | _VerticalAlignmentOptions.Capline,
+        CaplineJustified = _HorizontalAlignmentOptions.Justified | _VerticalAlignmentOptions.Capline,
+        CaplineFlush = _HorizontalAlignmentOptions.Flush | _VerticalAlignmentOptions.Capline,
+        CaplineGeoAligned = _HorizontalAlignmentOptions.Geometry | _VerticalAlignmentOptions.Capline
+    };
+
+    /// <summary>
+    /// Internal horizontal text alignment options.
+    /// </summary>
+    public enum _HorizontalAlignmentOptions
+    {
+        Left = 0x1, Center = 0x2, Right = 0x4, Justified = 0x8, Flush = 0x10, Geometry = 0x20
+    }
+
+    /// <summary>
+    /// Internal vertical text alignment options.
+    /// </summary>
+    public enum _VerticalAlignmentOptions
+    {
+        Top = 0x100, Middle = 0x200, Bottom = 0x400, Baseline = 0x800, Geometry = 0x1000, Capline = 0x2000,
+    }
+
+
+    /// <summary>
+    /// Flags controlling what vertex data gets pushed to the mesh.
+    /// </summary>
+    public enum TextRenderFlags
+    {
+        DontRender = 0x0,
+        Render = 0xFF
+    };
+
+    public enum TMP_TextElementType { Character, Sprite };
+    public enum MaskingTypes { MaskOff = 0, MaskHard = 1, MaskSoft = 2 }; //, MaskTex = 4 };
+    public enum TextOverflowModes { Overflow = 0, Ellipsis = 1, Masking = 2, Truncate = 3, ScrollRect = 4, Page = 5, Linked = 6 };
+    public enum MaskingOffsetMode { Percentage = 0, Pixel = 1 };
+    public enum TextureMappingOptions { Character = 0, Line = 1, Paragraph = 2, MatchAspect = 3 };
+
+    public enum FontStyles { Normal = 0x0, Bold = 0x1, Italic = 0x2, Underline = 0x4, LowerCase = 0x8, UpperCase = 0x10, SmallCaps = 0x20, Strikethrough = 0x40, Superscript = 0x80, Subscript = 0x100, Highlight = 0x200 };
+    public enum FontWeight { Thin = 100, ExtraLight = 200, Light = 300, Regular = 400, Medium = 500, SemiBold = 600, Bold = 700, Heavy = 800, Black = 900 };
+
+    /// <summary>
+    /// Base class which contains common properties and functions shared between the TextMeshPro and TextMeshProUGUI component.
+    /// </summary>
+    public abstract class TMP_Text : MaskableGraphic
+    {
+        /// <summary>
+        /// A string containing the text to be displayed.
+        /// </summary>
+        public string text
+        {
+            get { return m_text; }
+            set { if (m_text == value) return; m_text = old_text = value; m_inputSource = TextInputSources.String; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        [TextArea(5, 10)]
+        protected string m_text;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public bool isRightToLeftText
+        {
+            get { return m_isRightToLeft; }
+            set { if (m_isRightToLeft == value) return; m_isRightToLeft = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_isRightToLeft = false;
+
+
+        /// <summary>
+        /// The Font Asset to be assigned to this text object.
+        /// </summary>
+        public TMP_FontAsset font
+        {
+            get { return m_fontAsset; }
+            set { if (m_fontAsset == value) return; m_fontAsset = value; LoadFontAsset(); m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected TMP_FontAsset m_fontAsset;
+        protected TMP_FontAsset m_currentFontAsset;
+        protected bool m_isSDFShader;
+
+
+        /// <summary>
+        /// The material to be assigned to this text object.
+        /// </summary>
+        public virtual Material fontSharedMaterial
+        {
+            get { return m_sharedMaterial; }
+            set { if (m_sharedMaterial == value) return; SetSharedMaterial(value); m_havePropertiesChanged = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetMaterialDirty(); }
+        }
+        [SerializeField]
+        protected Material m_sharedMaterial;
+        protected Material m_currentMaterial;
+        protected MaterialReference[] m_materialReferences = new MaterialReference[32];
+        protected Dictionary<int, int> m_materialReferenceIndexLookup = new Dictionary<int, int>();
+
+        protected TMP_RichTextTagStack<MaterialReference> m_materialReferenceStack = new TMP_RichTextTagStack<MaterialReference>(new MaterialReference[16]);
+        protected int m_currentMaterialIndex;
+        //protected int m_sharedMaterialHashCode;
+
+
+        /// <summary>
+        /// An array containing the materials used by the text object.
+        /// </summary>
+        public virtual Material[] fontSharedMaterials
+        {
+            get { return GetSharedMaterials(); }
+            set { SetSharedMaterials(value); m_havePropertiesChanged = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetMaterialDirty(); }
+        }
+        [SerializeField]
+        protected Material[] m_fontSharedMaterials;
+
+
+        /// <summary>
+        /// The material to be assigned to this text object. An instance of the material will be assigned to the object's renderer.
+        /// </summary>
+        public Material fontMaterial
+        {
+            // Return an Instance of the current material.
+            get { return GetMaterial(m_sharedMaterial); }
+
+            // Assign new font material
+            set
+            {
+                if (m_sharedMaterial != null && m_sharedMaterial.GetInstanceID() == value.GetInstanceID()) return;
+
+                m_sharedMaterial = value;
+
+                m_padding = GetPaddingForMaterial();
+                m_havePropertiesChanged = true;
+                m_isInputParsingRequired = true;
+
+                SetVerticesDirty();
+                SetMaterialDirty();
+            }
+        }
+        [SerializeField]
+        protected Material m_fontMaterial;
+
+
+        /// <summary>
+        /// The materials to be assigned to this text object. An instance of the materials will be assigned.
+        /// </summary>
+        public virtual Material[] fontMaterials
+        {
+            get { return GetMaterials(m_fontSharedMaterials); }
+
+            set { SetSharedMaterials(value); m_havePropertiesChanged = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetMaterialDirty(); }
+        }
+        [SerializeField]
+        protected Material[] m_fontMaterials;
+
+        protected bool m_isMaterialDirty;
+
+
+        /// <summary>
+        /// This is the default vertex color assigned to each vertices. Color tags will override vertex colors unless the overrideColorTags is set.
+        /// </summary>
+        public override Color color
+        {
+            get { return m_fontColor; }
+            set { if (m_fontColor == value) return; m_havePropertiesChanged = true; m_fontColor = value; SetVerticesDirty(); }
+        }
+        //[UnityEngine.Serialization.FormerlySerializedAs("m_fontColor")] // Required for backwards compatibility with pre-Unity 4.6 releases.
+        [SerializeField]
+        protected Color32 m_fontColor32 = Color.white;
+        [SerializeField]
+        protected Color m_fontColor = Color.white;
+        protected static Color32 s_colorWhite = new Color32(255, 255, 255, 255);
+        protected Color32 m_underlineColor = s_colorWhite;
+        protected Color32 m_strikethroughColor = s_colorWhite;
+        protected Color32 m_highlightColor = s_colorWhite;
+        protected Vector4 m_highlightPadding = Vector4.zero;
+        
+
+        /// <summary>
+        /// Sets the vertex color alpha value.
+        /// </summary>
+        public float alpha
+        {
+            get { return m_fontColor.a; }
+            set { if (m_fontColor.a == value) return; m_fontColor.a = value; m_havePropertiesChanged = true; SetVerticesDirty(); }
+        }
+
+
+        /// <summary>
+        /// Determines if Vertex Color Gradient should be used
+        /// </summary>
+        /// <value><c>true</c> if enable vertex gradient; otherwise, <c>false</c>.</value>
+        public bool enableVertexGradient
+        {
+            get { return m_enableVertexGradient; }
+            set { if (m_enableVertexGradient == value) return; m_havePropertiesChanged = true; m_enableVertexGradient = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_enableVertexGradient;
+
+        [SerializeField]
+        protected ColorMode m_colorMode = ColorMode.FourCornersGradient;
+        
+        /// <summary>
+        /// Sets the vertex colors for each of the 4 vertices of the character quads.
+        /// </summary>
+        /// <value>The color gradient.</value>
+        public VertexGradient colorGradient
+        {
+            get { return m_fontColorGradient; }
+            set { m_havePropertiesChanged = true; m_fontColorGradient = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected VertexGradient m_fontColorGradient = new VertexGradient(Color.white);
+
+
+        /// <summary>
+        /// Set the vertex colors of the 4 vertices of each character quads.
+        /// </summary>
+        public TMP_ColorGradient colorGradientPreset
+        {
+            get { return m_fontColorGradientPreset; }
+            set { m_havePropertiesChanged = true; m_fontColorGradientPreset = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected TMP_ColorGradient m_fontColorGradientPreset;
+
+
+        /// <summary>
+        /// Default Sprite Asset used by the text object.
+        /// </summary>
+        public TMP_SpriteAsset spriteAsset
+        {
+            get { return m_spriteAsset; }
+            set { m_spriteAsset = value; m_havePropertiesChanged = true; m_isInputParsingRequired = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected TMP_SpriteAsset m_spriteAsset;
+
+
+        /// <summary>
+        /// Determines whether or not the sprite color is multiplies by the vertex color of the text.
+        /// </summary>
+        public bool tintAllSprites
+        {
+            get { return m_tintAllSprites; }
+            set { if (m_tintAllSprites == value) return; m_tintAllSprites = value; m_havePropertiesChanged = true; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_tintAllSprites;
+        protected bool m_tintSprite;
+        protected Color32 m_spriteColor;
+
+
+        /// <summary>
+        /// This overrides the color tags forcing the vertex colors to be the default font color.
+        /// </summary>
+        public bool overrideColorTags
+        {
+            get { return m_overrideHtmlColors; }
+            set { if (m_overrideHtmlColors == value) return; m_havePropertiesChanged = true; m_overrideHtmlColors = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_overrideHtmlColors = false;
+
+
+        /// <summary>
+        /// Sets the color of the _FaceColor property of the assigned material. Changing face color will result in an instance of the material.
+        /// </summary>
+        public Color32 faceColor
+        {
+            get
+            {
+                if (m_sharedMaterial == null) return m_faceColor;
+
+                m_faceColor = m_sharedMaterial.GetColor(ShaderUtilities.ID_FaceColor);
+                return m_faceColor;
+            }
+
+            set { if (m_faceColor.Compare(value)) return; SetFaceColor(value); m_havePropertiesChanged = true; m_faceColor = value; SetVerticesDirty(); SetMaterialDirty(); }
+        }
+        [SerializeField]
+        protected Color32 m_faceColor = Color.white;
+
+
+        /// <summary>
+        /// Sets the color of the _OutlineColor property of the assigned material. Changing outline color will result in an instance of the material.
+        /// </summary>
+        public Color32 outlineColor
+        {
+            get
+            {
+                if (m_sharedMaterial == null) return m_outlineColor;
+
+                m_outlineColor = m_sharedMaterial.GetColor(ShaderUtilities.ID_OutlineColor);
+                return m_outlineColor;
+            }
+
+            set { if (m_outlineColor.Compare(value)) return; SetOutlineColor(value); m_havePropertiesChanged = true; m_outlineColor = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected Color32 m_outlineColor = Color.black;
+
+
+        /// <summary>
+        /// Sets the thickness of the outline of the font. Setting this value will result in an instance of the material.
+        /// </summary>
+        public float outlineWidth
+        {
+            get
+            {
+                if (m_sharedMaterial == null) return m_outlineWidth;
+
+                m_outlineWidth = m_sharedMaterial.GetFloat(ShaderUtilities.ID_OutlineWidth);
+                return m_outlineWidth;
+            }
+            set { if (m_outlineWidth == value) return; SetOutlineThickness(value); m_havePropertiesChanged = true; m_outlineWidth = value; SetVerticesDirty(); }
+        }
+        protected float m_outlineWidth = 0.0f;
+
+
+        /// <summary>
+        /// The point size of the font.
+        /// </summary>
+        public float fontSize
+        {
+            get { return m_fontSize; }
+            set { if (m_fontSize == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_fontSize = value; if (!m_enableAutoSizing) m_fontSizeBase = m_fontSize; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_fontSize = 36; // Font Size
+        protected float m_currentFontSize; // Temporary Font Size affected by tags
+        [SerializeField]
+        protected float m_fontSizeBase = 36;
+        protected TMP_RichTextTagStack<float> m_sizeStack = new TMP_RichTextTagStack<float>(16);
+
+
+        /// <summary>
+        /// The scale of the current text.
+        /// </summary>
+        public float fontScale
+        {
+            get { return m_fontScale; }
+        }
+
+
+        /// <summary>
+        /// Control the weight of the font if an alternative font asset is assigned for the given weight in the font asset editor.
+        /// </summary>
+        public FontWeight fontWeight
+        {
+            get { return m_fontWeight; }
+            set { if (m_fontWeight == value) return; m_fontWeight = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected FontWeight m_fontWeight = FontWeight.Regular;
+        protected FontWeight m_FontWeightInternal = FontWeight.Regular;
+        protected TMP_RichTextTagStack<FontWeight> m_FontWeightStack = new TMP_RichTextTagStack<FontWeight>(8);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float pixelsPerUnit
+        {
+            get
+            {
+                var localCanvas = canvas;
+                if (!localCanvas)
+                    return 1;
+                // For dynamic fonts, ensure we use one pixel per pixel on the screen.
+                if (!font)
+                    return localCanvas.scaleFactor;
+                // For non-dynamic fonts, calculate pixels per unit based on specified font size relative to font object's own font size.
+                if (m_currentFontAsset == null || m_currentFontAsset.faceInfo.pointSize <= 0 || m_fontSize <= 0)
+                    return 1;
+                return m_fontSize / m_currentFontAsset.faceInfo.pointSize;
+            }
+        }
+
+
+        /// <summary>
+        /// Enable text auto-sizing
+        /// </summary>
+        public bool enableAutoSizing
+        {
+            get { return m_enableAutoSizing; }
+            set { if (m_enableAutoSizing == value) return; m_enableAutoSizing = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_enableAutoSizing;
+        protected float m_maxFontSize; // Used in conjunction with auto-sizing
+        protected float m_minFontSize; // Used in conjunction with auto-sizing
+
+
+        /// <summary>
+        /// Minimum point size of the font when text auto-sizing is enabled.
+        /// </summary>
+        public float fontSizeMin
+        {
+            get { return m_fontSizeMin; }
+            set { if (m_fontSizeMin == value) return; m_fontSizeMin = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_fontSizeMin = 0; // Text Auto Sizing Min Font Size.
+
+
+        /// <summary>
+        /// Maximum point size of the font when text auto-sizing is enabled.
+        /// </summary>
+        public float fontSizeMax
+        {
+            get { return m_fontSizeMax; }
+            set { if (m_fontSizeMax == value) return; m_fontSizeMax = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_fontSizeMax = 0; // Text Auto Sizing Max Font Size.
+
+
+        /// <summary>
+        /// The style of the text
+        /// </summary>
+        public FontStyles fontStyle
+        {
+            get { return m_fontStyle; }
+            set { if (m_fontStyle == value) return; m_fontStyle = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected FontStyles m_fontStyle = FontStyles.Normal;
+        protected FontStyles m_FontStyleInternal = FontStyles.Normal;
+        protected TMP_FontStyleStack m_fontStyleStack;
+
+        /// <summary>
+        /// Property used in conjunction with padding calculation for the geometry.
+        /// </summary>
+        public bool isUsingBold { get { return m_isUsingBold; } }
+        protected bool m_isUsingBold = false; // Used to ensure GetPadding & Ratios take into consideration bold characters.
+
+
+        /// <summary>
+        /// Text alignment options
+        /// </summary>
+        public TextAlignmentOptions alignment
+        {
+            get { return m_textAlignment; }
+            set { if (m_textAlignment == value) return; m_havePropertiesChanged = true; m_textAlignment = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        [UnityEngine.Serialization.FormerlySerializedAs("m_lineJustification")]
+        protected TextAlignmentOptions m_textAlignment = TextAlignmentOptions.TopLeft;
+        protected TextAlignmentOptions m_lineJustification;
+        protected TMP_RichTextTagStack<TextAlignmentOptions> m_lineJustificationStack = new TMP_RichTextTagStack<TextAlignmentOptions>(new TextAlignmentOptions[16]);
+        protected Vector3[] m_textContainerLocalCorners = new Vector3[4];
+
+        /// <summary>
+        /// Use the extents of the text geometry for alignment instead of font metrics.
+        /// </summary>
+        //public bool alignByGeometry
+        //{
+        //    get { return m_alignByGeometry; }
+        //    set { if (m_alignByGeometry == value) return; m_havePropertiesChanged = true; m_alignByGeometry = value; SetVerticesDirty(); }
+        //}
+        //[SerializeField]
+        //protected bool m_alignByGeometry;
+
+
+        /// <summary>
+        /// The amount of additional spacing between characters.
+        /// </summary>
+        public float characterSpacing
+        {
+            get { return m_characterSpacing; }
+            set { if (m_characterSpacing == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true;  m_characterSpacing = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_characterSpacing = 0;
+        protected float m_cSpacing = 0;
+        protected float m_monoSpacing = 0;
+
+        /// <summary>
+        /// The amount of additional spacing between words.
+        /// </summary>
+        public float wordSpacing
+        {
+            get { return m_wordSpacing; }
+            set { if (m_wordSpacing == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_wordSpacing = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_wordSpacing = 0;
+
+        /// <summary>
+        /// The amount of additional spacing to add between each lines of text.
+        /// </summary>
+        public float lineSpacing
+        {
+            get { return m_lineSpacing; }
+            set { if (m_lineSpacing == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_lineSpacing = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_lineSpacing = 0;
+        protected float m_lineSpacingDelta = 0; // Used with Text Auto Sizing feature
+        protected float m_lineHeight = TMP_Math.FLOAT_UNSET; // Used with the <line-height=xx.x> tag.
+
+
+        /// <summary>
+        /// The amount of potential line spacing adjustment before text auto sizing kicks in.
+        /// </summary>
+        public float lineSpacingAdjustment
+        {
+            get { return m_lineSpacingMax; }
+            set { if (m_lineSpacingMax == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_lineSpacingMax = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_lineSpacingMax = 0; // Text Auto Sizing Max Line spacing reduction.
+        //protected bool m_forceLineBreak;
+
+        /// <summary>
+        /// The amount of additional spacing to add between each lines of text.
+        /// </summary>
+        public float paragraphSpacing
+        {
+            get { return m_paragraphSpacing; }
+            set { if (m_paragraphSpacing == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_paragraphSpacing = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_paragraphSpacing = 0;
+
+
+        /// <summary>
+        /// Percentage the width of characters can be adjusted before text auto-sizing begins to reduce the point size.
+        /// </summary>
+        public float characterWidthAdjustment
+        {
+            get { return m_charWidthMaxAdj; }
+            set { if (m_charWidthMaxAdj == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_charWidthMaxAdj = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_charWidthMaxAdj = 0f; // Text Auto Sizing Max Character Width reduction.
+        protected float m_charWidthAdjDelta = 0;
+
+
+        /// <summary>
+        /// Controls whether or not word wrapping is applied. When disabled, the text will be displayed on a single line.
+        /// </summary>
+        public bool enableWordWrapping
+        {
+            get { return m_enableWordWrapping; }
+            set { if (m_enableWordWrapping == value) return; m_havePropertiesChanged = true; m_isInputParsingRequired = true; m_isCalculateSizeRequired = true; m_enableWordWrapping = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_enableWordWrapping = false;
+        protected bool m_isCharacterWrappingEnabled = false;
+        protected bool m_isNonBreakingSpace = false;
+        protected bool m_isIgnoringAlignment;
+
+        /// <summary>
+        /// Controls the blending between using character and word spacing to fill-in the space for justified text.
+        /// </summary>
+        public float wordWrappingRatios
+        {
+            get { return m_wordWrappingRatios; }
+            set { if (m_wordWrappingRatios == value) return; m_wordWrappingRatios = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected float m_wordWrappingRatios = 0.4f; // Controls word wrapping ratios between word or characters.
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public bool enableAdaptiveJustification
+        //{
+        //    get { return m_enableAdaptiveJustification; }
+        //    set { if (m_enableAdaptiveJustification == value) return;  m_enableAdaptiveJustification = value;  m_havePropertiesChanged = true;  m_isCalculateSizeRequired = true;  SetVerticesDirty(); SetLayoutDirty(); }
+        //}
+        //[SerializeField]
+        //protected bool m_enableAdaptiveJustification;
+        //protected float m_adaptiveJustificationThreshold = 10.0f;
+
+
+        /// <summary>
+        /// Controls the Text Overflow Mode
+        /// </summary>
+        public TextOverflowModes overflowMode
+        {
+            get { return m_overflowMode; }
+            set { if (m_overflowMode == value) return; m_overflowMode = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected TextOverflowModes m_overflowMode = TextOverflowModes.Overflow;
+
+
+        /// <summary>
+        /// Indicates if the text exceeds the vertical bounds of its text container.
+        /// </summary>
+        public bool isTextOverflowing
+        {
+            get { if (m_firstOverflowCharacterIndex != -1) return true; return false; }
+        }
+
+
+        /// <summary>
+        /// The first character which exceeds the vertical bounds of its text container.
+        /// </summary>
+        public int firstOverflowCharacterIndex
+        {
+            get { return m_firstOverflowCharacterIndex; }
+        }
+        [SerializeField]
+        protected int m_firstOverflowCharacterIndex = -1;
+
+
+        /// <summary>
+        /// The linked text component used for flowing the text from one text component to another.
+        /// </summary>
+        public TMP_Text linkedTextComponent
+        {
+            get { return m_linkedTextComponent; }
+
+            set
+            {
+                if (m_linkedTextComponent != value)
+                {
+                    // Release previously linked text component.
+                    if (m_linkedTextComponent != null)
+                    {
+                        m_linkedTextComponent.overflowMode = TextOverflowModes.Overflow;
+                        m_linkedTextComponent.linkedTextComponent = null;
+                        m_linkedTextComponent.isLinkedTextComponent = false;
+                    }
+
+                    m_linkedTextComponent = value;
+
+                    if (m_linkedTextComponent != null)
+                        m_linkedTextComponent.isLinkedTextComponent = true;
+                }
+
+                m_havePropertiesChanged = true;
+                m_isCalculateSizeRequired = true;
+                SetVerticesDirty();
+                SetLayoutDirty();
+            }
+        }
+        [SerializeField]
+        protected TMP_Text m_linkedTextComponent;
+
+
+        /// <summary>
+        /// Indicates whether this text component is linked to another.
+        /// </summary>
+        public bool isLinkedTextComponent
+        {
+            get { return m_isLinkedTextComponent; }
+
+            set
+            {
+                m_isLinkedTextComponent = value;
+
+                if (m_isLinkedTextComponent == false)
+                    m_firstVisibleCharacter = 0;
+
+                m_havePropertiesChanged = true;
+                m_isCalculateSizeRequired = true;
+                SetVerticesDirty();
+                SetLayoutDirty();
+            }
+        }
+        [SerializeField]
+        protected bool m_isLinkedTextComponent;
+
+
+        /// <summary>
+        /// Property indicating whether the text is Truncated or using Ellipsis.
+        /// </summary>
+        public bool isTextTruncated { get { return m_isTextTruncated; } }
+        [SerializeField]
+        protected bool m_isTextTruncated;
+
+
+        /// <summary>
+        /// Determines if kerning is enabled or disabled.
+        /// </summary>
+        public bool enableKerning
+        {
+            get { return m_enableKerning; }
+            set { if (m_enableKerning == value) return; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_enableKerning = value; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_enableKerning;
+
+
+        /// <summary>
+        /// Adds extra padding around each character. This may be necessary when the displayed text is very small to prevent clipping.
+        /// </summary>
+        public bool extraPadding
+        {
+            get { return m_enableExtraPadding; }
+            set { if (m_enableExtraPadding == value) return; m_havePropertiesChanged = true; m_enableExtraPadding = value; UpdateMeshPadding(); /* m_isCalculateSizeRequired = true;*/ SetVerticesDirty(); /* SetLayoutDirty();*/ }
+        }
+        [SerializeField]
+        protected bool m_enableExtraPadding = false;
+        [SerializeField]
+        protected bool checkPaddingRequired;
+
+
+        /// <summary>
+        /// Enables or Disables Rich Text Tags
+        /// </summary>
+        public bool richText
+        {
+            get { return m_isRichText; }
+            set { if (m_isRichText == value) return; m_isRichText = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_isRichText = true; // Used to enable or disable Rich Text.
+
+
+        /// <summary>
+        /// Enables or Disables parsing of CTRL characters in input text.
+        /// </summary>
+        public bool parseCtrlCharacters
+        {
+            get { return m_parseCtrlCharacters; }
+            set { if (m_parseCtrlCharacters == value) return; m_parseCtrlCharacters = value; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_parseCtrlCharacters = true;
+
+
+        /// <summary>
+        /// Sets the RenderQueue along with Ztest to force the text to be drawn last and on top of scene elements.
+        /// </summary>
+        public bool isOverlay
+        {
+            get { return m_isOverlay; }
+            set { if (m_isOverlay == value) return; m_isOverlay = value; SetShaderDepth(); m_havePropertiesChanged = true; SetVerticesDirty(); }
+        }
+        protected bool m_isOverlay = false;
+
+
+        /// <summary>
+        /// Sets Perspective Correction to Zero for Orthographic Camera mode & 0.875f for Perspective Camera mode.
+        /// </summary>
+        public bool isOrthographic
+        {
+            get { return m_isOrthographic; }
+            set { if (m_isOrthographic == value) return; m_havePropertiesChanged = true; m_isOrthographic = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_isOrthographic = false;
+
+
+        /// <summary>
+        /// Sets the culling on the shaders. Note changing this value will result in an instance of the material.
+        /// </summary>
+        public bool enableCulling
+        {
+            get { return m_isCullingEnabled; }
+            set { if (m_isCullingEnabled == value) return; m_isCullingEnabled = value; SetCulling(); m_havePropertiesChanged = true; }
+        }
+        [SerializeField]
+        protected bool m_isCullingEnabled = false;
+
+        /// <summary>
+        /// Controls whether or not the text object will be culled when using a 2D Rect Mask.
+        /// </summary>
+        public bool ignoreRectMaskCulling
+        {
+            get { return m_ignoreRectMaskCulling; }
+            set { if (m_ignoreRectMaskCulling == value) return; m_ignoreRectMaskCulling = value; m_havePropertiesChanged = true; }
+        }
+        [SerializeField]
+        protected bool m_ignoreRectMaskCulling;
+
+
+        /// <summary>
+        /// Forces objects that are not visible to get refreshed.
+        /// </summary>
+        public bool ignoreVisibility
+        {
+            get { return m_ignoreCulling; }
+            set { if (m_ignoreCulling == value) return; m_havePropertiesChanged = true; m_ignoreCulling = value; }
+        }
+        [SerializeField]
+        protected bool m_ignoreCulling = true; // Not implemented yet.
+
+
+        /// <summary>
+        /// Controls how the face and outline textures will be applied to the text object.
+        /// </summary>
+        public TextureMappingOptions horizontalMapping
+        {
+            get { return m_horizontalMapping; }
+            set { if (m_horizontalMapping == value) return; m_havePropertiesChanged = true; m_horizontalMapping = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected TextureMappingOptions m_horizontalMapping = TextureMappingOptions.Character;
+
+
+        /// <summary>
+        /// Controls how the face and outline textures will be applied to the text object.
+        /// </summary>
+        public TextureMappingOptions verticalMapping
+        {
+            get { return m_verticalMapping; }
+            set { if (m_verticalMapping == value) return; m_havePropertiesChanged = true; m_verticalMapping = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected TextureMappingOptions m_verticalMapping = TextureMappingOptions.Character;
+
+
+        /// <summary>
+        /// Controls the UV Offset for the various texture mapping mode on the text object.
+        /// </summary>
+        //public Vector2 mappingUvOffset
+        //{
+        //    get { return m_uvOffset; }
+        //    set { if (m_uvOffset == value) return; m_havePropertiesChanged = true; m_uvOffset = value; SetVerticesDirty(); }
+        //}
+        //[SerializeField]
+        //protected Vector2 m_uvOffset = Vector2.zero; // Used to offset UV on Texturing
+
+
+        /// <summary>
+        /// Controls the horizontal offset of the UV of the texture mapping mode for each line of the text object.
+        /// </summary>
+        public float mappingUvLineOffset
+        {
+            get { return m_uvLineOffset; }
+            set { if (m_uvLineOffset == value) return; m_havePropertiesChanged = true; m_uvLineOffset = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected float m_uvLineOffset = 0.0f; // Used for UV line offset per line
+
+
+        /// <summary>
+        /// Determines if the Mesh will be rendered.
+        /// </summary>
+        public TextRenderFlags renderMode
+        {
+            get { return m_renderMode; }
+            set { if (m_renderMode == value) return; m_renderMode = value; m_havePropertiesChanged = true; }
+        }
+        protected TextRenderFlags m_renderMode = TextRenderFlags.Render;
+
+
+        /// <summary>
+        /// Determines the sorting order of the geometry of the text object.
+        /// </summary>
+        public VertexSortingOrder geometrySortingOrder
+        {
+            get { return m_geometrySortingOrder; }
+
+            set { m_geometrySortingOrder = value; m_havePropertiesChanged = true; SetVerticesDirty(); }
+
+        }
+        [SerializeField]
+        protected VertexSortingOrder m_geometrySortingOrder;
+
+        /// <summary>
+        /// Determines if the data structures allocated to contain the geometry of the text object will be reduced in size if the number of characters required to display the text is reduced by more than 256 characters.
+        /// This reduction has the benefit of reducing the amount of vertex data being submitted to the graphic device but results in GC when it occurs. 
+        /// </summary>
+        public bool vertexBufferAutoSizeReduction
+        {
+            get { return m_VertexBufferAutoSizeReduction; }
+            set { m_VertexBufferAutoSizeReduction = value; m_havePropertiesChanged = true; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_VertexBufferAutoSizeReduction = true;
+
+        /// <summary>
+        /// The first character which should be made visible in conjunction with the Text Overflow Linked mode.
+        /// </summary>
+        public int firstVisibleCharacter
+        {
+            get { return m_firstVisibleCharacter; }
+            set { if (m_firstVisibleCharacter == value) return; m_havePropertiesChanged = true; m_firstVisibleCharacter = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected int m_firstVisibleCharacter;
+
+        /// <summary>
+        /// Allows to control how many characters are visible from the input.
+        /// </summary>
+        public int maxVisibleCharacters
+        {
+            get { return m_maxVisibleCharacters; }
+            set { if (m_maxVisibleCharacters == value) return; m_havePropertiesChanged = true; m_maxVisibleCharacters = value; SetVerticesDirty(); }
+        }
+        protected int m_maxVisibleCharacters = 99999;
+
+
+        /// <summary>
+        /// Allows to control how many words are visible from the input.
+        /// </summary>
+        public int maxVisibleWords
+        {
+            get { return m_maxVisibleWords; }
+            set { if (m_maxVisibleWords == value) return; m_havePropertiesChanged = true; m_maxVisibleWords = value; SetVerticesDirty(); }
+        }
+        protected int m_maxVisibleWords = 99999;
+
+
+        /// <summary>
+        /// Allows control over how many lines of text are displayed.
+        /// </summary>
+        public int maxVisibleLines
+        {
+            get { return m_maxVisibleLines; }
+            set { if (m_maxVisibleLines == value) return; m_havePropertiesChanged = true; m_isInputParsingRequired = true; m_maxVisibleLines = value; SetVerticesDirty(); }
+        }
+        protected int m_maxVisibleLines = 99999;
+
+
+        /// <summary>
+        /// Determines if the text's vertical alignment will be adjusted based on visible descender of the text.
+        /// </summary>
+        public bool useMaxVisibleDescender
+        {
+            get { return m_useMaxVisibleDescender; }
+            set { if (m_useMaxVisibleDescender == value) return; m_havePropertiesChanged = true; m_isInputParsingRequired = true; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected bool m_useMaxVisibleDescender = true;
+
+
+        /// <summary>
+        /// Controls which page of text is shown
+        /// </summary>
+        public int pageToDisplay
+        {
+            get { return m_pageToDisplay; }
+            set { if (m_pageToDisplay == value) return; m_havePropertiesChanged = true; m_pageToDisplay = value; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected int m_pageToDisplay = 1;
+        protected bool m_isNewPage = false;
+
+        /// <summary>
+        /// The margins of the text object.
+        /// </summary>
+        public virtual Vector4 margin
+        {
+            get { return m_margin; }
+            set { if (m_margin == value) return; m_margin = value; ComputeMarginSize(); m_havePropertiesChanged = true; SetVerticesDirty(); }
+        }
+        [SerializeField]
+        protected Vector4 m_margin = new Vector4(0, 0, 0, 0);
+        protected float m_marginLeft;
+        protected float m_marginRight;
+        protected float m_marginWidth;  // Width of the RectTransform minus left and right margins.
+        protected float m_marginHeight; // Height of the RectTransform minus top and bottom margins.
+        protected float m_width = -1;
+
+
+        /// <summary>
+        /// Returns data about the text object which includes information about each character, word, line, link, etc.
+        /// </summary>
+        public TMP_TextInfo textInfo
+        {
+            get { return m_textInfo; }
+        }
+        [SerializeField]
+        protected TMP_TextInfo m_textInfo; // Class which holds information about the Text object such as characters, lines, mesh data as well as metrics. 
+
+        /// <summary>
+        /// Property tracking if any of the text properties have changed. Flag is set before the text is regenerated.
+        /// </summary>
+        public bool havePropertiesChanged
+        {
+            get { return m_havePropertiesChanged; }
+            set { if (m_havePropertiesChanged == value) return; m_havePropertiesChanged = value; m_isInputParsingRequired = true; SetAllDirty(); }
+        }
+        //[SerializeField]
+        protected bool m_havePropertiesChanged;  // Used to track when properties of the text object have changed.
+
+
+        /// <summary>
+        /// Property to handle legacy animation component.
+        /// </summary>
+        public bool isUsingLegacyAnimationComponent
+        {
+            get { return m_isUsingLegacyAnimationComponent; }
+            set { m_isUsingLegacyAnimationComponent = value; }
+        }
+        [SerializeField]
+        protected bool m_isUsingLegacyAnimationComponent;
+
+
+        /// <summary>
+        /// Returns are reference to the Transform
+        /// </summary>
+        public new Transform transform
+        {
+            get
+            {
+                if (m_transform == null)
+                    m_transform = GetComponent<Transform>();
+                return m_transform;
+            }
+        }
+        protected Transform m_transform;
+
+
+        /// <summary>
+        /// Returns are reference to the RectTransform
+        /// </summary>
+        public new RectTransform rectTransform
+        {
+            get
+            {
+                if (m_rectTransform == null)
+                    m_rectTransform = GetComponent<RectTransform>();
+                return m_rectTransform;
+            }
+        }
+        protected RectTransform m_rectTransform;
+
+
+        /// <summary>
+        /// Enables control over setting the size of the text container to match the text object.
+        /// </summary>
+        public virtual bool autoSizeTextContainer
+        {
+            get;
+            set;
+        }
+        protected bool m_autoSizeTextContainer;
+
+
+        /// <summary>
+        /// The mesh used by the font asset and material assigned to the text object.
+        /// </summary>
+        public virtual Mesh mesh
+        {
+            get { return m_mesh; }
+        }
+        protected Mesh m_mesh;
+
+
+        /// <summary>
+        /// Determines if the geometry of the characters will be quads or volumetric (cubes).
+        /// </summary>
+        public bool isVolumetricText
+        {
+            get { return m_isVolumetricText; }
+            set { if (m_isVolumetricText == value) return; m_havePropertiesChanged = value; m_textInfo.ResetVertexLayout(value); m_isInputParsingRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
+        }
+        [SerializeField]
+        protected bool m_isVolumetricText;
+
+        /// <summary>
+        /// Returns the bounds of the mesh of the text object in world space.
+        /// </summary>
+        public Bounds bounds
+        {
+            get
+            {
+                if (m_mesh == null) return new Bounds();
+
+                return GetCompoundBounds();
+            }
+        }
+
+        /// <summary>
+        /// Returns the bounds of the text of the text object.
+        /// </summary>
+        public Bounds textBounds
+        {
+            get
+            {
+                if (m_textInfo == null) return new Bounds();
+
+                return GetTextBounds();
+            }
+        }
+
+        // *** Unity Event Handling ***
+
+        //[Serializable]
+        //public class TextChangedEvent : UnityEvent { }
+
+        ///// <summary>
+        ///// Event delegate triggered when text has changed and been rendered.
+        ///// </summary>
+        //public TextChangedEvent onTextChanged
+        //{
+        //    get { return m_OnTextChanged; }
+        //    set { m_OnTextChanged = value; }
+        //}
+        //[SerializeField]
+        //private TextChangedEvent m_OnTextChanged = new TextChangedEvent();
+
+        //protected void SendOnTextChanged()
+        //{
+        //    if (onTextChanged != null)
+        //        onTextChanged.Invoke();
+        //}
+
+
+        // *** SPECIAL COMPONENTS ***
+
+        /// <summary>
+        /// Component used to control wrapping of text following some arbitrary shape.
+        /// </summary>
+        //public MarginShaper marginShaper
+        //{
+        //    get
+        //    {
+        //        if (m_marginShaper == null) m_marginShaper = GetComponent<MarginShaper>();
+
+        //        return m_marginShaper;
+        //    }
+        //}
+        //[SerializeField]
+        //protected MarginShaper m_marginShaper;
+
+
+        /// <summary>
+        /// Component used to control and animate sprites in the text object.
+        /// </summary>
+        protected TMP_SpriteAnimator spriteAnimator
+        {
+            get
+            {
+                if (m_spriteAnimator == null)
+                {
+                    m_spriteAnimator = GetComponent<TMP_SpriteAnimator>();
+                    if (m_spriteAnimator == null) m_spriteAnimator = gameObject.AddComponent<TMP_SpriteAnimator>();
+                }
+
+                return m_spriteAnimator;
+            }
+
+        }
+        [SerializeField]
+        protected TMP_SpriteAnimator m_spriteAnimator;
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public TMP_TextShaper textShaper
+        //{
+        //    get
+        //    {
+        //        if (m_textShaper == null)
+        //            m_textShaper = GetComponent<TMP_TextShaper>();
+
+        //        return m_textShaper;
+        //    }
+        //}
+        //[SerializeField]
+        //protected TMP_TextShaper m_textShaper;
+
+        // *** PROPERTIES RELATED TO UNITY LAYOUT SYSTEM ***
+        /// <summary>
+        /// 
+        /// </summary>
+        public float flexibleHeight { get { return m_flexibleHeight; } }
+        protected float m_flexibleHeight = -1f;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float flexibleWidth { get { return m_flexibleWidth; } }
+        protected float m_flexibleWidth = -1f;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float minWidth { get { return m_minWidth; } }
+        protected float m_minWidth;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float minHeight { get { return m_minHeight; } }
+        protected float m_minHeight;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float maxWidth { get { return m_maxWidth; } }
+        protected float m_maxWidth;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public float maxHeight { get { return m_maxHeight; } }
+        protected float m_maxHeight;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected LayoutElement layoutElement
+        {
+            get
+            {
+                if (m_LayoutElement == null)
+                {
+                    m_LayoutElement = GetComponent<LayoutElement>();
+                }
+
+                return m_LayoutElement;
+            }
+        }
+        protected LayoutElement m_LayoutElement;
+
+        /// <summary>
+        /// Computed preferred width of the text object.
+        /// </summary>
+        public virtual float preferredWidth { get { if (!m_isPreferredWidthDirty) return m_preferredWidth; m_preferredWidth = GetPreferredWidth(); return m_preferredWidth; } }
+        protected float m_preferredWidth;
+        protected float m_renderedWidth;
+        protected bool m_isPreferredWidthDirty;
+
+        /// <summary>
+        /// Computed preferred height of the text object.
+        /// </summary>
+        public virtual float preferredHeight { get { if (!m_isPreferredHeightDirty) return m_preferredHeight; m_preferredHeight = GetPreferredHeight(); return m_preferredHeight; } }
+        protected float m_preferredHeight;
+        protected float m_renderedHeight;
+        protected bool m_isPreferredHeightDirty;
+
+        protected bool m_isCalculatingPreferredValues;
+        private int m_recursiveCount;
+
+        /// <summary>
+        /// Compute the rendered width of the text object.
+        /// </summary>
+        public virtual float renderedWidth { get { return GetRenderedWidth(); } }
+
+
+        /// <summary>
+        /// Compute the rendered height of the text object.
+        /// </summary>
+        public virtual float renderedHeight { get { return GetRenderedHeight(); } }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public int layoutPriority { get { return m_layoutPriority; } }
+        protected int m_layoutPriority = 0;
+
+        protected bool m_isCalculateSizeRequired = false;
+        protected bool m_isLayoutDirty;
+
+        protected bool m_verticesAlreadyDirty;
+        protected bool m_layoutAlreadyDirty;
+
+        protected bool m_isAwake;
+        internal bool m_isWaitingOnResourceLoad;
+
+        internal bool m_isInputParsingRequired = false; // Used to determine if the input text needs to be re-parsed.
+
+        // Protected Fields
+        internal enum TextInputSources { Text = 0, SetText = 1, SetCharArray = 2, String = 3 };
+        //[SerializeField]
+        internal TextInputSources m_inputSource;
+        protected string old_text; // Used by SetText to determine if the text has changed.
+        //protected float old_arg0, old_arg1, old_arg2; // Used by SetText to determine if the args have changed.
+
+
+        protected float m_fontScale; // Scaling of the font based on Atlas true Font Size and Rendered Font Size.  
+        protected float m_fontScaleMultiplier; // Used for handling of superscript and subscript.
+
+        protected char[] m_htmlTag = new char[128]; // Maximum length of rich text tag. This is preallocated to avoid GC.
+        protected RichTextTagAttribute[] m_xmlAttribute = new RichTextTagAttribute[8];
+
+        protected float[] m_attributeParameterValues = new float[16];
+
+        protected float tag_LineIndent = 0;
+        protected float tag_Indent = 0;
+        protected TMP_RichTextTagStack<float> m_indentStack = new TMP_RichTextTagStack<float>(new float[16]);
+        protected bool tag_NoParsing;
+        //protected TMP_LinkInfo tag_LinkInfo = new TMP_LinkInfo();
+
+        protected bool m_isParsingText;
+        protected Matrix4x4 m_FXMatrix;
+        protected bool m_isFXMatrixSet;
+
+
+        protected UnicodeChar[] m_TextParsingBuffer; // This array holds the characters to be processed by GenerateMesh();
+
+        protected struct UnicodeChar
+        {
+            public int unicode;
+            public int stringIndex;
+            public int length;
+        }
+        //protected UnicodeChar[] m_InternalParsingBuffer;
+
+        private TMP_CharacterInfo[] m_internalCharacterInfo; // Used by functions to calculate preferred values.
+        protected char[] m_input_CharArray = new char[256]; // This array hold the characters from the SetText();
+        private int m_charArray_Length = 0;
+        protected int m_totalCharacterCount;
+
+        // Structures used to save the state of the text layout in conjunction with line breaking / word wrapping.
+        protected WordWrapState m_SavedWordWrapState = new WordWrapState();
+        protected WordWrapState m_SavedLineState = new WordWrapState();
+		//protected WordWrapState m_SavedAlignment = new WordWrapState ();
+
+
+        // Fields whose state is saved in conjunction with text parsing and word wrapping.
+        protected int m_characterCount;
+        //protected int m_visibleCharacterCount;
+        //protected int m_visibleSpriteCount;
+        protected int m_firstCharacterOfLine;
+        protected int m_firstVisibleCharacterOfLine;
+        protected int m_lastCharacterOfLine;
+        protected int m_lastVisibleCharacterOfLine;
+        protected int m_lineNumber;
+        protected int m_lineVisibleCharacterCount;
+        protected int m_pageNumber;
+        protected float m_maxAscender;
+        protected float m_maxCapHeight;
+        protected float m_maxDescender;
+        protected float m_maxLineAscender;
+        protected float m_maxLineDescender;
+        protected float m_startOfLineAscender;
+        //protected float m_maxFontScale;
+        protected float m_lineOffset;
+        protected Extents m_meshExtents;
+
+
+        // Fields used for vertex colors
+        protected Color32 m_htmlColor = new Color(255, 255, 255, 128);
+        protected TMP_RichTextTagStack<Color32> m_colorStack = new TMP_RichTextTagStack<Color32>(new Color32[16]);
+        protected TMP_RichTextTagStack<Color32> m_underlineColorStack = new TMP_RichTextTagStack<Color32>(new Color32[16]);
+        protected TMP_RichTextTagStack<Color32> m_strikethroughColorStack = new TMP_RichTextTagStack<Color32>(new Color32[16]);
+        protected TMP_RichTextTagStack<Color32> m_highlightColorStack = new TMP_RichTextTagStack<Color32>(new Color32[16]);
+
+        protected TMP_ColorGradient m_colorGradientPreset;
+        protected TMP_RichTextTagStack<TMP_ColorGradient> m_colorGradientStack = new TMP_RichTextTagStack<TMP_ColorGradient>(new TMP_ColorGradient[16]);
+
+        protected float m_tabSpacing = 0;
+        protected float m_spacing = 0;
+
+
+        //protected bool IsRectTransformDriven;
+
+
+        // STYLE TAGS
+        protected TMP_RichTextTagStack<int> m_styleStack = new TMP_RichTextTagStack<int>(new int[16]);
+        protected TMP_RichTextTagStack<int> m_actionStack = new TMP_RichTextTagStack<int>(new int[16]);
+
+        protected float m_padding = 0;
+        protected float m_baselineOffset; // Used for superscript and subscript.
+        protected TMP_RichTextTagStack<float> m_baselineOffsetStack = new TMP_RichTextTagStack<float>(new float[16]);
+        protected float m_xAdvance; // Tracks x advancement from character to character.
+
+        protected TMP_TextElementType m_textElementType;
+        protected TMP_TextElement m_cached_TextElement; // Glyph / Character information is cached into this variable which is faster than having to fetch from the Dictionary multiple times.
+        protected TMP_Character m_cached_Underline_Character; // Same as above but for the underline character which is used for Underline.
+        protected TMP_Character m_cached_Ellipsis_Character;
+
+        protected TMP_SpriteAsset m_defaultSpriteAsset;
+        protected TMP_SpriteAsset m_currentSpriteAsset;
+        protected int m_spriteCount = 0;
+        protected int m_spriteIndex;
+        protected int m_spriteAnimationID;
+        //protected TMP_XmlTagStack<int> m_spriteAnimationStack = new TMP_XmlTagStack<int>(new int[16]);
+
+
+        /// <summary>
+        /// Method which derived classes need to override to load Font Assets.
+        /// </summary>
+        protected virtual void LoadFontAsset() { }
+
+        /// <summary>
+        /// Function called internally when a new shared material is assigned via the fontSharedMaterial property.
+        /// </summary>
+        /// <param name="mat"></param>
+        protected virtual void SetSharedMaterial(Material mat) { }
+
+        /// <summary>
+        /// Function called internally when a new material is assigned via the fontMaterial property.
+        /// </summary>
+        protected virtual Material GetMaterial(Material mat) { return null; }
+
+        /// <summary>
+        /// Function called internally when assigning a new base material.
+        /// </summary>
+        /// <param name="mat"></param>
+        protected virtual void SetFontBaseMaterial(Material mat) { }
+
+        /// <summary>
+        /// Method which returns an array containing the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected virtual Material[] GetSharedMaterials() { return null; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected virtual void SetSharedMaterials(Material[] materials) { }
+
+        /// <summary>
+        /// Method returning instances of the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected virtual Material[] GetMaterials(Material[] mats) { return null; }
+
+        /// <summary>
+        /// Method to set the materials of the text and sub text objects.
+        /// </summary>
+        /// <param name="mats"></param>
+        //protected virtual void SetMaterials (Material[] mats) { }
+
+        /// <summary>
+        /// Function used to create an instance of the material
+        /// </summary>
+        /// <param name="source"></param>
+        /// <returns></returns>
+        protected virtual Material CreateMaterialInstance(Material source)
+        {
+            Material mat = new Material(source);
+            mat.shaderKeywords = source.shaderKeywords;
+            mat.name += " (Instance)";
+
+            return mat;
+        }
+
+        protected void SetVertexColorGradient(TMP_ColorGradient gradient)
+        {
+            if (gradient == null) return;
+
+            m_fontColorGradient.bottomLeft = gradient.bottomLeft;
+            m_fontColorGradient.bottomRight = gradient.bottomRight;
+            m_fontColorGradient.topLeft = gradient.topLeft;
+            m_fontColorGradient.topRight = gradient.topRight;
+
+            SetVerticesDirty();
+        }
+
+        /// <summary>
+        /// Function to control the sorting of the geometry of the text object.
+        /// </summary>
+        protected void SetTextSortingOrder(VertexSortingOrder order)
+        {
+            
+        }
+
+        /// <summary>
+        /// Function to sort the geometry of the text object in accordance to the provided order.
+        /// </summary>
+        /// <param name="order"></param>
+        protected void SetTextSortingOrder(int[] order)
+        {
+
+        }
+
+        /// <summary>
+        /// Function called internally to set the face color of the material. This will results in an instance of the material.
+        /// </summary>
+        /// <param name="color"></param>
+        protected virtual void SetFaceColor(Color32 color) { }
+
+        /// <summary>
+        /// Function called internally to set the outline color of the material. This will results in an instance of the material.
+        /// </summary>
+        /// <param name="color"></param>
+        protected virtual void SetOutlineColor(Color32 color) { }
+
+        /// <summary>
+        /// Function called internally to set the outline thickness property of the material. This will results in an instance of the material.
+        /// </summary>
+        /// <param name="thickness"></param>
+        protected virtual void SetOutlineThickness(float thickness) { }
+
+        /// <summary>
+        /// Set the Render Queue and ZTest mode on the current material
+        /// </summary>
+        protected virtual void SetShaderDepth() { }
+
+        /// <summary>
+        /// Set the culling mode on the material.
+        /// </summary>
+        protected virtual void SetCulling() { }
+
+        /// <summary>
+        /// Get the padding value for the currently assigned material
+        /// </summary>
+        /// <returns></returns>
+        protected virtual float GetPaddingForMaterial() { return 0; }
+
+
+        /// <summary>
+        /// Get the padding value for the given material
+        /// </summary>
+        /// <returns></returns>
+        protected virtual float GetPaddingForMaterial(Material mat) { return 0; }
+
+
+        /// <summary>
+        /// Method to return the local corners of the Text Container or RectTransform.
+        /// </summary>
+        /// <returns></returns>
+        protected virtual Vector3[] GetTextContainerLocalCorners() { return null; }
+
+
+        // PUBLIC FUNCTIONS
+        protected bool m_ignoreActiveState;
+        /// <summary>
+        /// Function to force the regeneration of the text object.
+        /// </summary>
+        public virtual void ForceMeshUpdate() { }
+
+
+        /// <summary>
+        /// Method used for resetting vertex layout when switching to and from Volumetric Text mode.
+        /// </summary>
+        /// <param name="updateMesh"></param>
+        //protected virtual void ResetVertexLayout() { }
+
+
+        /// <summary>
+        /// Function to force the regeneration of the text object.
+        /// </summary>
+        /// <param name="ignoreActiveState">If set to true, the text object will be regenerated regardless of is active state.</param>
+        public virtual void ForceMeshUpdate(bool ignoreActiveState) { }
+
+
+        /// <summary>
+        /// Internal function used by the Text Input Field to populate TMP_TextInfo data. 
+        /// </summary>
+        internal void SetTextInternal(string text)
+        {
+            m_text = text;
+            m_renderMode = TextRenderFlags.DontRender;
+            m_isInputParsingRequired = true;
+            ForceMeshUpdate();
+            m_renderMode = TextRenderFlags.Render;
+        }
+
+        /// <summary>
+        /// Function to force the regeneration of the text object.
+        /// </summary>
+        /// <param name="flags"> Flags to control which portions of the geometry gets uploaded.</param>
+        //public virtual void ForceMeshUpdate(TMP_VertexDataUpdateFlags flags) { }
+
+
+        /// <summary>
+        /// Function to update the geometry of the main and sub text objects.
+        /// </summary>
+        /// <param name="mesh"></param>
+        /// <param name="index"></param>
+        public virtual void UpdateGeometry(Mesh mesh, int index) { }
+
+
+        /// <summary>
+        /// Function to push the updated vertex data into the mesh and renderer.
+        /// </summary>
+        public virtual void UpdateVertexData(TMP_VertexDataUpdateFlags flags) { }
+
+
+        /// <summary>
+        /// Function to push the updated vertex data into the mesh and renderer.
+        /// </summary>
+        public virtual void UpdateVertexData() { }
+
+
+        /// <summary>
+        /// Function to push a new set of vertices to the mesh.
+        /// </summary>
+        /// <param name="vertices"></param>
+        public virtual void SetVertices(Vector3[] vertices) { }
+
+
+        /// <summary>
+        /// Function to be used to force recomputing of character padding when Shader / Material properties have been changed via script.
+        /// </summary>
+        public virtual void UpdateMeshPadding() { }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        //public virtual new void UpdateGeometry() { }
+
+
+        /// <summary>
+        /// Tweens the CanvasRenderer color associated with this Graphic.
+        /// </summary>
+        /// <param name="targetColor">Target color.</param>
+        /// <param name="duration">Tween duration.</param>
+        /// <param name="ignoreTimeScale">Should ignore Time.scale?</param>
+        /// <param name="useAlpha">Should also Tween the alpha channel?</param>
+        public override void CrossFadeColor(Color targetColor, float duration, bool ignoreTimeScale, bool useAlpha)
+        {
+            base.CrossFadeColor(targetColor, duration, ignoreTimeScale, useAlpha);
+            InternalCrossFadeColor(targetColor, duration, ignoreTimeScale, useAlpha);
+        }
+
+
+        /// <summary>
+        /// Tweens the alpha of the CanvasRenderer color associated with this Graphic.
+        /// </summary>
+        /// <param name="alpha">Target alpha.</param>
+        /// <param name="duration">Duration of the tween in seconds.</param>
+        /// <param name="ignoreTimeScale">Should ignore Time.scale?</param>
+        public override void CrossFadeAlpha(float alpha, float duration, bool ignoreTimeScale)
+        {
+            base.CrossFadeAlpha(alpha, duration, ignoreTimeScale);
+            InternalCrossFadeAlpha(alpha, duration, ignoreTimeScale);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="targetColor"></param>
+        /// <param name="duration"></param>
+        /// <param name="ignoreTimeScale"></param>
+        /// <param name="useAlpha"></param>
+        /// <param name="useRGB"></param>
+        protected virtual void InternalCrossFadeColor(Color targetColor, float duration, bool ignoreTimeScale, bool useAlpha) { }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="alpha"></param>
+        /// <param name="duration"></param>
+        /// <param name="ignoreTimeScale"></param>
+        protected virtual void InternalCrossFadeAlpha(float alpha, float duration, bool ignoreTimeScale) { }
+
+
+        /// <summary>
+        /// Method to parse the input text based on its source
+        /// </summary>
+        protected void ParseInputText()
+        {
+            //Debug.Log("Re-parsing Text.");
+            ////Profiler.BeginSample("ParseInputText()");
+
+            m_isInputParsingRequired = false;
+
+            switch (m_inputSource)
+            {
+                case TextInputSources.String:
+                case TextInputSources.Text:
+                    StringToCharArray(m_text, ref m_TextParsingBuffer);
+                    break;
+                case TextInputSources.SetText:
+                    SetTextArrayToCharArray(m_input_CharArray, ref m_TextParsingBuffer);
+                    break;
+                case TextInputSources.SetCharArray:
+                    break;
+            }
+
+            SetArraySizes(m_TextParsingBuffer);
+            ////Profiler.EndSample();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="text"></param>
+        public void SetText(string text)
+        {
+            SetText(text, true);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="text"></param>
+        public void SetText(string text, bool syncTextInputBox)
+        {
+            //if (text == old_text) return;
+
+            //old_text = text;
+
+            m_inputSource = TextInputSources.SetCharArray;
+
+            StringToCharArray(text, ref m_TextParsingBuffer);
+
+            #if UNITY_EDITOR
+            // Set the text in the Text Input Box in the Unity Editor only.
+            // TODO: Could revise to convert to string literal
+            if (syncTextInputBox)
+                m_text = text;
+            #endif
+
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// <para>Formatted string containing a pattern and a value representing the text to be rendered.</para>
+        /// <para>ex. TextMeshPro.SetText ("Number is {0:1}.", 5.56f);</para>
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="text">String containing the pattern."</param>
+        /// <param name="arg0">Value is a float.</param>
+        public void SetText(string text, float arg0)
+        {
+            SetText(text, arg0, 255, 255);
+        }
+
+        /// <summary>
+        /// <para>Formatted string containing a pattern and a value representing the text to be rendered.</para>
+        /// <para>ex. TextMeshPro.SetText ("First number is {0} and second is {1:2}.", 10, 5.756f);</para>
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="text">String containing the pattern."</param>
+        /// <param name="arg0">Value is a float.</param>
+        /// <param name="arg1">Value is a float.</param>
+        public void SetText(string text, float arg0, float arg1)
+        {
+            SetText(text, arg0, arg1, 255);
+        }
+
+        /// <summary>
+        /// <para>Formatted string containing a pattern and a value representing the text to be rendered.</para>
+        /// <para>ex. TextMeshPro.SetText ("A = {0}, B = {1} and C = {2}.", 2, 5, 7);</para>
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="text">String containing the pattern."</param>
+        /// <param name="arg0">Value is a float.</param>
+        /// <param name="arg1">Value is a float.</param>
+        /// <param name="arg2">Value is a float.</param>
+        public void SetText(string text, float arg0, float arg1, float arg2)
+        {
+            int decimalPrecision = 0;
+            int index = 0;
+
+            for (int i = 0; i < text.Length; i++)
+            {
+                char c = text[i];
+
+                if (c == 123) // '{'
+                {
+                    // Check if user is requesting some decimal precision. Format is {0:2}
+                    if (text[i + 2] == 58) // ':'
+                    {
+                        decimalPrecision = text[i + 3] - 48;
+                    }
+
+                    switch (text[i + 1] - 48)
+                    {
+                        case 0: // 1st Arg
+                            AddFloatToCharArray(arg0, ref index, decimalPrecision);
+                            break;
+                        case 1: // 2nd Arg
+                            AddFloatToCharArray(arg1, ref index, decimalPrecision);
+                            break;
+                        case 2: // 3rd Arg
+                            AddFloatToCharArray(arg2, ref index, decimalPrecision);
+                            break;
+                    }
+
+                    if (text[i + 2] == 58)
+                        i += 4;
+                    else
+                        i += 2;
+
+                    continue;
+                }
+                m_input_CharArray[index] = c;
+                index += 1;
+            }
+
+            m_input_CharArray[index] = (char)0;
+            m_charArray_Length = index; // Set the length to where this '0' termination is.
+
+            #if UNITY_EDITOR
+            // Create new string to be displayed in the Input Text Box of the Editor Panel.
+            m_text = new string(m_input_CharArray, 0, index);
+            #endif
+
+            m_inputSource = TextInputSources.SetText;
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Set the text using a StringBuilder.
+        /// </summary>
+        /// <description>
+        /// Using a StringBuilder instead of concatenating strings prevents memory pollution with temporary objects.
+        /// </description>
+        /// <param name="text">StringBuilder with text to display.</param>
+        public void SetText(StringBuilder text)
+        {
+            m_inputSource = TextInputSources.SetCharArray;
+
+            #if UNITY_EDITOR
+            // Set the text in the Text Input Box in the Unity Editor only.
+            m_text = text.ToString();
+            #endif
+
+            StringBuilderToIntArray(text, ref m_TextParsingBuffer);
+
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Character array containing the text to be displayed.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        public void SetCharArray(char[] sourceText)
+        {
+            // Initialize internal character buffer if necessary
+            if (m_TextParsingBuffer == null) m_TextParsingBuffer = new UnicodeChar[8];
+
+            #if UNITY_EDITOR
+            // Create new string to be displayed in the Input Text Box of the Editor Panel.
+            if (sourceText == null || sourceText.Length == 0)
+                m_text = string.Empty;
+            else
+                m_text = new string(sourceText);
+            #endif
+
+            // Clear the Style stack.
+            m_styleStack.Clear();
+
+            int writeIndex = 0;
+
+            for (int i = 0; sourceText != null && i < sourceText.Length; i++)
+            {
+                if (sourceText[i] == 92 && i < sourceText.Length - 1)
+                {
+                    switch ((int)sourceText[i + 1])
+                    {
+                        case 110: // \n LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 10;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 114: // \r LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 13;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 116: // \t Tab
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 9;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                    }
+                }
+
+                // Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                        m_TextParsingBuffer[writeIndex].unicode = 10; ;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref m_TextParsingBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref m_TextParsingBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                m_TextParsingBuffer[writeIndex].unicode = sourceText[i];
+                writeIndex += 1;
+            }
+
+            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+            m_TextParsingBuffer[writeIndex].unicode = 0;
+
+            m_inputSource = TextInputSources.SetCharArray;
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Character array containing the text to be displayed.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        public void SetCharArray(char[] sourceText, int start, int length)
+        {
+            // Initialize internal character buffer if necessary
+            if (m_TextParsingBuffer == null) m_TextParsingBuffer = new UnicodeChar[8];
+
+            #if UNITY_EDITOR
+            // Create new string to be displayed in the Input Text Box of the Editor Panel.
+            if (sourceText == null || sourceText.Length == 0 || length == 0)
+            {
+                m_text = string.Empty;
+                start = 0;
+                length = 0;
+            }
+            else
+            {
+                // TODO: Add potential range check on start + length relative to array size.
+                m_text = new string(sourceText, start, length);
+            }
+            #endif
+
+            // Clear the Style stack.
+            m_styleStack.Clear();
+
+            int writeIndex = 0;
+
+            int i = start;
+            int end = start + length;
+            for (; i < end; i++)
+            {
+                if (sourceText[i] == 92 && i < length - 1)
+                {
+                    switch ((int)sourceText[i + 1])
+                    {
+                        case 110: // \n LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 10;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 114: // \r LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 13;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 116: // \t Tab
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 9;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                    }
+                }
+
+                // Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                        m_TextParsingBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref m_TextParsingBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref m_TextParsingBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                m_TextParsingBuffer[writeIndex].unicode = sourceText[i];
+                writeIndex += 1;
+            }
+
+            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+            m_TextParsingBuffer[writeIndex].unicode = 0;
+
+            m_inputSource = TextInputSources.SetCharArray;
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Character array containing the text to be displayed.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        public void SetCharArray(int[] sourceText, int start, int length)
+        {
+            // Initialize internal character buffer if necessary
+            if (m_TextParsingBuffer == null) m_TextParsingBuffer = new UnicodeChar[8];
+
+            #if UNITY_EDITOR
+            // Create new string to be displayed in the Input Text Box of the Editor Panel.
+            if (sourceText == null || sourceText.Length == 0 || length == 0)
+            {
+                m_text = string.Empty;
+                start = 0;
+                length = 0;
+            }
+            else
+            {
+                m_text = sourceText.IntToString(start, length);
+            }
+            #endif
+
+            // Clear the Style stack.
+            m_styleStack.Clear();
+
+            int writeIndex = 0;
+
+            int end = start + length;
+            for (int i = start; i < end && i < sourceText.Length; i++)
+            {
+                if (sourceText[i] == 92 && i < length - 1)
+                {
+                    switch ((int)sourceText[i + 1])
+                    {
+                        case 110: // \n LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 10;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 114: // \r LineFeed
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 13;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 116: // \t Tab
+                            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                            m_TextParsingBuffer[writeIndex].unicode = 9;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                    }
+                }
+
+                // Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                        m_TextParsingBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref m_TextParsingBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref m_TextParsingBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+                m_TextParsingBuffer[writeIndex].unicode = sourceText[i];
+                writeIndex += 1;
+            }
+
+            if (writeIndex == m_TextParsingBuffer.Length) ResizeInternalArray(ref m_TextParsingBuffer);
+
+            m_TextParsingBuffer[writeIndex].unicode = 0;
+
+            m_inputSource = TextInputSources.SetCharArray;
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            m_isCalculateSizeRequired = true;
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Copies Content of formatted SetText() to charBuffer.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="charBuffer"></param>
+        protected void SetTextArrayToCharArray(char[] sourceText, ref UnicodeChar[] charBuffer)
+        {
+            //Debug.Log("SetText Array to Char called.");
+            if (sourceText == null || m_charArray_Length == 0)
+                return;
+
+            if (charBuffer == null) charBuffer = new UnicodeChar[8];
+
+            // Clear the Style stack.
+            m_styleStack.Clear();
+
+            int writeIndex = 0;
+
+            for (int i = 0; i < m_charArray_Length; i++)
+            {
+                // Handle UTF-32 in the input text (string).
+                if (char.IsHighSurrogate(sourceText[i]) && char.IsLowSurrogate(sourceText[i + 1]))
+                {
+                    if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                    charBuffer[writeIndex].unicode = char.ConvertToUtf32(sourceText[i], sourceText[i + 1]);
+                    i += 1;
+                    writeIndex += 1;
+                    continue;
+                }
+
+                // Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref charBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = sourceText[i];
+                writeIndex += 1;
+            }
+
+            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+            charBuffer[writeIndex].unicode = 0;
+        }
+
+
+        /// <summary>
+        /// Method to store the content of a string into an integer array.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="charBuffer"></param>
+        protected void StringToCharArray(string sourceText, ref UnicodeChar[] charBuffer)
+        {
+            if (sourceText == null)
+            {
+                charBuffer[0].unicode = 0;
+                return;
+            }
+
+            if (charBuffer == null) charBuffer = new UnicodeChar[8];
+
+            // Clear the Style stack.
+            m_styleStack.SetDefault(0);
+
+            int writeIndex = 0;
+
+            for (int i = 0; i < sourceText.Length; i++)
+            {
+                if (m_inputSource == TextInputSources.Text && sourceText[i] == 92 && sourceText.Length > i + 1)
+                {
+                    switch ((int)sourceText[i + 1])
+                    {
+                        case 85: // \U00000000 for UTF-32 Unicode
+                            if (sourceText.Length > i + 9)
+                            {
+                                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                                charBuffer[writeIndex].unicode = GetUTF32(sourceText, i + 2);
+                                charBuffer[writeIndex].stringIndex = i;
+                                charBuffer[writeIndex].length = 10;
+
+                                i += 9;
+                                writeIndex += 1;
+                                continue;
+                            }
+                            break;
+                        case 92: // \ escape
+                            if (!m_parseCtrlCharacters) break;
+
+                            if (sourceText.Length <= i + 2) break;
+
+                            if (writeIndex + 2 > charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = sourceText[i + 1];
+                            charBuffer[writeIndex + 1].unicode = sourceText[i + 2];
+                            i += 2;
+                            writeIndex += 2;
+                            continue;
+                        case 110: // \n LineFeed
+                            if (!m_parseCtrlCharacters) break;
+
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 10;
+                            charBuffer[writeIndex].stringIndex = i;
+                            charBuffer[writeIndex].length = 1;
+
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 114: // \r
+                            if (!m_parseCtrlCharacters) break;
+
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 13;
+                            charBuffer[writeIndex].stringIndex = i;
+                            charBuffer[writeIndex].length = 1;
+
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 116: // \t Tab
+                            if (!m_parseCtrlCharacters) break;
+
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 9;
+                            charBuffer[writeIndex].stringIndex = i;
+                            charBuffer[writeIndex].length = 1;
+
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 117: // \u0000 for UTF-16 Unicode
+                            if (sourceText.Length > i + 5)
+                            {
+                                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                                charBuffer[writeIndex].unicode = GetUTF16(sourceText, i + 2);
+                                charBuffer[writeIndex].stringIndex = i;
+                                charBuffer[writeIndex].length = 6;
+
+                                i += 5;
+                                writeIndex += 1;
+                                continue;
+                            }
+                            break;
+                    }
+                }
+
+                // Handle UTF-32 in the input text (string). // Not sure this is needed //
+                if (char.IsHighSurrogate(sourceText[i]) && char.IsLowSurrogate(sourceText[i + 1]))
+                {
+                    if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                    charBuffer[writeIndex].unicode = char.ConvertToUtf32(sourceText[i], sourceText[i + 1]);
+                    charBuffer[writeIndex].stringIndex = i;
+                    charBuffer[writeIndex].length = 2;
+
+                    i += 1;
+                    writeIndex += 1;
+                    continue;
+                }
+
+                //// Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60 && m_isRichText)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        charBuffer[writeIndex].stringIndex = i;
+                        charBuffer[writeIndex].length = 1;
+
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref charBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = sourceText[i];
+                charBuffer[writeIndex].stringIndex = i;
+                charBuffer[writeIndex].length = 1;
+
+                writeIndex += 1;
+            }
+
+            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+            charBuffer[writeIndex].unicode = 0;
+        }
+
+
+        /// <summary>
+        /// Copy contents of StringBuilder into int array.
+        /// </summary>
+        /// <param name="sourceText">Text to copy.</param>
+        /// <param name="charBuffer">Array to store contents.</param>
+        protected void StringBuilderToIntArray(StringBuilder sourceText, ref UnicodeChar[] charBuffer)
+        {
+            if (sourceText == null)
+            {
+                charBuffer[0].unicode = 0;
+                return;
+            }
+
+            if (charBuffer == null) charBuffer = new UnicodeChar[8];
+
+            // Clear the Style stack.
+            m_styleStack.Clear();
+
+            #if UNITY_EDITOR
+            // Create new string to be displayed in the Input Text Box of the Editor Panel.
+            m_text = sourceText.ToString();
+            #endif
+
+            int writeIndex = 0;
+
+            for (int i = 0; i < sourceText.Length; i++)
+            {
+                if (m_parseCtrlCharacters && sourceText[i] == 92 && sourceText.Length > i + 1)
+                {
+                    switch ((int)sourceText[i + 1])
+                    {
+                        case 85: // \U00000000 for UTF-32 Unicode
+                            if (sourceText.Length > i + 9)
+                            {
+                                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                                charBuffer[writeIndex].unicode = GetUTF32(sourceText, i + 2);
+                                i += 9;
+                                writeIndex += 1;
+                                continue;
+                            }
+                            break;
+                        case 92: // \ escape
+                            if (sourceText.Length <= i + 2) break;
+
+                            if (writeIndex + 2 > charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = sourceText[i + 1];
+                            charBuffer[writeIndex + 1].unicode = sourceText[i + 2];
+                            i += 2;
+                            writeIndex += 2;
+                            continue;
+                        case 110: // \n LineFeed
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 10;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 114: // \r
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 13;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 116: // \t Tab
+                            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                            charBuffer[writeIndex].unicode = 9;
+                            i += 1;
+                            writeIndex += 1;
+                            continue;
+                        case 117: // \u0000 for UTF-16 Unicode
+                            if (sourceText.Length > i + 5)
+                            {
+                                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                                charBuffer[writeIndex].unicode = GetUTF16(sourceText, i + 2);
+                                i += 5;
+                                writeIndex += 1;
+                                continue;
+                            }
+                            break;
+                    }
+                }
+
+                // Handle UTF-32 in the input text (string).
+                if (char.IsHighSurrogate(sourceText[i]) && char.IsLowSurrogate(sourceText[i + 1]))
+                {
+                    if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                    charBuffer[writeIndex].unicode = char.ConvertToUtf32(sourceText[i], sourceText[i + 1]);
+                    i += 1;
+                    writeIndex += 1;
+                    continue;
+                }
+
+                // Handle inline replacement of <stlye> and <br> tags.
+                if (sourceText[i] == 60)
+                {
+                    if (IsTagName(ref sourceText, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref sourceText, "<STYLE=", i))
+                    {
+                        int srcOffset;
+
+                        if (ReplaceOpeningStyleTag(ref sourceText, i, out srcOffset, ref charBuffer, ref writeIndex))
+                        {
+                            i = srcOffset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref sourceText, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref sourceText, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = sourceText[i];
+                writeIndex += 1;
+            }
+
+            if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+            charBuffer[writeIndex].unicode = 0;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by opening style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="srcOffset"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceOpeningStyleTag(ref string sourceText, int srcIndex, out int srcOffset, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Validate <style> tag.
+            int hashCode = GetTagHashCode(ref sourceText, srcIndex + 7, out srcOffset);
+
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            // Return if we don't have a valid style.
+            if (style == null || srcOffset == 0) return false;
+
+            m_styleStack.Add(style.hashCode);
+
+            int styleLength = style.styleOpeningTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] openingTagArray = style.styleOpeningTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = openingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref openingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref openingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref openingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref openingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref openingTagArray, i, ref charBuffer, ref writeIndex);
+                        
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by opening style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="srcOffset"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceOpeningStyleTag(ref int[] sourceText, int srcIndex, out int srcOffset, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Validate <style> tag.
+            int hashCode = GetTagHashCode(ref sourceText, srcIndex + 7, out srcOffset);
+
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            // Return if we don't have a valid style.
+            if (style == null || srcOffset == 0) return false;
+
+            m_styleStack.Add(style.hashCode);
+
+            int styleLength = style.styleOpeningTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] openingTagArray = style.styleOpeningTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = openingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref openingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref openingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref openingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref openingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref openingTagArray, i, ref charBuffer, ref writeIndex);
+                        
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by opening style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="srcOffset"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceOpeningStyleTag(ref char[] sourceText, int srcIndex, out int srcOffset, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Validate <style> tag.
+            int hashCode = GetTagHashCode(ref sourceText, srcIndex + 7, out srcOffset);
+
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            // Return if we don't have a valid style.
+            if (style == null || srcOffset == 0) return false;
+
+            m_styleStack.Add(style.hashCode);
+
+            int styleLength = style.styleOpeningTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] openingTagArray = style.styleOpeningTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = openingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref openingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref openingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref openingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref openingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref openingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by opening style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="srcOffset"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceOpeningStyleTag(ref StringBuilder sourceText, int srcIndex, out int srcOffset, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Validate <style> tag.
+            int hashCode = GetTagHashCode(ref sourceText, srcIndex + 7, out srcOffset);
+
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            // Return if we don't have a valid style.
+            if (style == null || srcOffset == 0) return false;
+
+            m_styleStack.Add(style.hashCode);
+
+            int styleLength = style.styleOpeningTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] openingTagArray = style.styleOpeningTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = openingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref openingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref openingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref openingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref openingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref openingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by closing style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceClosingStyleTag(ref string sourceText, int srcIndex, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Get style from the Style Stack
+            int hashCode = m_styleStack.CurrentItem();
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            m_styleStack.Remove();
+
+            // Return if we don't have a valid style.
+            if (style == null) return false;
+
+            int styleLength = style.styleClosingTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] closingTagArray = style.styleClosingTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = closingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref closingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref closingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref closingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref closingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref closingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by closing style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceClosingStyleTag(ref int[] sourceText, int srcIndex, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Get style from the Style Stack
+            int hashCode = m_styleStack.CurrentItem();
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            m_styleStack.Remove();
+
+            // Return if we don't have a valid style.
+            if (style == null) return false;
+
+            int styleLength = style.styleClosingTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] closingTagArray = style.styleClosingTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = closingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref closingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref closingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref closingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref closingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref closingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by closing style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceClosingStyleTag(ref char[] sourceText, int srcIndex, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Get style from the Style Stack
+            int hashCode = m_styleStack.CurrentItem();
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            m_styleStack.Remove();
+
+            // Return if we don't have a valid style.
+            if (style == null) return false;
+
+            int styleLength = style.styleClosingTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] closingTagArray = style.styleClosingTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = closingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref closingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref closingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref closingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref closingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref closingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Method to handle inline replacement of style tag by closing style definition.
+        /// </summary>
+        /// <param name="sourceText"></param>
+        /// <param name="srcIndex"></param>
+        /// <param name="charBuffer"></param>
+        /// <param name="writeIndex"></param>
+        /// <returns></returns>
+        bool ReplaceClosingStyleTag(ref StringBuilder sourceText, int srcIndex, ref UnicodeChar[] charBuffer, ref int writeIndex)
+        {
+            // Get style from the Style Stack
+            int hashCode = m_styleStack.CurrentItem();
+            TMP_Style style = TMP_StyleSheet.GetStyle(hashCode);
+
+            m_styleStack.Remove();
+
+            // Return if we don't have a valid style.
+            if (style == null) return false;
+
+            int styleLength = style.styleClosingTagArray.Length;
+
+            // Replace <style> tag with opening definition
+            int[] closingTagArray = style.styleClosingTagArray;
+
+            for (int i = 0; i < styleLength; i++)
+            {
+                int c = closingTagArray[i];
+
+                if (c == 60)
+                {
+                    if (IsTagName(ref closingTagArray, "<BR>", i))
+                    {
+                        if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                        charBuffer[writeIndex].unicode = 10;
+                        writeIndex += 1;
+                        i += 3;
+
+                        continue;
+                    }
+                    else if (IsTagName(ref closingTagArray, "<STYLE=", i))
+                    {
+                        int offset;
+
+                        if (ReplaceOpeningStyleTag(ref closingTagArray, i, out offset, ref charBuffer, ref writeIndex))
+                        {
+                            i = offset;
+                            continue;
+                        }
+                    }
+                    else if (IsTagName(ref closingTagArray, "</STYLE>", i))
+                    {
+                        ReplaceClosingStyleTag(ref closingTagArray, i, ref charBuffer, ref writeIndex);
+
+                        // Strip </style> even if style is invalid.
+                        i += 7;
+                        continue;
+                    }
+                }
+
+                if (writeIndex == charBuffer.Length) ResizeInternalArray(ref charBuffer);
+
+                charBuffer[writeIndex].unicode = c;
+                writeIndex += 1;
+            }
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to check for a matching rich text tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="tag"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        bool IsTagName (ref string text, string tag, int index)
+        {
+            if (text.Length < index + tag.Length) return false;
+            
+            for (int i = 0; i < tag.Length; i++)
+            {
+                if (TMP_TextUtilities.ToUpperFast(text[index + i]) != tag[i]) return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Method to check for a matching rich text tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="tag"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        bool IsTagName(ref char[] text, string tag, int index)
+        {
+            if (text.Length < index + tag.Length) return false;
+
+            for (int i = 0; i < tag.Length; i++)
+            {
+                if (TMP_TextUtilities.ToUpperFast(text[index + i]) != tag[i]) return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Method to check for a matching rich text tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="tag"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        bool IsTagName(ref int[] text, string tag, int index)
+        {
+            if (text.Length < index + tag.Length) return false;
+
+            for (int i = 0; i < tag.Length; i++)
+            {
+                if (TMP_TextUtilities.ToUpperFast((char)text[index + i]) != tag[i]) return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Method to check for a matching rich text tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="tag"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        bool IsTagName(ref StringBuilder text, string tag, int index)
+        {
+            if (text.Length < index + tag.Length) return false;
+
+            for (int i = 0; i < tag.Length; i++)
+            {
+                if (TMP_TextUtilities.ToUpperFast(text[index + i]) != tag[i]) return false;
+            }
+
+            return true;
+        }
+
+        /// <summary>
+        /// Get Hashcode for a given tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="index"></param>
+        /// <param name="closeIndex"></param>
+        /// <returns></returns>
+        int GetTagHashCode(ref string text, int index, out int closeIndex)
+        {
+            int hashCode = 0;
+            closeIndex = 0;
+
+            for (int i = index; i < text.Length; i++)
+            {
+                // Skip quote '"' character
+                if (text[i] == 34) continue;
+
+                // Break at '>'
+                if (text[i] == 62) { closeIndex = i; break; }
+
+                hashCode = (hashCode << 5) + hashCode ^ text[i];
+            }
+
+            return hashCode;
+        }
+
+        /// <summary>
+        /// Get Hashcode for a given tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="index"></param>
+        /// <param name="closeIndex"></param>
+        /// <returns></returns>
+        int GetTagHashCode(ref char[] text, int index, out int closeIndex)
+        {
+            int hashCode = 0;
+            closeIndex = 0;
+
+            for (int i = index; i < text.Length; i++)
+            {
+                // Skip quote '"' character
+                if (text[i] == 34) continue;
+
+                // Break at '>'
+                if (text[i] == 62) { closeIndex = i; break; }
+
+                hashCode = (hashCode << 5) + hashCode ^ text[i];
+            }
+
+            return hashCode;
+        }
+
+        /// <summary>
+        /// Get Hashcode for a given tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="index"></param>
+        /// <param name="closeIndex"></param>
+        /// <returns></returns>
+        int GetTagHashCode(ref int[] text, int index, out int closeIndex)
+        {
+            int hashCode = 0;
+            closeIndex = 0;
+
+            for (int i = index; i < text.Length; i++)
+            {
+                // Skip quote '"' character
+                if (text[i] == 34) continue;
+
+                // Break at '>'
+                if (text[i] == 62) { closeIndex = i; break; }
+
+                hashCode = (hashCode << 5) + hashCode ^ text[i];
+            }
+
+            return hashCode;
+        }
+
+        /// <summary>
+        ///  Get Hashcode for a given tag.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="index"></param>
+        /// <param name="closeIndex"></param>
+        /// <returns></returns>
+        int GetTagHashCode(ref StringBuilder text, int index, out int closeIndex)
+        {
+            int hashCode = 0;
+            closeIndex = 0;
+
+            for (int i = index; i < text.Length; i++)
+            {
+                // Skip quote '"' character
+                if (text[i] == 34) continue;
+
+                // Break at '>'
+                if (text[i] == 62) { closeIndex = i; break; }
+
+                hashCode = (hashCode << 5) + hashCode ^ text[i];
+            }
+
+            return hashCode;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        void ResizeInternalArray <T>(ref T[] array)
+        {
+            int size = Mathf.NextPowerOfTwo(array.Length + 1);
+
+            System.Array.Resize(ref array, size);
+        }
+
+
+        private readonly float[] k_Power = { 5e-1f, 5e-2f, 5e-3f, 5e-4f, 5e-5f, 5e-6f, 5e-7f, 5e-8f, 5e-9f, 5e-10f }; // Used by FormatText to enable rounding and avoid using Mathf.Pow.
+
+        /// <summary>
+        /// Function used in conjunction with SetText()
+        /// </summary>
+        /// <param name="number"></param>
+        /// <param name="index"></param>
+        /// <param name="precision"></param>
+        protected void AddFloatToCharArray(double number, ref int index, int precision)
+        {
+            if (number < 0)
+            {
+                m_input_CharArray[index++] = '-';
+                number = -number;
+            }
+
+            number += k_Power[Mathf.Min(9, precision)];
+
+            double integer = Math.Truncate(number);
+
+            AddIntToCharArray(integer, ref index, precision);
+
+            if (precision > 0)
+            {
+                // Add the decimal point
+                m_input_CharArray[index++] = '.';
+
+                number -= integer;
+                for (int p = 0; p < precision; p++)
+                {
+                    number *= 10;
+                    long d = (long)(number);
+
+                    m_input_CharArray[index++] = (char)(d + 48);
+                    number -= d;
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// // Function used in conjunction with SetText()
+        /// </summary>
+        /// <param name="number"></param>
+        /// <param name="index"></param>
+        /// <param name="precision"></param>
+        protected void AddIntToCharArray(double number, ref int index, int precision)
+        {
+            if (number < 0)
+            {
+                m_input_CharArray[index++] = '-';
+                number = -number;
+            }
+
+            int i = index;
+            do
+            {
+                m_input_CharArray[i++] = (char)(number % 10 + 48);
+                number /= 10;
+            } while (number > 0.999d);
+
+            int lastIndex = i;
+
+            // Reverse string
+            while (index + 1 < i)
+            {
+                i -= 1;
+                char t = m_input_CharArray[index];
+                m_input_CharArray[index] = m_input_CharArray[i];
+                m_input_CharArray[i] = t;
+                index += 1;
+            }
+            index = lastIndex;
+        }
+
+
+        /// <summary>
+        /// Method used to determine the number of visible characters and required buffer allocations.
+        /// </summary>
+        /// <param name="chars"></param>
+        /// <returns></returns>
+        protected virtual int SetArraySizes(UnicodeChar[] chars) { return 0; }
+
+
+        /// <summary>
+        /// Method which parses the text input, does the layout of the text as well as generating the geometry.
+        /// </summary>
+        protected virtual void GenerateTextMesh() { }
+
+
+        /// <summary>
+        /// Function to Calculate the Preferred Width and Height of the text object.
+        /// </summary>
+        /// <returns></returns>
+        public Vector2 GetPreferredValues()
+        {
+            if (m_isInputParsingRequired || m_isTextTruncated)
+            {
+                m_isCalculatingPreferredValues = true;
+                ParseInputText();
+            }
+
+            // CALCULATE PREFERRED WIDTH
+            float preferredWidth = GetPreferredWidth();
+
+            // CALCULATE PREFERRED HEIGHT
+            float preferredHeight = GetPreferredHeight();
+
+            return new Vector2(preferredWidth, preferredHeight);
+        }
+
+
+        /// <summary>
+        /// Function to Calculate the Preferred Width and Height of the text object given the provided width and height.
+        /// </summary>
+        /// <returns></returns>
+        public Vector2 GetPreferredValues(float width, float height)
+        {
+            if (m_isInputParsingRequired || m_isTextTruncated)
+            {
+                m_isCalculatingPreferredValues = true;
+                ParseInputText();
+            }
+
+            Vector2 margin = new Vector2(width, height);
+
+            // CALCULATE PREFERRED WIDTH
+            float preferredWidth = GetPreferredWidth(margin);
+
+            // CALCULATE PREFERRED HEIGHT
+            float preferredHeight = GetPreferredHeight(margin);
+
+            return new Vector2(preferredWidth, preferredHeight);
+        }
+
+
+        /// <summary>
+        /// Function to Calculate the Preferred Width and Height of the text object given a certain string.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <returns></returns>
+        public Vector2 GetPreferredValues(string text)
+        {
+            m_isCalculatingPreferredValues = true;
+
+            StringToCharArray(text, ref m_TextParsingBuffer);
+            SetArraySizes(m_TextParsingBuffer);
+
+            Vector2 margin = k_LargePositiveVector2;
+
+            // CALCULATE PREFERRED WIDTH
+            float preferredWidth = GetPreferredWidth(margin);
+
+            // CALCULATE PREFERRED HEIGHT
+            float preferredHeight = GetPreferredHeight(margin);
+
+            return new Vector2(preferredWidth, preferredHeight);
+        }
+
+
+        /// <summary>
+        ///  Function to Calculate the Preferred Width and Height of the text object given a certain string and size of text container.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <returns></returns>
+        public Vector2 GetPreferredValues(string text, float width, float height)
+        {
+            m_isCalculatingPreferredValues = true;
+
+            StringToCharArray(text, ref m_TextParsingBuffer);
+            SetArraySizes(m_TextParsingBuffer);
+
+            Vector2 margin = new Vector2(width, height);
+
+            // CALCULATE PREFERRED WIDTH
+            float preferredWidth = GetPreferredWidth(margin);
+
+            // CALCULATE PREFERRED HEIGHT
+            float preferredHeight = GetPreferredHeight(margin);
+
+            return new Vector2(preferredWidth, preferredHeight);
+        }
+
+
+        /// <summary>
+        /// Method to calculate the preferred width of a text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetPreferredWidth()
+        {
+            if (TMP_Settings.instance == null) return 0;
+
+            float fontSize = m_enableAutoSizing ? m_fontSizeMax : m_fontSize;
+
+            // Reset auto sizing point size bounds
+            m_minFontSize = m_fontSizeMin;
+            m_maxFontSize = m_fontSizeMax;
+            m_charWidthAdjDelta = 0;
+
+            // Set Margins to Infinity
+            Vector2 margin = k_LargePositiveVector2;
+
+            if (m_isInputParsingRequired || m_isTextTruncated)
+            {
+                m_isCalculatingPreferredValues = true;
+                ParseInputText();
+            }
+
+            m_recursiveCount = 0;
+            float preferredWidth = CalculatePreferredValues(fontSize, margin, true).x;
+
+            m_isPreferredWidthDirty = false;
+
+            //Debug.Log("GetPreferredWidth() Called at frame " + Time.frameCount + ". Returning width of " + preferredWidth);
+
+            return preferredWidth;
+        }
+
+
+        /// <summary>
+        /// Method to calculate the preferred width of a text object.
+        /// </summary>
+        /// <param name="margin"></param>
+        /// <returns></returns>
+        protected float GetPreferredWidth(Vector2 margin)
+        {
+            float fontSize = m_enableAutoSizing ? m_fontSizeMax : m_fontSize;
+
+            // Reset auto sizing point size bounds
+            m_minFontSize = m_fontSizeMin;
+            m_maxFontSize = m_fontSizeMax;
+            m_charWidthAdjDelta = 0;
+
+            m_recursiveCount = 0;
+            float preferredWidth = CalculatePreferredValues(fontSize, margin, true).x;
+
+            //Debug.Log("GetPreferredWidth() Called. Returning width of " + preferredWidth);
+
+            return preferredWidth;
+        }
+
+
+        /// <summary>
+        /// Method to calculate the preferred height of a text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetPreferredHeight()
+        {
+            if (TMP_Settings.instance == null) return 0;
+
+            float fontSize = m_enableAutoSizing ? m_fontSizeMax : m_fontSize;
+
+            // Reset auto sizing point size bounds
+            m_minFontSize = m_fontSizeMin;
+            m_maxFontSize = m_fontSizeMax;
+            m_charWidthAdjDelta = 0;
+
+            Vector2 margin = new Vector2(m_marginWidth != 0 ? m_marginWidth : k_LargePositiveFloat, k_LargePositiveFloat);
+
+            if (m_isInputParsingRequired || m_isTextTruncated)
+            {
+                m_isCalculatingPreferredValues = true;
+                ParseInputText();
+            }
+
+            m_recursiveCount = 0;
+            float preferredHeight = CalculatePreferredValues(fontSize, margin, !m_enableAutoSizing).y;
+
+            m_isPreferredHeightDirty = false;
+
+            //Debug.Log("GetPreferredHeight() Called. Returning height of " + preferredHeight);
+
+            return preferredHeight;
+        }
+
+
+        /// <summary>
+        /// Method to calculate the preferred height of a text object.
+        /// </summary>
+        /// <param name="margin"></param>
+        /// <returns></returns>
+        protected float GetPreferredHeight(Vector2 margin)
+        {
+            float fontSize = m_enableAutoSizing ? m_fontSizeMax : m_fontSize;
+
+            // Reset auto sizing point size bounds
+            m_minFontSize = m_fontSizeMin;
+            m_maxFontSize = m_fontSizeMax;
+            m_charWidthAdjDelta = 0;
+
+            m_recursiveCount = 0;
+            float preferredHeight = CalculatePreferredValues(fontSize, margin, true).y;
+
+            //Debug.Log("GetPreferredHeight() Called. Returning height of " + preferredHeight);
+
+            return preferredHeight;
+        }
+
+
+        /// <summary>
+        /// Method returning the rendered width and height of the text object.
+        /// </summary>
+        /// <returns></returns>
+        public Vector2 GetRenderedValues()
+        {
+            return GetTextBounds().size;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="onlyVisibleCharacters">Should returned value only factor in visible characters and exclude those greater than maxVisibleCharacters for instance.</param>
+        /// <returns></returns>
+        public Vector2 GetRenderedValues(bool onlyVisibleCharacters)
+        {
+            return GetTextBounds(onlyVisibleCharacters).size;
+        }
+
+
+        /// <summary>
+        /// Method returning the rendered width of the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetRenderedWidth()
+        {
+            return GetRenderedValues().x;
+        }
+
+        /// <summary>
+        /// Method returning the rendered width of the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetRenderedWidth(bool onlyVisibleCharacters)
+        {
+            return GetRenderedValues(onlyVisibleCharacters).x;
+        }
+
+        /// <summary>
+        /// Method returning the rendered height of the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetRenderedHeight()
+        {
+            return GetRenderedValues().y;
+        }
+
+        /// <summary>
+        /// Method returning the rendered height of the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected float GetRenderedHeight(bool onlyVisibleCharacters)
+        {
+            return GetRenderedValues(onlyVisibleCharacters).y;
+        }
+
+
+        /// <summary>
+        /// Method to calculate the preferred width and height of the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected virtual Vector2 CalculatePreferredValues(float defaultFontSize, Vector2 marginSize, bool ignoreTextAutoSizing)
+        {
+            //Debug.Log("*** CalculatePreferredValues() ***"); // ***** Frame: " + Time.frameCount);
+
+            ////Profiler.BeginSample("TMP Generate Text - Phase I");
+
+            // Early exit if no font asset was assigned. This should not be needed since LiberationSans SDF will be assigned by default.
+            if (m_fontAsset == null || m_fontAsset.characterLookupTable == null)
+            {
+                Debug.LogWarning("Can't Generate Mesh! No Font Asset has been assigned to Object ID: " + this.GetInstanceID());
+
+                return Vector2.zero;
+            }
+
+            // Early exit if we don't have any Text to generate.
+            if (m_TextParsingBuffer == null || m_TextParsingBuffer.Length == 0 || m_TextParsingBuffer[0].unicode == (char)0)
+            {
+                return Vector2.zero;
+            }
+
+            m_currentFontAsset = m_fontAsset;
+            m_currentMaterial = m_sharedMaterial;
+            m_currentMaterialIndex = 0;
+            m_materialReferenceStack.SetDefault(new MaterialReference(0, m_currentFontAsset, null, m_currentMaterial, m_padding));
+
+            // Total character count is computed when the text is parsed.
+            int totalCharacterCount = m_totalCharacterCount; // m_VisibleCharacters.Count;
+
+            if (m_internalCharacterInfo == null || totalCharacterCount > m_internalCharacterInfo.Length)
+            {
+                m_internalCharacterInfo = new TMP_CharacterInfo[totalCharacterCount > 1024 ? totalCharacterCount + 256 : Mathf.NextPowerOfTwo(totalCharacterCount)];
+            }
+
+            // Calculate the scale of the font based on selected font size and sampling point size.
+            // baseScale is calculated using the font asset assigned to the text object.
+            float baseScale = m_fontScale = (defaultFontSize / m_fontAsset.faceInfo.pointSize * m_fontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+            float currentElementScale = baseScale;
+            m_fontScaleMultiplier = 1;
+
+            m_currentFontSize = defaultFontSize;
+            m_sizeStack.SetDefault(m_currentFontSize);
+            float fontSizeDelta = 0;
+
+            int charCode = 0; // Holds the character code of the currently being processed character.
+
+            m_FontStyleInternal = m_fontStyle; // Set the default style.
+
+            m_lineJustification = m_textAlignment; // Sets the line justification mode to match editor alignment.
+            m_lineJustificationStack.SetDefault(m_lineJustification);
+
+            float bold_xAdvance_multiplier = 1; // Used to increase spacing between character when style is bold.
+
+            m_baselineOffset = 0; // Used by subscript characters.
+            m_baselineOffsetStack.Clear();
+
+            m_lineOffset = 0; // Amount of space between lines (font line spacing + m_linespacing).
+            m_lineHeight = TMP_Math.FLOAT_UNSET;
+            float lineGap = m_currentFontAsset.faceInfo.lineHeight - (m_currentFontAsset.faceInfo.ascentLine - m_currentFontAsset.faceInfo.descentLine);
+
+            m_cSpacing = 0; // Amount of space added between characters as a result of the use of the <cspace> tag.
+            m_monoSpacing = 0;
+            float lineOffsetDelta = 0;
+            m_xAdvance = 0; // Used to track the position of each character.
+            float maxXAdvance = 0; // Used to determine Preferred Width.
+
+            tag_LineIndent = 0; // Used for indentation of text.
+            tag_Indent = 0;
+            m_indentStack.SetDefault(0);
+            tag_NoParsing = false;
+            //m_isIgnoringAlignment = false;
+
+            m_characterCount = 0; // Total characters in the char[]
+
+
+            // Tracking of line information
+            m_firstCharacterOfLine = 0;
+            m_maxLineAscender = k_LargeNegativeFloat;
+            m_maxLineDescender = k_LargePositiveFloat;
+            m_lineNumber = 0;
+
+            float marginWidth = marginSize.x;
+            //float marginHeight = marginSize.y;
+            m_marginLeft = 0;
+            m_marginRight = 0;
+            m_width = -1;
+
+            // Used by Unity's Auto Layout system.
+            float renderedWidth = 0;
+            float renderedHeight = 0;
+            float linebreakingWidth = 0;
+            m_isCalculatingPreferredValues = true;
+
+            // Tracking of the highest Ascender
+            m_maxAscender = 0;
+            m_maxDescender = 0;
+
+
+            // Initialize struct to track states of word wrapping
+            bool isFirstWord = true;
+            bool isLastBreakingChar = false;
+            WordWrapState savedLineState = new WordWrapState();
+            SaveWordWrappingState(ref savedLineState, 0, 0);
+            WordWrapState savedWordWrapState = new WordWrapState();
+            int wrappingIndex = 0;
+
+            // Counter to prevent recursive lockup when computing preferred values.
+            m_recursiveCount += 1;
+
+            // Parse through Character buffer to read HTML tags and begin creating mesh.
+            for (int i = 0; m_TextParsingBuffer[i].unicode != 0; i++)
+            {
+                charCode = (int)m_TextParsingBuffer[i].unicode;
+
+                // Parse Rich Text Tag
+                #region Parse Rich Text Tag
+                if (m_isRichText && charCode == 60)  // '<'
+                {
+                    m_isParsingText = true;
+                    m_textElementType = TMP_TextElementType.Character;
+                    int endTagIndex;
+
+                    // Check if Tag is valid. If valid, skip to the end of the validated tag.
+                    if (ValidateHtmlTag(m_TextParsingBuffer, i + 1, out endTagIndex))
+                    {
+                        i = endTagIndex;
+
+                        // Continue to next character or handle the sprite element
+                        if (m_textElementType == TMP_TextElementType.Character)
+                            continue;
+                    }
+                }
+                else
+                {
+                    m_textElementType = m_textInfo.characterInfo[m_characterCount].elementType;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+                    m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                }
+                #endregion End Parse Rich Text Tag
+
+                int prev_MaterialIndex = m_currentMaterialIndex;
+                bool isUsingAltTypeface = m_textInfo.characterInfo[m_characterCount].isUsingAlternateTypeface;
+
+                m_isParsingText = false;
+
+                // Handle Font Styles like LowerCase, UpperCase and SmallCaps.
+                #region Handling of LowerCase, UpperCase and SmallCaps Font Styles
+
+                float smallCapsMultiplier = 1.0f;
+
+                if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    if (/*(m_fontStyle & FontStyles.UpperCase) == FontStyles.UpperCase ||*/ (m_FontStyleInternal & FontStyles.UpperCase) == FontStyles.UpperCase)
+                    {
+                        // If this character is lowercase, switch to uppercase.
+                        if (char.IsLower((char)charCode))
+                            charCode = char.ToUpper((char)charCode);
+
+                    }
+                    else if (/*(m_fontStyle & FontStyles.LowerCase) == FontStyles.LowerCase ||*/ (m_FontStyleInternal & FontStyles.LowerCase) == FontStyles.LowerCase)
+                    {
+                        // If this character is uppercase, switch to lowercase.
+                        if (char.IsUpper((char)charCode))
+                            charCode = char.ToLower((char)charCode);
+                    }
+                    else if (/*(m_fontStyle & FontStyles.SmallCaps) == FontStyles.SmallCaps ||*/ (m_FontStyleInternal & FontStyles.SmallCaps) == FontStyles.SmallCaps)
+                    {
+                        if (char.IsLower((char)charCode))
+                        {
+                            smallCapsMultiplier = 0.8f;
+                            charCode = char.ToUpper((char)charCode);
+                        }
+                    }
+                }
+                #endregion
+
+
+                // Look up Character Data from Dictionary and cache it.
+                #region Look up Character Data
+                if (m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    // If a sprite is used as a fallback then get a reference to it and set the color to white.
+                    m_currentSpriteAsset = m_textInfo.characterInfo[m_characterCount].spriteAsset;
+                    m_spriteIndex = m_textInfo.characterInfo[m_characterCount].spriteIndex;
+
+                    TMP_SpriteCharacter sprite = m_currentSpriteAsset.spriteCharacterTable[m_spriteIndex];
+                    if (sprite == null) continue;
+
+                    // Sprites are assigned in the E000 Private Area + sprite Index
+                    if (charCode == 60)
+                        charCode = 57344 + m_spriteIndex;
+
+                    m_currentFontAsset = m_fontAsset;
+
+                    // The sprite scale calculations are based on the font asset assigned to the text object.
+                    // Sprite scale is used to determine line height
+                    // Current element scale represents a modified scale to normalize the sprite based on the font baseline to ascender.
+                    float spriteScale = (m_currentFontSize / m_fontAsset.faceInfo.pointSize * m_fontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                    currentElementScale = m_fontAsset.faceInfo.ascentLine / sprite.glyph.metrics.height * sprite.scale * spriteScale;
+
+                    m_cached_TextElement = sprite;
+
+                    m_internalCharacterInfo[m_characterCount].elementType = TMP_TextElementType.Sprite;
+                    m_internalCharacterInfo[m_characterCount].scale = spriteScale;
+                    //m_internalCharacterInfo[m_characterCount].spriteAsset = m_currentSpriteAsset;
+                    //m_internalCharacterInfo[m_characterCount].fontAsset = m_currentFontAsset;
+                    //m_internalCharacterInfo[m_characterCount].materialReferenceIndex = m_currentMaterialIndex;
+
+                    m_currentMaterialIndex = prev_MaterialIndex;
+                }
+                else if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    m_cached_TextElement = m_textInfo.characterInfo[m_characterCount].textElement;
+                    if (m_cached_TextElement == null) continue;
+
+                    //m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                    //m_currentMaterial = m_textInfo.characterInfo[m_characterCount].material;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+
+                    // Re-calculate font scale as the font asset may have changed.
+                    m_fontScale = m_currentFontSize * smallCapsMultiplier / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f);
+
+                    currentElementScale = m_fontScale * m_fontScaleMultiplier * m_cached_TextElement.scale;
+
+                    m_internalCharacterInfo[m_characterCount].elementType = TMP_TextElementType.Character;
+
+                }
+                #endregion
+
+
+                // Handle Soft Hyphen
+                #region Handle Soft Hyphen
+                float old_scale = currentElementScale;
+                if (charCode == 0xAD)
+                {
+                    currentElementScale = 0;
+                }
+                #endregion
+
+
+                // Store some of the text object's information
+                m_internalCharacterInfo[m_characterCount].character = (char)charCode;
+
+
+                // Handle Kerning if Enabled.
+                #region Handle Kerning
+                TMP_GlyphValueRecord glyphAdjustments = new TMP_GlyphValueRecord();
+                float characterSpacingAdjustment = m_characterSpacing;
+                if (m_enableKerning)
+                {
+                    TMP_GlyphPairAdjustmentRecord adjustmentPair;
+
+                    if (m_characterCount < totalCharacterCount - 1)
+                    {
+                        uint firstGlyphIndex = m_cached_TextElement.glyphIndex;
+                        uint secondGlyphIndex = m_textInfo.characterInfo[m_characterCount + 1].textElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments = adjustmentPair.firstAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+
+                    if (m_characterCount >= 1)
+                    {
+                        uint firstGlyphIndex = m_textInfo.characterInfo[m_characterCount - 1].textElement.glyphIndex;
+                        uint secondGlyphIndex = m_cached_TextElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments += adjustmentPair.secondAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+                }
+                #endregion
+
+
+                // Initial Implementation for RTL support.
+                #region Handle Right-to-Left
+                //if (m_isRightToLeft)
+                //{
+                //    m_xAdvance -= ((m_cached_TextElement.xAdvance * bold_xAdvance_multiplier + m_characterSpacing + m_wordSpacing + m_currentFontAsset.normalSpacingOffset) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                //    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                //        m_xAdvance -= m_wordSpacing * currentElementScale;
+                //}
+                #endregion
+
+
+                // Handle Mono Spacing
+                #region Handle Mono Spacing
+                float monoAdvance = 0;
+                if (m_monoSpacing != 0)
+                {
+                    monoAdvance = (m_monoSpacing / 2 - (m_cached_TextElement.glyph.metrics.width / 2 + m_cached_TextElement.glyph.metrics.horizontalBearingX) * currentElementScale);
+                    m_xAdvance += monoAdvance;
+                }
+                #endregion
+
+
+                // Set Padding based on selected font style
+                #region Handle Style Padding
+                if (m_textElementType == TMP_TextElementType.Character && !isUsingAltTypeface && ((m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold)) // Checks for any combination of Bold Style.
+                {
+                    bold_xAdvance_multiplier = 1 + m_currentFontAsset.boldSpacing * 0.01f;
+                }
+                else
+                {
+                    //style_padding = m_currentFontAsset.normalStyle * 2;
+                    bold_xAdvance_multiplier = 1.0f;
+                }
+                #endregion Handle Style Padding
+
+                m_internalCharacterInfo[m_characterCount].baseLine = 0 - m_lineOffset + m_baselineOffset;
+
+
+                // Compute and save text element Ascender and maximum line Ascender.
+                float elementAscender = m_currentFontAsset.faceInfo.ascentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier : m_internalCharacterInfo[m_characterCount].scale) + m_baselineOffset;
+                m_internalCharacterInfo[m_characterCount].ascender = elementAscender - m_lineOffset;
+                m_maxLineAscender = elementAscender > m_maxLineAscender ? elementAscender : m_maxLineAscender;
+
+                // Compute and save text element Descender and maximum line Descender.
+                float elementDescender = m_currentFontAsset.faceInfo.descentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier: m_internalCharacterInfo[m_characterCount].scale) + m_baselineOffset;
+                float elementDescenderII = m_internalCharacterInfo[m_characterCount].descender = elementDescender - m_lineOffset;
+                m_maxLineDescender = elementDescender < m_maxLineDescender ? elementDescender : m_maxLineDescender;
+
+                // Adjust maxLineAscender and maxLineDescender if style is superscript or subscript
+                if ((m_FontStyleInternal & FontStyles.Subscript) == FontStyles.Subscript || (m_FontStyleInternal & FontStyles.Superscript) == FontStyles.Superscript)
+                {
+                    float baseAscender = (elementAscender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementAscender = m_maxLineAscender;
+                    m_maxLineAscender = baseAscender > m_maxLineAscender ? baseAscender : m_maxLineAscender;
+
+                    float baseDescender = (elementDescender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementDescender = m_maxLineDescender;
+                    m_maxLineDescender = baseDescender < m_maxLineDescender ? baseDescender : m_maxLineDescender;
+                }
+
+                if (m_lineNumber == 0) m_maxAscender = m_maxAscender > elementAscender ? m_maxAscender : elementAscender;
+                //if (m_lineOffset == 0) pageAscender = pageAscender > elementAscender ? pageAscender : elementAscender;
+
+                // Setup Mesh for visible text elements. ie. not a SPACE / LINEFEED / CARRIAGE RETURN.
+                #region Handle Visible Characters
+                if (charCode == 9 || charCode == 0xA0 || charCode == 0x2007 || (!char.IsWhiteSpace((char)charCode) && charCode != 0x200B) || m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    // Check if Character exceeds the width of the Text Container
+                    #region Handle Line Breaking, Text Auto-Sizing and Horizontal Overflow
+                    float width = m_width != -1 ? Mathf.Min(marginWidth + 0.0001f - m_marginLeft - m_marginRight, m_width) : marginWidth + 0.0001f - m_marginLeft - m_marginRight;
+
+                    bool isJustifiedOrFlush = ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush || ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Justified) == _HorizontalAlignmentOptions.Justified;
+
+                    // Calculate the line breaking width of the text.
+                    linebreakingWidth = m_xAdvance + m_cached_TextElement.glyph.metrics.horizontalAdvance * (1 - m_charWidthAdjDelta) * (charCode != 0xAD ? currentElementScale : old_scale);
+
+                    // Check if Character exceeds the width of the Text Container
+                    if (linebreakingWidth > width * (isJustifiedOrFlush ? 1.05f : 1.0f))
+                    {
+                        // Word Wrapping
+                        #region Handle Word Wrapping
+                        if (enableWordWrapping && m_characterCount != m_firstCharacterOfLine)
+                        {
+                            // Check if word wrapping is still possible
+                            #region Line Breaking Check
+                            if (wrappingIndex == savedWordWrapState.previous_WordBreak || isFirstWord)
+                            {
+                                // Word wrapping is no longer possible. Shrink size of text if auto-sizing is enabled.
+                                #region Text Auto-Sizing
+                                if (ignoreTextAutoSizing == false && m_currentFontSize > m_fontSizeMin)
+                                {
+                                    // Handle Character Width Adjustments
+                                    #region Character Width Adjustments
+                                    if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                                    {
+                                        m_recursiveCount = 0;
+                                        m_charWidthAdjDelta += 0.01f;
+                                        return CalculatePreferredValues(defaultFontSize, marginSize, false);
+                                    }
+                                    #endregion
+
+                                    // Adjust Point Size
+                                    m_maxFontSize = defaultFontSize;
+
+                                    defaultFontSize -= Mathf.Max((defaultFontSize - m_minFontSize) / 2, 0.05f);
+                                    defaultFontSize = (int)(Mathf.Max(defaultFontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                                    if (m_recursiveCount > 20) return new Vector2(renderedWidth, renderedHeight);
+                                    return CalculatePreferredValues(defaultFontSize, marginSize, false);
+                                }
+                                #endregion
+
+                                // Word wrapping is no longer possible, now breaking up individual words.
+                                if (m_isCharacterWrappingEnabled == false)
+                                {
+                                    m_isCharacterWrappingEnabled = true;
+                                }
+                                else
+                                    isLastBreakingChar = true;
+                            }
+                            #endregion
+
+                            // Restore to previously stored state of last valid (space character or linefeed)
+                            i = RestoreWordWrappingState(ref savedWordWrapState);
+                            wrappingIndex = i;  // Used to detect when line length can no longer be reduced.
+
+                            // Handling for Soft Hyphen
+                            if (m_TextParsingBuffer[i].unicode == 0xAD) // && !m_isCharacterWrappingEnabled) // && ellipsisIndex != i && !m_isCharacterWrappingEnabled)
+                            {
+                                m_isTextTruncated = true;
+                                m_TextParsingBuffer[i].unicode = 0x2D;
+                                return CalculatePreferredValues(defaultFontSize, marginSize, true);
+                            }
+
+                            // Check if Line Spacing of previous line needs to be adjusted.
+                            if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET)
+                            {
+                                //Debug.Log("(1) Adjusting Line Spacing on line #" + m_lineNumber);
+                                float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                                //AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                                m_lineOffset += offsetDelta;
+                                savedWordWrapState.lineOffset = m_lineOffset;
+                                savedWordWrapState.previousLineAscender = m_maxLineAscender;
+
+                                // TODO - Add check for character exceeding vertical bounds
+                            }
+                            //m_isNewPage = false;
+
+                            // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                            float lineAscender = m_maxLineAscender - m_lineOffset;
+                            float lineDescender = m_maxLineDescender - m_lineOffset;
+
+
+                            // Update maxDescender and maxVisibleDescender
+                            m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+
+
+                            m_firstCharacterOfLine = m_characterCount; // Store first character of the next line.
+
+                            // Compute Preferred Width & Height
+                            renderedWidth += m_xAdvance;
+
+                            if (m_enableWordWrapping)
+                                renderedHeight = m_maxAscender - m_maxDescender;
+                            else
+                                renderedHeight = Mathf.Max(renderedHeight, lineAscender - lineDescender);
+
+
+                            // Store the state of the line before starting on the new line.
+                            SaveWordWrappingState(ref savedLineState, i, m_characterCount - 1);
+
+                            m_lineNumber += 1;
+                            //isStartOfNewLine = true;
+
+                            // Check to make sure Array is large enough to hold a new line.
+                            //if (m_lineNumber >= m_internalTextInfo.lineInfo.Length)
+                            //    ResizeLineExtents(m_lineNumber);
+
+                            // Apply Line Spacing based on scale of the last character of the line.
+                            if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                            {
+                                float ascender = m_internalCharacterInfo[m_characterCount].ascender - m_internalCharacterInfo[m_characterCount].baseLine;
+                                lineOffsetDelta = 0 - m_maxLineDescender + ascender + (lineGap + m_lineSpacing + m_lineSpacingDelta) * baseScale;
+                                m_lineOffset += lineOffsetDelta;
+
+                                m_startOfLineAscender = ascender;
+                            }
+                            else
+                                m_lineOffset += m_lineHeight + m_lineSpacing * baseScale;
+
+                            m_maxLineAscender = k_LargeNegativeFloat;
+                            m_maxLineDescender = k_LargePositiveFloat;
+
+                            m_xAdvance = 0 + tag_Indent;
+
+                            continue;
+                        }
+                        #endregion End Word Wrapping
+
+                        // Text Auto-Sizing (text exceeding Width of container. 
+                        #region Handle Text Auto-Sizing
+                        if (ignoreTextAutoSizing == false && defaultFontSize > m_fontSizeMin)
+                        {
+                            // Handle Character Width Adjustments
+                            #region Character Width Adjustments
+                            if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                            {
+                                m_recursiveCount = 0;
+                                m_charWidthAdjDelta += 0.01f;
+                                return CalculatePreferredValues(defaultFontSize, marginSize, false);
+                            }
+                            #endregion
+
+                            // Adjust Point Size
+                            m_maxFontSize = defaultFontSize;
+
+                            defaultFontSize -= Mathf.Max((defaultFontSize - m_minFontSize) / 2, 0.05f);
+                            defaultFontSize = (int)(Mathf.Max(defaultFontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                            if (m_recursiveCount > 20) return new Vector2(renderedWidth, renderedHeight);
+                            return CalculatePreferredValues(defaultFontSize, marginSize, false);
+                        }
+                        #endregion End Text Auto-Sizing
+                    }
+                    #endregion End Check for Characters Exceeding Width of Text Container
+
+                }
+                #endregion Handle Visible Characters
+
+
+                // Check if Line Spacing of previous line needs to be adjusted.
+                #region Adjust Line Spacing
+                if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                {
+                    //Debug.Log("Inline - Adjusting Line Spacing on line #" + m_lineNumber);
+                    //float gap = 0; // Compute gap.
+
+                    float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                    //AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                    elementDescenderII -= offsetDelta;
+                    m_lineOffset += offsetDelta;
+
+                    m_startOfLineAscender += offsetDelta;
+                    savedWordWrapState.lineOffset = m_lineOffset;
+                    savedWordWrapState.previousLineAscender = m_startOfLineAscender;
+                }
+                #endregion
+
+
+                // Check if text Exceeds the vertical bounds of the margin area.
+                #region Check Vertical Bounds & Auto-Sizing
+                /*
+                if (m_maxAscender - elementDescenderII > marginHeight + 0.0001f)
+                {
+                    // Handle Line spacing adjustments
+                    #region Line Spacing Adjustments
+                    if (m_enableAutoSizing && m_lineSpacingDelta > m_lineSpacingMax && m_lineNumber > 0)
+                    {
+                        //loopCountA = 0;
+
+                        //m_lineSpacingDelta -= 1;
+                        //GenerateTextMesh();
+                        //return;
+                    }
+                    #endregion
+
+
+                    // Handle Text Auto-sizing resulting from text exceeding vertical bounds.
+                    #region Text Auto-Sizing (Text greater than vertical bounds)
+                    if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                    {
+                        m_maxFontSize = m_fontSize;
+
+                        m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                        m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                        //m_recursiveCount = 0;
+                        //if (loopCountA > 20) return; // Added to debug 
+                        CalculatePreferredValues(m_fontSize, marginSize, false);
+                        return Vector2.zero;
+                    }
+                    #endregion Text Auto-Sizing
+                }
+                */
+                #endregion Check Vertical Bounds
+
+
+                // Handle xAdvance & Tabulation Stops. Tab stops at every 25% of Font Size.
+                #region XAdvance, Tabulation & Stops
+                if (charCode == 9)
+                {
+                    float tabSize = m_currentFontAsset.faceInfo.tabWidth * currentElementScale;
+                    float tabs = Mathf.Ceil(m_xAdvance / tabSize) * tabSize;
+                    m_xAdvance = tabs > m_xAdvance ? tabs : m_xAdvance + tabSize;
+                }
+                else if (m_monoSpacing != 0)
+                {
+                    m_xAdvance += (m_monoSpacing - monoAdvance + ((characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale) + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+                else
+                {
+                    m_xAdvance += ((m_cached_TextElement.glyph.metrics.horizontalAdvance * bold_xAdvance_multiplier + characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset + glyphAdjustments.xAdvance) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+
+
+                #endregion Tabulation & Stops
+
+
+                // Handle Carriage Return
+                #region Carriage Return
+                if (charCode == 13)
+                {
+                    maxXAdvance = Mathf.Max(maxXAdvance, renderedWidth + m_xAdvance);
+                    renderedWidth = 0;
+                    m_xAdvance = 0 + tag_Indent;
+                }
+                #endregion Carriage Return
+
+
+                // Handle Line Spacing Adjustments + Word Wrapping & special case for last line.
+                #region Check for Line Feed and Last Character
+                if (charCode == 10 || m_characterCount == totalCharacterCount - 1)
+                {
+                    // Check if Line Spacing of previous line needs to be adjusted.
+                    if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET)
+                    {
+                        //Debug.Log("(2) Adjusting Line Spacing on line #" + m_lineNumber);
+                        float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                        //AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                        elementDescenderII -= offsetDelta;
+                        m_lineOffset += offsetDelta;
+                    }
+
+                    // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                    //float lineAscender = m_maxLineAscender - m_lineOffset;
+                    float lineDescender = m_maxLineDescender - m_lineOffset;
+
+                    // Update maxDescender and maxVisibleDescender
+                    m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+
+                    m_firstCharacterOfLine = m_characterCount + 1;
+
+                    // Store PreferredWidth paying attention to linefeed and last character of text.
+                    if (charCode == 10 && m_characterCount != totalCharacterCount - 1)
+                    {
+                        maxXAdvance = Mathf.Max(maxXAdvance, renderedWidth + linebreakingWidth);
+                        renderedWidth = 0;
+                    }
+                    else
+                        renderedWidth = Mathf.Max(maxXAdvance, renderedWidth + linebreakingWidth);
+
+
+                    renderedHeight = m_maxAscender - m_maxDescender;
+
+
+                    // Add new line if not last lines or character.
+                    if (charCode == 10)
+                    {
+                        // Store the state of the line before starting on the new line.
+                        SaveWordWrappingState(ref savedLineState, i, m_characterCount);
+                        // Store the state of the last Character before the new line.
+                        SaveWordWrappingState(ref savedWordWrapState, i, m_characterCount);
+
+                        m_lineNumber += 1;
+
+                        // Apply Line Spacing
+                        if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                        {
+                            lineOffsetDelta = 0 - m_maxLineDescender + elementAscender + (lineGap + m_lineSpacing + m_paragraphSpacing + m_lineSpacingDelta) * baseScale;
+                            m_lineOffset += lineOffsetDelta;
+                        }
+                        else
+                            m_lineOffset += m_lineHeight + (m_lineSpacing + m_paragraphSpacing) * baseScale;
+
+                        m_maxLineAscender = k_LargeNegativeFloat;
+                        m_maxLineDescender = k_LargePositiveFloat;
+                        m_startOfLineAscender = elementAscender;
+
+                        m_xAdvance = 0 + tag_LineIndent + tag_Indent;
+
+                        m_characterCount += 1;
+                        continue;
+                    }
+                }
+                #endregion Check for Linefeed or Last Character
+
+
+                // Save State of Mesh Creation for handling of Word Wrapping
+                #region Save Word Wrapping State
+                if (m_enableWordWrapping || m_overflowMode == TextOverflowModes.Truncate || m_overflowMode == TextOverflowModes.Ellipsis)
+                {
+                    if ((char.IsWhiteSpace((char)charCode) || charCode == 0x200B || charCode == 0x2D || charCode == 0xAD) && !m_isNonBreakingSpace && charCode != 0xA0 && charCode != 0x2011 && charCode != 0x202F && charCode != 0x2060)
+                    {
+                        // We store the state of numerous variables for the most recent Space, LineFeed or Carriage Return to enable them to be restored 
+                        // for Word Wrapping.
+                        SaveWordWrappingState(ref savedWordWrapState, i, m_characterCount);
+                        m_isCharacterWrappingEnabled = false;
+                        isFirstWord = false;
+                    }
+                    // Handling for East Asian languages
+                    else if ((charCode > 0x1100 && charCode < 0x11ff || /* Hangul Jamo */
+                                charCode > 0x2E80 && charCode < 0x9FFF || /* CJK */
+                                charCode > 0xA960 && charCode < 0xA97F || /* Hangul Jame Extended-A */
+                                charCode > 0xAC00 && charCode < 0xD7FF || /* Hangul Syllables */
+                                charCode > 0xF900 && charCode < 0xFAFF || /* CJK Compatibility Ideographs */
+                                charCode > 0xFE30 && charCode < 0xFE4F || /* CJK Compatibility Forms */
+                                charCode > 0xFF00 && charCode < 0xFFEF)   /* CJK Halfwidth */
+                                && !m_isNonBreakingSpace)
+                    {
+                        if (isFirstWord || isLastBreakingChar || TMP_Settings.linebreakingRules.leadingCharacters.ContainsKey(charCode) == false &&
+                            (m_characterCount < totalCharacterCount - 1 &&
+                            TMP_Settings.linebreakingRules.followingCharacters.ContainsKey(m_internalCharacterInfo[m_characterCount + 1].character) == false))
+                        {
+                            SaveWordWrappingState(ref savedWordWrapState, i, m_characterCount);
+                            m_isCharacterWrappingEnabled = false;
+                            isFirstWord = false;
+                        }
+                    }
+                    else if ((isFirstWord || m_isCharacterWrappingEnabled == true || isLastBreakingChar))
+                        SaveWordWrappingState(ref savedWordWrapState, i, m_characterCount);
+                }
+                #endregion Save Word Wrapping State
+
+                m_characterCount += 1;
+            }
+
+            // Check Auto Sizing and increase font size to fill text container.
+            #region Check Auto-Sizing (Upper Font Size Bounds)
+            fontSizeDelta = m_maxFontSize - m_minFontSize;
+            if (!m_isCharacterWrappingEnabled && ignoreTextAutoSizing == false && fontSizeDelta > 0.051f && defaultFontSize < m_fontSizeMax)
+            {
+                m_minFontSize = defaultFontSize;
+                defaultFontSize += Mathf.Max((m_maxFontSize - defaultFontSize) / 2, 0.05f);
+                defaultFontSize = (int)(Mathf.Min(defaultFontSize, m_fontSizeMax) * 20 + 0.5f) / 20f;
+
+                if (m_recursiveCount > 20) return new Vector2(renderedWidth, renderedHeight);
+                return CalculatePreferredValues(defaultFontSize, marginSize, false);
+            }
+            #endregion End Auto-sizing Check
+
+
+            m_isCharacterWrappingEnabled = false;
+            m_isCalculatingPreferredValues = false;
+
+            // Adjust Preferred Width and Height to account for Margins.
+            renderedWidth += m_margin.x > 0 ? m_margin.x : 0;
+            renderedWidth += m_margin.z > 0 ? m_margin.z : 0;
+
+            renderedHeight += m_margin.y > 0 ? m_margin.y : 0;
+            renderedHeight += m_margin.w > 0 ? m_margin.w : 0;
+
+            // Round Preferred Values to nearest 5/100.
+            renderedWidth = (int)(renderedWidth * 100 + 1f) / 100f;
+            renderedHeight = (int)(renderedHeight * 100 + 1f) / 100f;
+
+            //Debug.Log("Preferred Values: (" + renderedWidth + ", " + renderedHeight + ") with Recursive count of " + m_recursiveCount);
+
+            ////Profiler.EndSample();
+            return new Vector2(renderedWidth, renderedHeight);
+        }
+
+
+        /// <summary>
+        /// Method returning the compound bounds of the text object and child sub objects.
+        /// </summary>
+        /// <returns></returns>
+        protected virtual Bounds GetCompoundBounds() { return new Bounds(); }
+
+
+        /// <summary>
+        /// Method which returns the bounds of the text object;
+        /// </summary>
+        /// <returns></returns>
+        protected Bounds GetTextBounds()
+        {
+            if (m_textInfo == null || m_textInfo.characterCount > m_textInfo.characterInfo.Length) return new Bounds();
+
+            Extents extent = new Extents(k_LargePositiveVector2, k_LargeNegativeVector2);
+
+            for (int i = 0; i < m_textInfo.characterCount && i < m_textInfo.characterInfo.Length; i++)
+            {
+                if (!m_textInfo.characterInfo[i].isVisible) continue;
+
+                extent.min.x = Mathf.Min(extent.min.x, m_textInfo.characterInfo[i].bottomLeft.x);
+                extent.min.y = Mathf.Min(extent.min.y, m_textInfo.characterInfo[i].descender);
+
+                extent.max.x = Mathf.Max(extent.max.x, m_textInfo.characterInfo[i].xAdvance);
+                extent.max.y = Mathf.Max(extent.max.y, m_textInfo.characterInfo[i].ascender);
+            }
+
+            Vector2 size;
+            size.x = extent.max.x - extent.min.x;
+            size.y = extent.max.y - extent.min.y;
+
+            Vector3 center = (extent.min + extent.max) / 2;
+
+            return new Bounds(center, size);
+        }
+
+
+        /// <summary>
+        /// Method which returns the bounds of the text object;
+        /// </summary>
+        /// <param name="onlyVisibleCharacters"></param>
+        /// <returns></returns>
+        protected Bounds GetTextBounds(bool onlyVisibleCharacters)
+        {
+            if (m_textInfo == null) return new Bounds();
+
+            Extents extent = new Extents(k_LargePositiveVector2, k_LargeNegativeVector2);
+
+            for (int i = 0; i < m_textInfo.characterCount; i++)
+            {
+                if ((i > maxVisibleCharacters || m_textInfo.characterInfo[i].lineNumber > m_maxVisibleLines) && onlyVisibleCharacters) break;
+
+                if (onlyVisibleCharacters && !m_textInfo.characterInfo[i].isVisible) continue;
+
+                extent.min.x = Mathf.Min(extent.min.x, m_textInfo.characterInfo[i].origin);
+                extent.min.y = Mathf.Min(extent.min.y, m_textInfo.characterInfo[i].descender);
+
+                extent.max.x = Mathf.Max(extent.max.x, m_textInfo.characterInfo[i].xAdvance);
+                extent.max.y = Mathf.Max(extent.max.y, m_textInfo.characterInfo[i].ascender);
+            }
+
+            Vector2 size;
+            size.x = extent.max.x - extent.min.x;
+            size.y = extent.max.y - extent.min.y;
+
+            Vector2 center = (extent.min + extent.max) / 2;
+
+            return new Bounds(center, size);
+        }
+
+
+        /// <summary>
+        /// Method to adjust line spacing as a result of using different fonts or font point size.
+        /// </summary>
+        /// <param name="startIndex"></param>
+        /// <param name="endIndex"></param>
+        /// <param name="offset"></param>
+        protected virtual void AdjustLineOffset(int startIndex, int endIndex, float offset) { }
+
+
+        /// <summary>
+        /// Function to increase the size of the Line Extents Array.
+        /// </summary>
+        /// <param name="size"></param>
+        protected void ResizeLineExtents(int size)
+        {
+            size = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size + 1);
+
+            TMP_LineInfo[] temp_lineInfo = new TMP_LineInfo[size];
+            for (int i = 0; i < size; i++)
+            {
+                if (i < m_textInfo.lineInfo.Length)
+                    temp_lineInfo[i] = m_textInfo.lineInfo[i];
+                else
+                {
+                    temp_lineInfo[i].lineExtents.min = k_LargePositiveVector2;
+                    temp_lineInfo[i].lineExtents.max = k_LargeNegativeVector2;
+
+                    temp_lineInfo[i].ascender = k_LargeNegativeFloat;
+                    temp_lineInfo[i].descender = k_LargePositiveFloat;
+                }
+            }
+
+            m_textInfo.lineInfo = temp_lineInfo;
+        }
+        protected static Vector2 k_LargePositiveVector2 = new Vector2(TMP_Math.INT_MAX, TMP_Math.INT_MAX);
+        protected static Vector2 k_LargeNegativeVector2 = new Vector2(TMP_Math.INT_MIN, TMP_Math.INT_MIN);
+        protected static float k_LargePositiveFloat = TMP_Math.FLOAT_MAX;
+        protected static float k_LargeNegativeFloat = TMP_Math.FLOAT_MIN;
+        protected static int k_LargePositiveInt = TMP_Math.INT_MAX;
+        protected static int k_LargeNegativeInt = TMP_Math.INT_MIN;
+
+        /// <summary>
+        /// Function used to evaluate the length of a text string.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <returns></returns>
+        public virtual TMP_TextInfo GetTextInfo(string text) { return null; }
+
+
+        /// <summary>
+        /// Function to force an update of the margin size.
+        /// </summary>
+        public virtual void ComputeMarginSize() { }
+
+
+        /// <summary>
+        /// Function used in conjunction with GetTextInfo to figure out Array allocations.
+        /// </summary>
+        /// <param name="chars"></param>
+        /// <returns></returns>
+        //protected int GetArraySizes(int[] chars)
+        //{
+        //    //Debug.Log("Set Array Size called.");
+
+        //    //int visibleCount = 0;
+        //    //int totalCount = 0;
+        //    int tagEnd = 0;
+
+        //    m_totalCharacterCount = 0;
+        //    m_isUsingBold = false;
+        //    m_isParsingText = false;
+
+
+        //    //m_VisibleCharacters.Clear();
+
+        //    for (int i = 0; chars[i] != 0; i++)
+        //    {
+        //        int c = chars[i];
+
+        //        if (m_isRichText && c == 60) // if Char '<'
+        //        {
+        //            // Check if Tag is Valid
+        //            if (ValidateHtmlTag(chars, i + 1, out tagEnd))
+        //            {
+        //                i = tagEnd;
+        //                //if ((m_style & FontStyles.Underline) == FontStyles.Underline) visibleCount += 3;
+
+        //                if ((m_style & FontStyles.Bold) == FontStyles.Bold) m_isUsingBold = true;
+
+        //                continue;
+        //            }
+        //        }
+
+        //        //if (!char.IsWhiteSpace((char)c) && c != 0x200B)
+        //        //{
+        //            //visibleCount += 1;
+        //        //}
+
+        //        //m_VisibleCharacters.Add((char)c);
+        //        m_totalCharacterCount += 1;
+        //    }
+
+        //    return m_totalCharacterCount;
+        //}
+
+
+        /// <summary>
+        /// Save the State of various variables used in the mesh creation loop in conjunction with Word Wrapping
+        /// </summary>
+        /// <param name="state"></param>
+        /// <param name="index"></param>
+        /// <param name="count"></param>
+        protected void SaveWordWrappingState(ref WordWrapState state, int index, int count)
+        {
+            // Multi Font & Material support related
+            state.currentFontAsset = m_currentFontAsset;
+            state.currentSpriteAsset = m_currentSpriteAsset;
+            state.currentMaterial = m_currentMaterial;
+            state.currentMaterialIndex = m_currentMaterialIndex;
+
+            state.previous_WordBreak = index;
+            state.total_CharacterCount = count;
+            state.visible_CharacterCount = m_lineVisibleCharacterCount;
+            //state.visible_CharacterCount = m_visibleCharacterCount;
+            //state.visible_SpriteCount = m_visibleSpriteCount;
+            state.visible_LinkCount = m_textInfo.linkCount;
+
+            state.firstCharacterIndex = m_firstCharacterOfLine;
+            state.firstVisibleCharacterIndex = m_firstVisibleCharacterOfLine;
+            state.lastVisibleCharIndex = m_lastVisibleCharacterOfLine;
+
+            state.fontStyle = m_FontStyleInternal;
+            state.fontScale = m_fontScale;
+            //state.maxFontScale = m_maxFontScale;
+            state.fontScaleMultiplier = m_fontScaleMultiplier;
+            state.currentFontSize = m_currentFontSize;
+
+            state.xAdvance = m_xAdvance;
+            state.maxCapHeight = m_maxCapHeight;
+            state.maxAscender = m_maxAscender;
+            state.maxDescender = m_maxDescender;
+            state.maxLineAscender = m_maxLineAscender;
+            state.maxLineDescender = m_maxLineDescender;
+            state.previousLineAscender = m_startOfLineAscender;
+            state.preferredWidth = m_preferredWidth;
+            state.preferredHeight = m_preferredHeight;
+            state.meshExtents = m_meshExtents;
+
+            state.lineNumber = m_lineNumber;
+            state.lineOffset = m_lineOffset;
+            state.baselineOffset = m_baselineOffset;
+
+            //state.alignment = m_lineJustification;
+            state.vertexColor = m_htmlColor;
+            state.underlineColor = m_underlineColor;
+            state.strikethroughColor = m_strikethroughColor;
+            state.highlightColor = m_highlightColor;
+
+            state.isNonBreakingSpace = m_isNonBreakingSpace;
+            state.tagNoParsing = tag_NoParsing;
+
+            // XML Tag Stack
+            state.basicStyleStack = m_fontStyleStack;
+            state.colorStack = m_colorStack;
+            state.underlineColorStack = m_underlineColorStack;
+            state.strikethroughColorStack = m_strikethroughColorStack;
+            state.highlightColorStack = m_highlightColorStack;
+            state.colorGradientStack = m_colorGradientStack;
+            state.sizeStack = m_sizeStack;
+            state.indentStack = m_indentStack;
+            state.fontWeightStack = m_FontWeightStack;
+            state.styleStack = m_styleStack;
+            state.baselineStack = m_baselineOffsetStack;
+            state.actionStack = m_actionStack;
+            state.materialReferenceStack = m_materialReferenceStack;
+            state.lineJustificationStack = m_lineJustificationStack;
+            //state.spriteAnimationStack = m_spriteAnimationStack;
+
+            state.spriteAnimationID = m_spriteAnimationID;
+
+            if (m_lineNumber < m_textInfo.lineInfo.Length)
+                state.lineInfo = m_textInfo.lineInfo[m_lineNumber];
+        }
+
+
+        /// <summary>
+        /// Restore the State of various variables used in the mesh creation loop.
+        /// </summary>
+        /// <param name="state"></param>
+        /// <returns></returns>
+        protected int RestoreWordWrappingState(ref WordWrapState state)
+        {
+            int index = state.previous_WordBreak;
+
+            // Multi Font & Material support related
+            m_currentFontAsset = state.currentFontAsset;
+            m_currentSpriteAsset = state.currentSpriteAsset;
+            m_currentMaterial = state.currentMaterial;
+            m_currentMaterialIndex = state.currentMaterialIndex;
+
+            m_characterCount = state.total_CharacterCount + 1;
+            m_lineVisibleCharacterCount = state.visible_CharacterCount;
+            //m_visibleCharacterCount = state.visible_CharacterCount;
+            //m_visibleSpriteCount = state.visible_SpriteCount;
+            m_textInfo.linkCount = state.visible_LinkCount;
+
+            m_firstCharacterOfLine = state.firstCharacterIndex;
+            m_firstVisibleCharacterOfLine = state.firstVisibleCharacterIndex;
+            m_lastVisibleCharacterOfLine = state.lastVisibleCharIndex;
+
+            m_FontStyleInternal = state.fontStyle;
+            m_fontScale = state.fontScale;
+            m_fontScaleMultiplier = state.fontScaleMultiplier;
+            //m_maxFontScale = state.maxFontScale;
+            m_currentFontSize = state.currentFontSize;
+
+            m_xAdvance = state.xAdvance;
+            m_maxCapHeight = state.maxCapHeight;
+            m_maxAscender = state.maxAscender;
+            m_maxDescender = state.maxDescender;
+            m_maxLineAscender = state.maxLineAscender;
+            m_maxLineDescender = state.maxLineDescender;
+            m_startOfLineAscender = state.previousLineAscender;
+            m_preferredWidth = state.preferredWidth;
+            m_preferredHeight = state.preferredHeight;
+            m_meshExtents = state.meshExtents;
+
+            m_lineNumber = state.lineNumber;
+            m_lineOffset = state.lineOffset;
+            m_baselineOffset = state.baselineOffset;
+
+            //m_lineJustification = state.alignment;
+            m_htmlColor = state.vertexColor;
+            m_underlineColor = state.underlineColor;
+            m_strikethroughColor = state.strikethroughColor;
+            m_highlightColor = state.highlightColor;
+
+            m_isNonBreakingSpace = state.isNonBreakingSpace;
+            tag_NoParsing = state.tagNoParsing;
+
+            // XML Tag Stack
+            m_fontStyleStack = state.basicStyleStack;
+            m_colorStack = state.colorStack;
+            m_underlineColorStack = state.underlineColorStack;
+            m_strikethroughColorStack = state.strikethroughColorStack;
+            m_highlightColorStack = state.highlightColorStack;
+            m_colorGradientStack = state.colorGradientStack;
+            m_sizeStack = state.sizeStack;
+            m_indentStack = state.indentStack;
+            m_FontWeightStack = state.fontWeightStack;
+            m_styleStack = state.styleStack;
+            m_baselineOffsetStack = state.baselineStack;
+            m_actionStack = state.actionStack;
+            m_materialReferenceStack = state.materialReferenceStack;
+            m_lineJustificationStack = state.lineJustificationStack;
+            //m_spriteAnimationStack = state.spriteAnimationStack;
+
+            m_spriteAnimationID = state.spriteAnimationID;
+
+            if (m_lineNumber < m_textInfo.lineInfo.Length)
+                m_textInfo.lineInfo[m_lineNumber] = state.lineInfo;
+
+            return index;
+        }
+
+
+        /// <summary>
+        /// Store vertex information for each character.
+        /// </summary>
+        /// <param name="style_padding">Style_padding.</param>
+        /// <param name="vertexColor">Vertex color.</param>
+        protected virtual void SaveGlyphVertexInfo(float padding, float style_padding, Color32 vertexColor)
+        {
+            // Save the Vertex Position for the Character
+            #region Setup Mesh Vertices
+            m_textInfo.characterInfo[m_characterCount].vertex_BL.position = m_textInfo.characterInfo[m_characterCount].bottomLeft;
+            m_textInfo.characterInfo[m_characterCount].vertex_TL.position = m_textInfo.characterInfo[m_characterCount].topLeft;
+            m_textInfo.characterInfo[m_characterCount].vertex_TR.position = m_textInfo.characterInfo[m_characterCount].topRight;
+            m_textInfo.characterInfo[m_characterCount].vertex_BR.position = m_textInfo.characterInfo[m_characterCount].bottomRight;
+            #endregion
+
+
+            #region Setup Vertex Colors
+            // Alpha is the lower of the vertex color or tag color alpha used.
+            vertexColor.a = m_fontColor32.a < vertexColor.a ? (byte)(m_fontColor32.a) : (byte)(vertexColor.a);
+
+            // Handle Vertex Colors & Vertex Color Gradient
+            if (!m_enableVertexGradient)
+            {
+                m_textInfo.characterInfo[m_characterCount].vertex_BL.color = vertexColor;
+                m_textInfo.characterInfo[m_characterCount].vertex_TL.color = vertexColor;
+                m_textInfo.characterInfo[m_characterCount].vertex_TR.color = vertexColor;
+                m_textInfo.characterInfo[m_characterCount].vertex_BR.color = vertexColor;
+            }
+            else
+            {
+                if (!m_overrideHtmlColors && m_colorStack.m_Index > 1)
+                {
+                    m_textInfo.characterInfo[m_characterCount].vertex_BL.color = vertexColor;
+                    m_textInfo.characterInfo[m_characterCount].vertex_TL.color = vertexColor;
+                    m_textInfo.characterInfo[m_characterCount].vertex_TR.color = vertexColor;
+                    m_textInfo.characterInfo[m_characterCount].vertex_BR.color = vertexColor;
+                }
+                else // Handle Vertex Color Gradient
+                {
+                    // Use Vertex Color Gradient Preset (if one is assigned)
+                    if (m_fontColorGradientPreset != null)
+                    {
+                        m_textInfo.characterInfo[m_characterCount].vertex_BL.color = m_fontColorGradientPreset.bottomLeft * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_TL.color = m_fontColorGradientPreset.topLeft * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_TR.color = m_fontColorGradientPreset.topRight * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_BR.color = m_fontColorGradientPreset.bottomRight * vertexColor;
+                    }
+                    else
+                    {
+                        m_textInfo.characterInfo[m_characterCount].vertex_BL.color = m_fontColorGradient.bottomLeft * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_TL.color = m_fontColorGradient.topLeft * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_TR.color = m_fontColorGradient.topRight * vertexColor;
+                        m_textInfo.characterInfo[m_characterCount].vertex_BR.color = m_fontColorGradient.bottomRight * vertexColor;
+                    }
+                }
+            }
+
+            if (m_colorGradientPreset != null)
+            {
+                m_textInfo.characterInfo[m_characterCount].vertex_BL.color *= m_colorGradientPreset.bottomLeft;
+                m_textInfo.characterInfo[m_characterCount].vertex_TL.color *= m_colorGradientPreset.topLeft;
+                m_textInfo.characterInfo[m_characterCount].vertex_TR.color *= m_colorGradientPreset.topRight;
+                m_textInfo.characterInfo[m_characterCount].vertex_BR.color *= m_colorGradientPreset.bottomRight;
+            }
+            #endregion
+
+            // Apply style_padding only if this is a SDF Shader.
+            if (!m_isSDFShader)
+                style_padding = 0f;
+
+
+            // Setup UVs for the Character
+            #region Setup UVs
+
+            Vector2 uv0;
+            uv0.x = (m_cached_TextElement.glyph.glyphRect.x - padding - style_padding) / m_currentFontAsset.atlasWidth;
+            uv0.y = (m_cached_TextElement.glyph.glyphRect.y - padding - style_padding) / m_currentFontAsset.atlasHeight;
+
+            Vector2 uv1;
+            uv1.x = uv0.x;
+            uv1.y = (m_cached_TextElement.glyph.glyphRect.y + padding + style_padding + m_cached_TextElement.glyph.glyphRect.height) / m_currentFontAsset.atlasHeight;
+
+            Vector2 uv2;
+            uv2.x = (m_cached_TextElement.glyph.glyphRect.x + padding + style_padding + m_cached_TextElement.glyph.glyphRect.width) / m_currentFontAsset.atlasWidth;
+            uv2.y = uv1.y;
+
+            Vector2 uv3;
+            uv3.x = uv2.x;
+            uv3.y = uv0.y;
+
+            // Store UV Information
+            m_textInfo.characterInfo[m_characterCount].vertex_BL.uv = uv0;
+            m_textInfo.characterInfo[m_characterCount].vertex_TL.uv = uv1;
+            m_textInfo.characterInfo[m_characterCount].vertex_TR.uv = uv2;
+            m_textInfo.characterInfo[m_characterCount].vertex_BR.uv = uv3;
+            #endregion Setup UVs
+
+
+            // Normal
+            #region Setup Normals & Tangents
+            //Vector3 normal = new Vector3(0, 0, -1);
+            //m_textInfo.characterInfo[m_characterCount].vertex_BL.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TL.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TR.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_BR.normal = normal;
+
+            // Tangents
+            //Vector4 tangent = new Vector4(-1, 0, 0, 1);
+            //m_textInfo.characterInfo[m_characterCount].vertex_BL.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TL.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TR.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_BR.tangent = tangent;
+            #endregion end Normals & Tangents
+        }
+
+
+        /// <summary>
+        /// Store vertex information for each sprite.
+        /// </summary>
+        /// <param name="padding"></param>
+        /// <param name="style_padding"></param>
+        /// <param name="vertexColor"></param>
+        protected virtual void SaveSpriteVertexInfo(Color32 vertexColor)
+        {
+            // Save the Vertex Position for the Character
+            #region Setup Mesh Vertices
+            m_textInfo.characterInfo[m_characterCount].vertex_BL.position = m_textInfo.characterInfo[m_characterCount].bottomLeft;
+            m_textInfo.characterInfo[m_characterCount].vertex_TL.position = m_textInfo.characterInfo[m_characterCount].topLeft;
+            m_textInfo.characterInfo[m_characterCount].vertex_TR.position = m_textInfo.characterInfo[m_characterCount].topRight;
+            m_textInfo.characterInfo[m_characterCount].vertex_BR.position = m_textInfo.characterInfo[m_characterCount].bottomRight;
+            #endregion
+
+            // Vertex Color Alpha
+            if (m_tintAllSprites) m_tintSprite = true;
+            Color32 spriteColor = m_tintSprite ? m_spriteColor.Multiply(vertexColor) : m_spriteColor;
+            spriteColor.a = spriteColor.a < m_fontColor32.a ? spriteColor.a = spriteColor.a < vertexColor.a ? spriteColor.a : vertexColor.a : m_fontColor32.a;
+
+            Color32 c0 = spriteColor;
+            Color32 c1 = spriteColor;
+            Color32 c2 = spriteColor;
+            Color32 c3 = spriteColor;
+
+            if (m_enableVertexGradient)
+            {
+                if (m_fontColorGradientPreset != null)
+                {
+                    c0 = m_tintSprite ? c0.Multiply(m_fontColorGradientPreset.bottomLeft) : c0;
+                    c1 = m_tintSprite ? c1.Multiply(m_fontColorGradientPreset.topLeft) : c1;
+                    c2 = m_tintSprite ? c2.Multiply(m_fontColorGradientPreset.topRight) : c2;
+                    c3 = m_tintSprite ? c3.Multiply(m_fontColorGradientPreset.bottomRight) : c3;
+                }
+                else
+                {
+                    c0 = m_tintSprite ? c0.Multiply(m_fontColorGradient.bottomLeft) : c0;
+                    c1 = m_tintSprite ? c1.Multiply(m_fontColorGradient.topLeft) : c1;
+                    c2 = m_tintSprite ? c2.Multiply(m_fontColorGradient.topRight) : c2;
+                    c3 = m_tintSprite ? c3.Multiply(m_fontColorGradient.bottomRight) : c3;
+                }
+            }
+
+            if (m_colorGradientPreset != null)
+            {
+                c0 = m_tintSprite ? c0.Multiply(m_colorGradientPreset.bottomLeft) : c0;
+                c1 = m_tintSprite ? c1.Multiply(m_colorGradientPreset.topLeft) : c1;
+                c2 = m_tintSprite ? c2.Multiply(m_colorGradientPreset.topRight) : c2;
+                c3 = m_tintSprite ? c3.Multiply(m_colorGradientPreset.bottomRight) : c3;
+            }
+
+            m_textInfo.characterInfo[m_characterCount].vertex_BL.color = c0;
+            m_textInfo.characterInfo[m_characterCount].vertex_TL.color = c1;
+            m_textInfo.characterInfo[m_characterCount].vertex_TR.color = c2;
+            m_textInfo.characterInfo[m_characterCount].vertex_BR.color = c3;
+
+
+            // Setup UVs for the Character
+            #region Setup UVs
+            Vector2 uv0 = new Vector2((float)m_cached_TextElement.glyph.glyphRect.x / m_currentSpriteAsset.spriteSheet.width, (float)m_cached_TextElement.glyph.glyphRect.y / m_currentSpriteAsset.spriteSheet.height);  // bottom left
+            Vector2 uv1 = new Vector2(uv0.x, (float)(m_cached_TextElement.glyph.glyphRect.y + m_cached_TextElement.glyph.glyphRect.height) / m_currentSpriteAsset.spriteSheet.height);  // top left
+            Vector2 uv2 = new Vector2((float)(m_cached_TextElement.glyph.glyphRect.x + m_cached_TextElement.glyph.glyphRect.width) / m_currentSpriteAsset.spriteSheet.width, uv1.y); // top right
+            Vector2 uv3 = new Vector2(uv2.x, uv0.y); // bottom right
+
+            // Store UV Information
+            m_textInfo.characterInfo[m_characterCount].vertex_BL.uv = uv0;
+            m_textInfo.characterInfo[m_characterCount].vertex_TL.uv = uv1;
+            m_textInfo.characterInfo[m_characterCount].vertex_TR.uv = uv2;
+            m_textInfo.characterInfo[m_characterCount].vertex_BR.uv = uv3;
+            #endregion Setup UVs
+
+
+            // Normal
+            #region Setup Normals & Tangents
+            //Vector3 normal = new Vector3(0, 0, -1);
+            //m_textInfo.characterInfo[m_characterCount].vertex_BL.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TL.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TR.normal = normal;
+            //m_textInfo.characterInfo[m_characterCount].vertex_BR.normal = normal;
+
+            // Tangents
+            //Vector4 tangent = new Vector4(-1, 0, 0, 1);
+            //m_textInfo.characterInfo[m_characterCount].vertex_BL.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TL.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_TR.tangent = tangent;
+            //m_textInfo.characterInfo[m_characterCount].vertex_BR.tangent = tangent;
+            #endregion end Normals & Tangents
+
+        }
+
+
+        /// <summary>
+        /// Store vertex attributes into the appropriate TMP_MeshInfo.
+        /// </summary>
+        /// <param name="i"></param>
+        /// <param name="index_X4"></param>
+        protected virtual void FillCharacterVertexBuffers(int i, int index_X4)
+        {
+            int materialIndex = m_textInfo.characterInfo[i].materialReferenceIndex;
+            index_X4 = m_textInfo.meshInfo[materialIndex].vertexCount;
+
+            // Make sure buffers allocation are sufficient to hold the vertex data
+            //if (m_textInfo.meshInfo[materialIndex].vertices.Length < index_X4 + 4)
+            //    m_textInfo.meshInfo[materialIndex].ResizeMeshInfo(Mathf.NextPowerOfTwo(index_X4 + 4));
+
+
+            TMP_CharacterInfo[] characterInfoArray = m_textInfo.characterInfo;
+            m_textInfo.characterInfo[i].vertexIndex = index_X4;
+
+            // Setup Vertices for Characters
+            m_textInfo.meshInfo[materialIndex].vertices[0 + index_X4] = characterInfoArray[i].vertex_BL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[1 + index_X4] = characterInfoArray[i].vertex_TL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[2 + index_X4] = characterInfoArray[i].vertex_TR.position;
+            m_textInfo.meshInfo[materialIndex].vertices[3 + index_X4] = characterInfoArray[i].vertex_BR.position;
+
+
+            // Setup UVS0
+            m_textInfo.meshInfo[materialIndex].uvs0[0 + index_X4] = characterInfoArray[i].vertex_BL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[1 + index_X4] = characterInfoArray[i].vertex_TL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[2 + index_X4] = characterInfoArray[i].vertex_TR.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[3 + index_X4] = characterInfoArray[i].vertex_BR.uv;
+
+
+            // Setup UVS2
+            m_textInfo.meshInfo[materialIndex].uvs2[0 + index_X4] = characterInfoArray[i].vertex_BL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[1 + index_X4] = characterInfoArray[i].vertex_TL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[2 + index_X4] = characterInfoArray[i].vertex_TR.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[3 + index_X4] = characterInfoArray[i].vertex_BR.uv2;
+
+
+            // Setup UVS4
+            //m_textInfo.meshInfo[0].uvs4[0 + index_X4] = characterInfoArray[i].vertex_BL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[1 + index_X4] = characterInfoArray[i].vertex_TL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[2 + index_X4] = characterInfoArray[i].vertex_TR.uv4;
+            //m_textInfo.meshInfo[0].uvs4[3 + index_X4] = characterInfoArray[i].vertex_BR.uv4;
+
+
+            // setup Vertex Colors
+            m_textInfo.meshInfo[materialIndex].colors32[0 + index_X4] = characterInfoArray[i].vertex_BL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[1 + index_X4] = characterInfoArray[i].vertex_TL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[2 + index_X4] = characterInfoArray[i].vertex_TR.color;
+            m_textInfo.meshInfo[materialIndex].colors32[3 + index_X4] = characterInfoArray[i].vertex_BR.color;
+
+            m_textInfo.meshInfo[materialIndex].vertexCount = index_X4 + 4;
+        }
+
+
+        protected virtual void FillCharacterVertexBuffers(int i, int index_X4, bool isVolumetric)
+        {
+            int materialIndex = m_textInfo.characterInfo[i].materialReferenceIndex;
+            index_X4 = m_textInfo.meshInfo[materialIndex].vertexCount;
+
+            TMP_CharacterInfo[] characterInfoArray = m_textInfo.characterInfo;
+            m_textInfo.characterInfo[i].vertexIndex = index_X4;
+
+            // Setup Vertices for Characters
+            m_textInfo.meshInfo[materialIndex].vertices[0 + index_X4] = characterInfoArray[i].vertex_BL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[1 + index_X4] = characterInfoArray[i].vertex_TL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[2 + index_X4] = characterInfoArray[i].vertex_TR.position;
+            m_textInfo.meshInfo[materialIndex].vertices[3 + index_X4] = characterInfoArray[i].vertex_BR.position;
+
+            if (isVolumetric)
+            {
+                Vector3 depth = new Vector3(0, 0, m_fontSize * m_fontScale);
+                m_textInfo.meshInfo[materialIndex].vertices[4 + index_X4] = characterInfoArray[i].vertex_BL.position + depth;
+                m_textInfo.meshInfo[materialIndex].vertices[5 + index_X4] = characterInfoArray[i].vertex_TL.position + depth;
+                m_textInfo.meshInfo[materialIndex].vertices[6 + index_X4] = characterInfoArray[i].vertex_TR.position + depth;
+                m_textInfo.meshInfo[materialIndex].vertices[7 + index_X4] = characterInfoArray[i].vertex_BR.position + depth;
+            }
+
+            // Setup UVS0
+            m_textInfo.meshInfo[materialIndex].uvs0[0 + index_X4] = characterInfoArray[i].vertex_BL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[1 + index_X4] = characterInfoArray[i].vertex_TL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[2 + index_X4] = characterInfoArray[i].vertex_TR.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[3 + index_X4] = characterInfoArray[i].vertex_BR.uv;
+
+            if (isVolumetric)
+            {
+                m_textInfo.meshInfo[materialIndex].uvs0[4 + index_X4] = characterInfoArray[i].vertex_BL.uv;
+                m_textInfo.meshInfo[materialIndex].uvs0[5 + index_X4] = characterInfoArray[i].vertex_TL.uv;
+                m_textInfo.meshInfo[materialIndex].uvs0[6 + index_X4] = characterInfoArray[i].vertex_TR.uv;
+                m_textInfo.meshInfo[materialIndex].uvs0[7 + index_X4] = characterInfoArray[i].vertex_BR.uv;
+            }
+
+
+            // Setup UVS2
+            m_textInfo.meshInfo[materialIndex].uvs2[0 + index_X4] = characterInfoArray[i].vertex_BL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[1 + index_X4] = characterInfoArray[i].vertex_TL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[2 + index_X4] = characterInfoArray[i].vertex_TR.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[3 + index_X4] = characterInfoArray[i].vertex_BR.uv2;
+
+            if (isVolumetric)
+            {
+                m_textInfo.meshInfo[materialIndex].uvs2[4 + index_X4] = characterInfoArray[i].vertex_BL.uv2;
+                m_textInfo.meshInfo[materialIndex].uvs2[5 + index_X4] = characterInfoArray[i].vertex_TL.uv2;
+                m_textInfo.meshInfo[materialIndex].uvs2[6 + index_X4] = characterInfoArray[i].vertex_TR.uv2;
+                m_textInfo.meshInfo[materialIndex].uvs2[7 + index_X4] = characterInfoArray[i].vertex_BR.uv2;
+            }
+
+
+            // Setup UVS4
+            //m_textInfo.meshInfo[0].uvs4[0 + index_X4] = characterInfoArray[i].vertex_BL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[1 + index_X4] = characterInfoArray[i].vertex_TL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[2 + index_X4] = characterInfoArray[i].vertex_TR.uv4;
+            //m_textInfo.meshInfo[0].uvs4[3 + index_X4] = characterInfoArray[i].vertex_BR.uv4;
+
+
+            // setup Vertex Colors
+            m_textInfo.meshInfo[materialIndex].colors32[0 + index_X4] = characterInfoArray[i].vertex_BL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[1 + index_X4] = characterInfoArray[i].vertex_TL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[2 + index_X4] = characterInfoArray[i].vertex_TR.color;
+            m_textInfo.meshInfo[materialIndex].colors32[3 + index_X4] = characterInfoArray[i].vertex_BR.color;
+
+            if (isVolumetric)
+            {
+                Color32 backColor = new Color32(255, 255, 128, 255);
+                m_textInfo.meshInfo[materialIndex].colors32[4 + index_X4] = backColor; //characterInfoArray[i].vertex_BL.color;
+                m_textInfo.meshInfo[materialIndex].colors32[5 + index_X4] = backColor; //characterInfoArray[i].vertex_TL.color;
+                m_textInfo.meshInfo[materialIndex].colors32[6 + index_X4] = backColor; //characterInfoArray[i].vertex_TR.color;
+                m_textInfo.meshInfo[materialIndex].colors32[7 + index_X4] = backColor; //characterInfoArray[i].vertex_BR.color;
+            }
+
+            m_textInfo.meshInfo[materialIndex].vertexCount = index_X4 + (!isVolumetric ? 4 : 8);
+        }
+
+
+        /// <summary>
+        /// Fill Vertex Buffers for Sprites
+        /// </summary>
+        /// <param name="i"></param>
+        /// <param name="spriteIndex_X4"></param>
+        protected virtual void FillSpriteVertexBuffers(int i, int index_X4)
+        {
+            int materialIndex = m_textInfo.characterInfo[i].materialReferenceIndex;
+            index_X4 = m_textInfo.meshInfo[materialIndex].vertexCount;
+
+            TMP_CharacterInfo[] characterInfoArray = m_textInfo.characterInfo;
+            m_textInfo.characterInfo[i].vertexIndex = index_X4;
+
+            // Setup Vertices for Characters
+            m_textInfo.meshInfo[materialIndex].vertices[0 + index_X4] = characterInfoArray[i].vertex_BL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[1 + index_X4] = characterInfoArray[i].vertex_TL.position;
+            m_textInfo.meshInfo[materialIndex].vertices[2 + index_X4] = characterInfoArray[i].vertex_TR.position;
+            m_textInfo.meshInfo[materialIndex].vertices[3 + index_X4] = characterInfoArray[i].vertex_BR.position;
+
+
+            // Setup UVS0
+            m_textInfo.meshInfo[materialIndex].uvs0[0 + index_X4] = characterInfoArray[i].vertex_BL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[1 + index_X4] = characterInfoArray[i].vertex_TL.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[2 + index_X4] = characterInfoArray[i].vertex_TR.uv;
+            m_textInfo.meshInfo[materialIndex].uvs0[3 + index_X4] = characterInfoArray[i].vertex_BR.uv;
+
+
+            // Setup UVS2
+            m_textInfo.meshInfo[materialIndex].uvs2[0 + index_X4] = characterInfoArray[i].vertex_BL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[1 + index_X4] = characterInfoArray[i].vertex_TL.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[2 + index_X4] = characterInfoArray[i].vertex_TR.uv2;
+            m_textInfo.meshInfo[materialIndex].uvs2[3 + index_X4] = characterInfoArray[i].vertex_BR.uv2;
+
+
+            // Setup UVS4
+            //m_textInfo.meshInfo[0].uvs4[0 + index_X4] = characterInfoArray[i].vertex_BL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[1 + index_X4] = characterInfoArray[i].vertex_TL.uv4;
+            //m_textInfo.meshInfo[0].uvs4[2 + index_X4] = characterInfoArray[i].vertex_TR.uv4;
+            //m_textInfo.meshInfo[0].uvs4[3 + index_X4] = characterInfoArray[i].vertex_BR.uv4;
+
+
+            // setup Vertex Colors
+            m_textInfo.meshInfo[materialIndex].colors32[0 + index_X4] = characterInfoArray[i].vertex_BL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[1 + index_X4] = characterInfoArray[i].vertex_TL.color;
+            m_textInfo.meshInfo[materialIndex].colors32[2 + index_X4] = characterInfoArray[i].vertex_TR.color;
+            m_textInfo.meshInfo[materialIndex].colors32[3 + index_X4] = characterInfoArray[i].vertex_BR.color;
+
+            m_textInfo.meshInfo[materialIndex].vertexCount = index_X4 + 4;
+        }
+
+
+        /// <summary>
+        /// Method to add the underline geometry.
+        /// </summary>
+        /// <param name="start"></param>
+        /// <param name="end"></param>
+        /// <param name="startScale"></param>
+        /// <param name="endScale"></param>
+        /// <param name="maxScale"></param>
+        /// <param name="underlineColor"></param>
+        protected virtual void DrawUnderlineMesh(Vector3 start, Vector3 end, ref int index, float startScale, float endScale, float maxScale, float sdfScale, Color32 underlineColor)
+        {
+            if (m_cached_Underline_Character == null)
+            {
+                if (!TMP_Settings.warningsDisabled)
+                    Debug.LogWarning("Unable to add underline since the Font Asset doesn't contain the underline character.", this);
+
+                return;
+            }
+
+            int verticesCount = index + 12;
+            // Check to make sure our current mesh buffer allocations can hold these new Quads.
+            if (verticesCount > m_textInfo.meshInfo[0].vertices.Length)
+            {
+                // Resize Mesh Buffers
+                m_textInfo.meshInfo[0].ResizeMeshInfo(verticesCount / 4);
+            }
+
+            // Adjust the position of the underline based on the lowest character. This matters for subscript character.
+            start.y = Mathf.Min(start.y, end.y);
+            end.y = Mathf.Min(start.y, end.y);
+
+            float segmentWidth = m_cached_Underline_Character.glyph.metrics.width / 2 * maxScale;
+
+            if (end.x - start.x < m_cached_Underline_Character.glyph.metrics.width * maxScale)
+            {
+                segmentWidth = (end.x - start.x) / 2f;
+            }
+
+            float startPadding = m_padding * startScale / maxScale;
+            float endPadding = m_padding * endScale / maxScale;
+
+            float underlineThickness = m_fontAsset.faceInfo.underlineThickness;
+
+            // UNDERLINE VERTICES FOR (3) LINE SEGMENTS
+            #region UNDERLINE VERTICES
+            Vector3[] vertices = m_textInfo.meshInfo[0].vertices;
+
+            // Front Part of the Underline
+            vertices[index + 0] = start + new Vector3(0, 0 - (underlineThickness + m_padding) * maxScale, 0); // BL
+            vertices[index + 1] = start + new Vector3(0, m_padding * maxScale, 0); // TL
+            vertices[index + 2] = vertices[index + 1] + new Vector3(segmentWidth, 0, 0); // TR
+            vertices[index + 3] = vertices[index + 0] + new Vector3(segmentWidth, 0, 0); // BR
+
+            // Middle Part of the Underline
+            vertices[index + 4] = vertices[index + 3]; // BL
+            vertices[index + 5] = vertices[index + 2]; // TL
+            vertices[index + 6] = end + new Vector3(-segmentWidth, m_padding * maxScale, 0);  // TR
+            vertices[index + 7] = end + new Vector3(-segmentWidth, -(underlineThickness + m_padding) * maxScale, 0); // BR
+
+            // End Part of the Underline
+            vertices[index + 8] = vertices[index + 7]; // BL
+            vertices[index + 9] = vertices[index + 6]; // TL
+            vertices[index + 10] = end + new Vector3(0, m_padding * maxScale, 0); // TR
+            vertices[index + 11] = end + new Vector3(0, -(underlineThickness + m_padding) * maxScale, 0); // BR
+            #endregion
+
+            // UNDERLINE UV0
+            #region HANDLE UV0
+            Vector2[] uvs0 = m_textInfo.meshInfo[0].uvs0;
+
+            // Calculate UV required to setup the 3 Quads for the Underline.
+            Vector2 uv0 = new Vector2((m_cached_Underline_Character.glyph.glyphRect.x - startPadding) / m_fontAsset.atlasWidth, (m_cached_Underline_Character.glyph.glyphRect.y - m_padding) / m_fontAsset.atlasHeight);  // bottom left
+            Vector2 uv1 = new Vector2(uv0.x, (m_cached_Underline_Character.glyph.glyphRect.y + m_cached_Underline_Character.glyph.glyphRect.height + m_padding) / m_fontAsset.atlasHeight);  // top left
+            Vector2 uv2 = new Vector2((m_cached_Underline_Character.glyph.glyphRect.x - startPadding + (float)m_cached_Underline_Character.glyph.glyphRect.width / 2) / m_fontAsset.atlasWidth, uv1.y); // Mid Top Left
+            Vector2 uv3 = new Vector2(uv2.x, uv0.y); // Mid Bottom Left
+            Vector2 uv4 = new Vector2((m_cached_Underline_Character.glyph.glyphRect.x + endPadding + (float)m_cached_Underline_Character.glyph.glyphRect.width / 2) / m_fontAsset.atlasWidth, uv1.y); // Mid Top Right
+            Vector2 uv5 = new Vector2(uv4.x, uv0.y); // Mid Bottom right
+            Vector2 uv6 = new Vector2((m_cached_Underline_Character.glyph.glyphRect.x + endPadding + m_cached_Underline_Character.glyph.glyphRect.width) / m_fontAsset.atlasWidth, uv1.y); // End Part - Bottom Right
+            Vector2 uv7 = new Vector2(uv6.x, uv0.y); // End Part - Top Right
+
+            // Left Part of the Underline
+            uvs0[0 + index] = uv0; // BL
+            uvs0[1 + index] = uv1; // TL
+            uvs0[2 + index] = uv2; // TR
+            uvs0[3 + index] = uv3; // BR
+
+            // Middle Part of the Underline
+            uvs0[4 + index] = new Vector2(uv2.x - uv2.x * 0.001f, uv0.y);
+            uvs0[5 + index] = new Vector2(uv2.x - uv2.x * 0.001f, uv1.y);
+            uvs0[6 + index] = new Vector2(uv2.x + uv2.x * 0.001f, uv1.y);
+            uvs0[7 + index] = new Vector2(uv2.x + uv2.x * 0.001f, uv0.y);
+
+            // Right Part of the Underline
+            uvs0[8 + index] = uv5;
+            uvs0[9 + index] = uv4;
+            uvs0[10 + index] = uv6;
+            uvs0[11 + index] = uv7;
+            #endregion
+
+            // UNDERLINE UV2
+            #region HANDLE UV2 - SDF SCALE
+            // UV1 contains Face / Border UV layout.
+            float min_UvX = 0;
+            float max_UvX = (vertices[index + 2].x - start.x) / (end.x - start.x);
+
+            //Calculate the xScale or how much the UV's are getting stretched on the X axis for the middle section of the underline.
+            float xScale = Mathf.Abs(sdfScale);
+
+            Vector2[] uvs2 = m_textInfo.meshInfo[0].uvs2;
+
+            uvs2[0 + index] = PackUV(0, 0, xScale);
+            uvs2[1 + index] = PackUV(0, 1, xScale);
+            uvs2[2 + index] = PackUV(max_UvX, 1, xScale);
+            uvs2[3 + index] = PackUV(max_UvX, 0, xScale);
+
+            min_UvX = (vertices[index + 4].x - start.x) / (end.x - start.x);
+            max_UvX = (vertices[index + 6].x - start.x) / (end.x - start.x);
+
+            uvs2[4 + index] = PackUV(min_UvX, 0, xScale);
+            uvs2[5 + index] = PackUV(min_UvX, 1, xScale);
+            uvs2[6 + index] = PackUV(max_UvX, 1, xScale);
+            uvs2[7 + index] = PackUV(max_UvX, 0, xScale);
+
+            min_UvX = (vertices[index + 8].x - start.x) / (end.x - start.x);
+            max_UvX = (vertices[index + 6].x - start.x) / (end.x - start.x);
+
+            uvs2[8 + index] = PackUV(min_UvX, 0, xScale);
+            uvs2[9 + index] = PackUV(min_UvX, 1, xScale);
+            uvs2[10 + index] = PackUV(1, 1, xScale);
+            uvs2[11 + index] = PackUV(1, 0, xScale);
+            #endregion
+
+            // UNDERLINE VERTEX COLORS
+            #region
+            // Alpha is the lower of the vertex color or tag color alpha used.
+            underlineColor.a = m_fontColor32.a < underlineColor.a ? (byte)(m_fontColor32.a) : (byte)(underlineColor.a);
+
+            Color32[] colors32 = m_textInfo.meshInfo[0].colors32;
+            colors32[0 + index] = underlineColor;
+            colors32[1 + index] = underlineColor;
+            colors32[2 + index] = underlineColor;
+            colors32[3 + index] = underlineColor;
+
+            colors32[4 + index] = underlineColor;
+            colors32[5 + index] = underlineColor;
+            colors32[6 + index] = underlineColor;
+            colors32[7 + index] = underlineColor;
+
+            colors32[8 + index] = underlineColor;
+            colors32[9 + index] = underlineColor;
+            colors32[10 + index] = underlineColor;
+            colors32[11 + index] = underlineColor;
+            #endregion
+
+            index += 12;
+        }
+
+
+        protected virtual void DrawTextHighlight(Vector3 start, Vector3 end, ref int index, Color32 highlightColor)
+        {
+            if (m_cached_Underline_Character == null)
+            {
+                if (!TMP_Settings.warningsDisabled) Debug.LogWarning("Unable to add underline since the Font Asset doesn't contain the underline character.", this);
+                return;
+            }
+
+            int verticesCount = index + 4;
+            // Check to make sure our current mesh buffer allocations can hold these new Quads.
+            if (verticesCount > m_textInfo.meshInfo[0].vertices.Length)
+            {
+                // Resize Mesh Buffers
+                m_textInfo.meshInfo[0].ResizeMeshInfo(verticesCount / 4);
+            }
+
+            // UNDERLINE VERTICES FOR (3) LINE SEGMENTS
+            #region HIGHLIGHT VERTICES
+            Vector3[] vertices = m_textInfo.meshInfo[0].vertices;
+
+            // Front Part of the Underline
+            vertices[index + 0] = start; // BL
+            vertices[index + 1] = new Vector3(start.x, end.y, 0); // TL
+            vertices[index + 2] = end; // TR
+            vertices[index + 3] = new Vector3(end.x, start.y, 0); // BR
+            #endregion
+
+            // UNDERLINE UV0
+            #region HANDLE UV0
+            Vector2[] uvs0 = m_textInfo.meshInfo[0].uvs0;
+
+            // Calculate UV required to setup the 3 Quads for the Underline.
+            Vector2 uv0 = new Vector2(((float)m_cached_Underline_Character.glyph.glyphRect.x + m_cached_Underline_Character.glyph.glyphRect.width / 2) / m_fontAsset.atlasWidth, (m_cached_Underline_Character.glyph.glyphRect.y + (float)m_cached_Underline_Character.glyph.glyphRect.height / 2) / m_fontAsset.atlasHeight);  // bottom left
+            //Vector2 uv1 = new Vector2(uv0.x, uv0.y);  // top left
+            //Vector2 uv2 = new Vector2(uv0.x, uv0.y); // Top Right
+            //Vector2 uv3 = new Vector2(uv2.x, uv0.y); // Bottom Right
+
+            // Left Part of the Underline
+            uvs0[0 + index] = uv0; // BL
+            uvs0[1 + index] = uv0; // TL
+            uvs0[2 + index] = uv0; // TR
+            uvs0[3 + index] = uv0; // BR
+            #endregion
+
+            // UNDERLINE UV2
+            #region HANDLE UV2 - SDF SCALE
+            // UV1 contains Face / Border UV layout.
+            //float min_UvX = 0;
+            //float max_UvX = (vertices[index + 2].x - start.x) / (end.x - start.x);
+
+            ////Calculate the xScale or how much the UV's are getting stretched on the X axis for the middle section of the underline.
+            //float xScale = 0; // Mathf.Abs(sdfScale);
+
+            Vector2[] uvs2 = m_textInfo.meshInfo[0].uvs2;
+            Vector2 customUV = new Vector2(0, 1);
+            uvs2[0 + index] = customUV; // PackUV(-0.2f, -0.2f, xScale);
+            uvs2[1 + index] = customUV; // PackUV(-0.2f, -0.1f, xScale);
+            uvs2[2 + index] = customUV; // PackUV(-0.1f, -0.1f, xScale);
+            uvs2[3 + index] = customUV; // PackUV(-0.1f, -0.2f, xScale);
+            #endregion
+
+            // HIGHLIGHT VERTEX COLORS
+            #region
+            // Alpha is the lower of the vertex color or tag color alpha used.
+            highlightColor.a = m_fontColor32.a < highlightColor.a ? m_fontColor32.a : highlightColor.a;
+
+            Color32[] colors32 = m_textInfo.meshInfo[0].colors32;
+            colors32[0 + index] = highlightColor;
+            colors32[1 + index] = highlightColor;
+            colors32[2 + index] = highlightColor;
+            colors32[3 + index] = highlightColor;
+            #endregion
+
+            index += 4;
+        }
+
+
+        /// <summary>
+        /// Internal function used to load the default settings of text objects.
+        /// </summary>
+        protected void LoadDefaultSettings()
+        {
+            if (m_text == null || m_isWaitingOnResourceLoad)
+            {
+                if (TMP_Settings.autoSizeTextContainer)
+                    autoSizeTextContainer = true;
+                else
+                {
+                    m_rectTransform = this.rectTransform;
+
+                    if (GetType() == typeof(TextMeshPro))
+                        m_rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProTextContainerSize;
+                    else
+                        m_rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProUITextContainerSize;
+                }
+
+                m_enableWordWrapping = TMP_Settings.enableWordWrapping;
+                m_enableKerning = TMP_Settings.enableKerning;
+                m_enableExtraPadding = TMP_Settings.enableExtraPadding;
+                m_tintAllSprites = TMP_Settings.enableTintAllSprites;
+                m_parseCtrlCharacters = TMP_Settings.enableParseEscapeCharacters;
+                m_fontSize = m_fontSizeBase = TMP_Settings.defaultFontSize;
+                m_fontSizeMin = m_fontSize * TMP_Settings.defaultTextAutoSizingMinRatio;
+                m_fontSizeMax = m_fontSize * TMP_Settings.defaultTextAutoSizingMaxRatio;
+                m_isWaitingOnResourceLoad = false;
+                raycastTarget = TMP_Settings.enableRaycastTarget;
+            }
+        }
+
+
+        /// <summary>
+        /// Method used to find and cache references to the Underline and Ellipsis characters.
+        /// </summary>
+        /// <param name=""></param>
+        protected void GetSpecialCharacters(TMP_FontAsset fontAsset)
+        {
+            bool isUsingAlternativeTypeface;
+            TMP_FontAsset tempFontAsset;
+
+            // Check & Assign Underline Character for use with the Underline tag.
+            if (!fontAsset.characterLookupTable.TryGetValue(95, out m_cached_Underline_Character))
+            {
+                m_cached_Underline_Character = TMP_FontAssetUtilities.GetCharacterFromFontAsset(95,fontAsset, false, m_FontStyleInternal, (FontWeight)m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                if (m_cached_Underline_Character == null)
+            {
+                    if (!TMP_Settings.warningsDisabled)
+                        Debug.LogWarning("The character used for Underline and Strikethrough is not available in font asset [" + fontAsset.name + "].", this);
+                }
+            }
+
+            // Check & Assign Underline Character for use with the Underline tag.
+            if (!fontAsset.characterLookupTable.TryGetValue(8230, out m_cached_Ellipsis_Character)) //95
+            {
+                m_cached_Ellipsis_Character = TMP_FontAssetUtilities.GetCharacterFromFontAsset(8230, fontAsset, false, m_FontStyleInternal, (FontWeight)m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                if (m_cached_Ellipsis_Character == null)
+            {
+                    if (!TMP_Settings.warningsDisabled)
+                        Debug.LogWarning("The character used for Ellipsis is not available in font asset [" + fontAsset.name + "].", this);
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// Replace a given number of characters (tag) in the array with a new character and shift subsequent characters in the array.
+        /// </summary>
+        /// <param name="chars">Array which contains the text.</param>
+        /// <param name="insertionIndex">The index of where the new character will be inserted</param>
+        /// <param name="tagLength">Length of the tag being replaced.</param>
+        /// <param name="c">The replacement character.</param>
+        protected void ReplaceTagWithCharacter(int[] chars, int insertionIndex, int tagLength, char c)
+        {
+            chars[insertionIndex] = c;
+
+            for (int i = insertionIndex + tagLength; i < chars.Length; i++)
+            {
+                chars[i - 3] = chars[i];
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        //protected int GetMaterialReferenceForFontWeight()
+        //{
+        //    //bool isItalic = (m_style & FontStyles.Italic) == FontStyles.Italic || (m_fontStyle & FontStyles.Italic) == FontStyles.Italic;
+
+        //    m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentFontAsset.fontWeights[0].italicTypeface.material, m_currentFontAsset.fontWeights[0].italicTypeface, m_materialReferences, m_materialReferenceIndexLookup);
+
+        //    return 0;
+        //}
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        protected TMP_FontAsset GetFontAssetForWeight(int fontWeight)
+        {
+            bool isItalic = (m_FontStyleInternal & FontStyles.Italic) == FontStyles.Italic || (m_fontStyle & FontStyles.Italic) == FontStyles.Italic;
+
+            TMP_FontAsset fontAsset = null;
+
+            int weightIndex = fontWeight / 100;
+
+            if (isItalic)
+                fontAsset = m_currentFontAsset.fontWeightTable[weightIndex].italicTypeface;
+            else
+                fontAsset = m_currentFontAsset.fontWeightTable[weightIndex].regularTypeface;
+
+            return fontAsset;
+        }
+
+
+        /// <summary>
+        /// Method to Enable or Disable child SubMesh objects.
+        /// </summary>
+        /// <param name="state"></param>
+        protected virtual void SetActiveSubMeshes(bool state) { }
+
+
+        /// <summary>
+        /// Destroy Sub Mesh Objects.
+        /// </summary>
+        protected virtual void ClearSubMeshObjects() { }
+
+
+        /// <summary>
+        /// Function to clear the geometry of the Primary and Sub Text objects.
+        /// </summary>
+        public virtual void ClearMesh() { }
+
+
+        /// <summary>
+        /// Function to clear the geometry of the Primary and Sub Text objects.
+        /// </summary>
+        public virtual void ClearMesh(bool uploadGeometry) { }
+
+
+        /// <summary>
+        /// Function which returns the text after it has been parsed and rich text tags removed.
+        /// </summary>
+        /// <returns></returns>
+        public virtual string GetParsedText()
+        {
+            if (m_textInfo == null)
+                return string.Empty;
+
+            int characterCount = m_textInfo.characterCount;
+
+            // TODO - Could implement some static buffer pool shared by all instances of TMP objects.
+            char[] buffer = new char[characterCount];
+
+            for (int i = 0; i < characterCount && i < m_textInfo.characterInfo.Length; i++)
+            {
+                buffer[i] = m_textInfo.characterInfo[i].character;
+            }
+
+            return new string(buffer);
+        }
+
+
+        /// <summary>
+        /// Function to pack scale information in the UV2 Channel.
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <param name="scale"></param>
+        /// <returns></returns>
+        //protected Vector2 PackUV(float x, float y, float scale)
+        //{
+        //    Vector2 output;
+
+        //    output.x = Mathf.Floor(x * 4095);
+        //    output.y = Mathf.Floor(y * 4095);
+
+        //    output.x = (output.x * 4096) + output.y;
+        //    output.y = scale;
+
+        //    return output;
+        //}
+
+        /// <summary>
+        /// Function to pack scale information in the UV2 Channel.
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <param name="scale"></param>
+        /// <returns></returns>
+        protected Vector2 PackUV(float x, float y, float scale)
+        {
+            Vector2 output;
+
+            output.x = (int)(x * 511);
+            output.y = (int)(y * 511);
+
+            output.x = (output.x * 4096) + output.y;
+            output.y = scale;
+
+            return output;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <returns></returns>
+        protected float PackUV(float x, float y)
+        {
+            double x0 = (int)(x * 511);
+            double y0 = (int)(y * 511);
+
+            return (float)((x0 * 4096) + y0);
+        }
+
+
+        /// <summary>
+        /// Function used as a replacement for LateUpdate()
+        /// </summary>
+        internal virtual void InternalUpdate() { }
+
+
+        /// <summary>
+        /// Function to pack scale information in the UV2 Channel.
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <param name="scale"></param>
+        /// <returns></returns>
+        //protected Vector2 PackUV(float x, float y, float scale)
+        //{
+        //    Vector2 output;
+
+        //    output.x = Mathf.Floor(x * 4095);
+        //    output.y = Mathf.Floor(y * 4095);
+
+        //    return new Vector2((output.x * 4096) + output.y, scale);
+        //}
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="x"></param>
+        /// <param name="y"></param>
+        /// <returns></returns>
+        //protected float PackUV(float x, float y)
+        //{
+        //    x = (x % 5) / 5;
+        //    y = (y % 5) / 5;
+
+        //    return Mathf.Round(x * 4096) + y;
+        //}
+
+
+        /// <summary>
+        /// Method to convert Hex to Int
+        /// </summary>
+        /// <param name="hex"></param>
+        /// <returns></returns>
+        protected int HexToInt(char hex)
+        {
+            switch (hex)
+            {
+                case '0': return 0;
+                case '1': return 1;
+                case '2': return 2;
+                case '3': return 3;
+                case '4': return 4;
+                case '5': return 5;
+                case '6': return 6;
+                case '7': return 7;
+                case '8': return 8;
+                case '9': return 9;
+                case 'A': return 10;
+                case 'B': return 11;
+                case 'C': return 12;
+                case 'D': return 13;
+                case 'E': return 14;
+                case 'F': return 15;
+                case 'a': return 10;
+                case 'b': return 11;
+                case 'c': return 12;
+                case 'd': return 13;
+                case 'e': return 14;
+                case 'f': return 15;
+            }
+            return 15;
+        }
+
+
+        /// <summary>
+        /// Convert UTF-16 Hex to Char
+        /// </summary>
+        /// <returns>The Unicode hex.</returns>
+        /// <param name="i">The index.</param>
+        protected int GetUTF16(string text, int i)
+        {
+            int unicode = 0;
+            unicode += HexToInt(text[i]) << 12;
+            unicode += HexToInt(text[i + 1]) << 8;
+            unicode += HexToInt(text[i + 2]) << 4;
+            unicode += HexToInt(text[i + 3]);
+            return unicode;
+        }
+
+        /// <summary>
+        /// Convert UTF-16 Hex to Char
+        /// </summary>
+        /// <returns>The Unicode hex.</returns>
+        /// <param name="i">The index.</param>
+        protected int GetUTF16(StringBuilder text, int i)
+        {
+            int unicode = 0;
+            unicode += HexToInt(text[i]) << 12;
+            unicode += HexToInt(text[i + 1]) << 8;
+            unicode += HexToInt(text[i + 2]) << 4;
+            unicode += HexToInt(text[i + 3]);
+            return unicode;
+        }
+
+
+        /// <summary>
+        /// Convert UTF-32 Hex to Char
+        /// </summary>
+        /// <returns>The Unicode hex.</returns>
+        /// <param name="i">The index.</param>
+        protected int GetUTF32(string text, int i)
+        {
+            int unicode = 0;
+            unicode += HexToInt(text[i]) << 30;
+            unicode += HexToInt(text[i + 1]) << 24;
+            unicode += HexToInt(text[i + 2]) << 20;
+            unicode += HexToInt(text[i + 3]) << 16;
+            unicode += HexToInt(text[i + 4]) << 12;
+            unicode += HexToInt(text[i + 5]) << 8;
+            unicode += HexToInt(text[i + 6]) << 4;
+            unicode += HexToInt(text[i + 7]);
+            return unicode;
+        }
+
+        /// <summary>
+        /// Convert UTF-32 Hex to Char
+        /// </summary>
+        /// <returns>The Unicode hex.</returns>
+        /// <param name="i">The index.</param>
+        protected int GetUTF32(StringBuilder text, int i)
+        {
+            int unicode = 0;
+            unicode += HexToInt(text[i]) << 30;
+            unicode += HexToInt(text[i + 1]) << 24;
+            unicode += HexToInt(text[i + 2]) << 20;
+            unicode += HexToInt(text[i + 3]) << 16;
+            unicode += HexToInt(text[i + 4]) << 12;
+            unicode += HexToInt(text[i + 5]) << 8;
+            unicode += HexToInt(text[i + 6]) << 4;
+            unicode += HexToInt(text[i + 7]);
+            return unicode;
+        }
+
+
+        /// <summary>
+        /// Method to convert Hex color values to Color32
+        /// </summary>
+        /// <param name="hexChars"></param>
+        /// <param name="tagCount"></param>
+        /// <returns></returns>
+        protected Color32 HexCharsToColor(char[] hexChars, int tagCount)
+        {
+            if (tagCount == 4)
+            {
+                byte r = (byte)(HexToInt(hexChars[1]) * 16 + HexToInt(hexChars[1]));
+                byte g = (byte)(HexToInt(hexChars[2]) * 16 + HexToInt(hexChars[2]));
+                byte b = (byte)(HexToInt(hexChars[3]) * 16 + HexToInt(hexChars[3]));
+
+                return new Color32(r, g, b, 255);
+            }
+            else if (tagCount == 5)
+            {
+                byte r = (byte)(HexToInt(hexChars[1]) * 16 + HexToInt(hexChars[1]));
+                byte g = (byte)(HexToInt(hexChars[2]) * 16 + HexToInt(hexChars[2]));
+                byte b = (byte)(HexToInt(hexChars[3]) * 16 + HexToInt(hexChars[3]));
+                byte a = (byte)(HexToInt(hexChars[4]) * 16 + HexToInt(hexChars[4]));
+
+                return new Color32(r, g, b, a);
+            }
+            else if (tagCount == 7)
+            {
+                byte r = (byte)(HexToInt(hexChars[1]) * 16 + HexToInt(hexChars[2]));
+                byte g = (byte)(HexToInt(hexChars[3]) * 16 + HexToInt(hexChars[4]));
+                byte b = (byte)(HexToInt(hexChars[5]) * 16 + HexToInt(hexChars[6]));
+
+                return new Color32(r, g, b, 255);
+            }
+            else if (tagCount == 9)
+            {
+                byte r = (byte)(HexToInt(hexChars[1]) * 16 + HexToInt(hexChars[2]));
+                byte g = (byte)(HexToInt(hexChars[3]) * 16 + HexToInt(hexChars[4]));
+                byte b = (byte)(HexToInt(hexChars[5]) * 16 + HexToInt(hexChars[6]));
+                byte a = (byte)(HexToInt(hexChars[7]) * 16 + HexToInt(hexChars[8]));
+
+                return new Color32(r, g, b, a);
+            }
+            else if (tagCount == 10)
+            {
+                byte r = (byte)(HexToInt(hexChars[7]) * 16 + HexToInt(hexChars[7]));
+                byte g = (byte)(HexToInt(hexChars[8]) * 16 + HexToInt(hexChars[8]));
+                byte b = (byte)(HexToInt(hexChars[9]) * 16 + HexToInt(hexChars[9]));
+
+                return new Color32(r, g, b, 255);
+            }
+            else if (tagCount == 11)
+            {
+                byte r = (byte)(HexToInt(hexChars[7]) * 16 + HexToInt(hexChars[7]));
+                byte g = (byte)(HexToInt(hexChars[8]) * 16 + HexToInt(hexChars[8]));
+                byte b = (byte)(HexToInt(hexChars[9]) * 16 + HexToInt(hexChars[9]));
+                byte a = (byte)(HexToInt(hexChars[10]) * 16 + HexToInt(hexChars[10]));
+
+                return new Color32(r, g, b, a);
+            }
+            else if (tagCount == 13)
+            {
+                byte r = (byte)(HexToInt(hexChars[7]) * 16 + HexToInt(hexChars[8]));
+                byte g = (byte)(HexToInt(hexChars[9]) * 16 + HexToInt(hexChars[10]));
+                byte b = (byte)(HexToInt(hexChars[11]) * 16 + HexToInt(hexChars[12]));
+
+                return new Color32(r, g, b, 255);
+            }
+            else if (tagCount == 15)
+            {
+                byte r = (byte)(HexToInt(hexChars[7]) * 16 + HexToInt(hexChars[8]));
+                byte g = (byte)(HexToInt(hexChars[9]) * 16 + HexToInt(hexChars[10]));
+                byte b = (byte)(HexToInt(hexChars[11]) * 16 + HexToInt(hexChars[12]));
+                byte a = (byte)(HexToInt(hexChars[13]) * 16 + HexToInt(hexChars[14]));
+
+                return new Color32(r, g, b, a);
+            }
+
+            return new Color32(255, 255, 255, 255);
+        }
+
+
+        /// <summary>
+        /// Method to convert Hex Color values to Color32
+        /// </summary>
+        /// <param name="hexChars"></param>
+        /// <param name="startIndex"></param>
+        /// <param name="length"></param>
+        /// <returns></returns>
+        protected Color32 HexCharsToColor(char[] hexChars, int startIndex, int length)
+        {
+            if (length == 7)
+            {
+                byte r = (byte)(HexToInt(hexChars[startIndex + 1]) * 16 + HexToInt(hexChars[startIndex + 2]));
+                byte g = (byte)(HexToInt(hexChars[startIndex + 3]) * 16 + HexToInt(hexChars[startIndex + 4]));
+                byte b = (byte)(HexToInt(hexChars[startIndex + 5]) * 16 + HexToInt(hexChars[startIndex + 6]));
+
+                return new Color32(r, g, b, 255);
+            }
+            else if (length == 9)
+            {
+                byte r = (byte)(HexToInt(hexChars[startIndex + 1]) * 16 + HexToInt(hexChars[startIndex + 2]));
+                byte g = (byte)(HexToInt(hexChars[startIndex + 3]) * 16 + HexToInt(hexChars[startIndex + 4]));
+                byte b = (byte)(HexToInt(hexChars[startIndex + 5]) * 16 + HexToInt(hexChars[startIndex + 6]));
+                byte a = (byte)(HexToInt(hexChars[startIndex + 7]) * 16 + HexToInt(hexChars[startIndex + 8]));
+
+                return new Color32(r, g, b, a);
+            }
+
+            return s_colorWhite;
+        }
+
+
+        /// <summary>
+        /// Method which returns the number of parameters used in a tag attribute and populates an array with such values.
+        /// </summary>
+        /// <param name="chars">Char[] containing the tag attribute and data</param>
+        /// <param name="startIndex">The index of the first char of the data</param>
+        /// <param name="length">The length of the data</param>
+        /// <param name="parameters">The number of parameters contained in the Char[]</param>
+        /// <returns></returns>
+        int GetAttributeParameters(char[] chars, int startIndex, int length, ref float[] parameters)
+        {
+            int endIndex = startIndex;
+            int attributeCount = 0;
+
+            while (endIndex < startIndex + length)
+            {
+                parameters[attributeCount] = ConvertToFloat(chars, startIndex, length, out endIndex);
+
+                length -= (endIndex - startIndex) + 1;
+                startIndex = endIndex + 1;
+
+                attributeCount += 1;
+            }
+
+            return attributeCount;
+        }
+
+
+        /// <summary>
+        /// Extracts a float value from char[] assuming we know the position of the start, end and decimal point.
+        /// </summary>
+        /// <param name="chars"></param>
+        /// <param name="startIndex"></param>
+        /// <param name="length"></param>
+        /// <returns></returns>
+        protected float ConvertToFloat(char[] chars, int startIndex, int length)
+        {
+            int lastIndex;
+
+            return ConvertToFloat(chars, startIndex, length, out lastIndex);
+        }
+
+
+        /// <summary>
+        /// Extracts a float value from char[] given a start index and length. 
+        /// </summary>
+        /// <param name="chars"></param> The Char[] containing the numerical sequence.
+        /// <param name="startIndex"></param> The index of the start of the numerical sequence.
+        /// <param name="length"></param> The length of the numerical sequence.
+        /// <param name="lastIndex"></param> Index of the last character in the validated sequence.
+        /// <returns></returns>
+        protected float ConvertToFloat(char[] chars, int startIndex, int length, out int lastIndex)
+        {
+            if (startIndex == 0) { lastIndex = 0; return -9999; }
+            int endIndex = startIndex + length;
+
+            bool isIntegerValue = true;
+            float decimalPointMultiplier = 0;
+
+            // Set value multiplier checking the first character to determine if we are using '+' or '-'
+            int valueSignMultiplier = 1;
+            if (chars[startIndex] == '+')
+            {
+                valueSignMultiplier = 1;
+                startIndex += 1;
+            }
+            else if (chars[startIndex] == '-')
+            {
+                valueSignMultiplier = -1;
+                startIndex += 1;
+            }
+
+            float value = 0;
+
+            for (int i = startIndex; i < endIndex; i++)
+            {
+                uint c = chars[i];
+
+                if (c >= '0' && c <= '9' || c == '.')
+                {
+                    if (c == '.')
+                    {
+                        isIntegerValue = false;
+                        decimalPointMultiplier = 0.1f;
+                        continue;
+                    }
+
+                    //Calculate integer and floating point value
+                    if (isIntegerValue)
+                        value = value * 10 + (c - 48) * valueSignMultiplier;
+                    else
+                {
+                        value = value + (c - 48) * decimalPointMultiplier * valueSignMultiplier;
+                        decimalPointMultiplier *= 0.1f;
+                }
+
+                    continue;
+                }
+                else if (c == ',')
+                {
+                    if (i + 1 < endIndex && chars[i + 1] == ' ')
+                        lastIndex = i + 1;
+                else
+                        lastIndex = i;
+
+                    return value;
+                }
+            }
+
+            lastIndex = endIndex;
+            return value;
+        }
+
+
+        /// <summary>
+        /// Function to identify and validate the rich tag. Returns the position of the > if the tag was valid.
+        /// </summary>
+        /// <param name="chars"></param>
+        /// <param name="startIndex"></param>
+        /// <param name="endIndex"></param>
+        /// <returns></returns>
+        protected bool ValidateHtmlTag(UnicodeChar[] chars, int startIndex, out int endIndex)
+        {
+            int tagCharCount = 0;
+            byte attributeFlag = 0;
+
+            int attributeIndex = 0;
+            m_xmlAttribute[attributeIndex].nameHashCode = 0;
+            m_xmlAttribute[attributeIndex].valueHashCode = 0;
+            m_xmlAttribute[attributeIndex].valueStartIndex = 0;
+            m_xmlAttribute[attributeIndex].valueLength = 0;
+            TagValueType tagValueType = m_xmlAttribute[attributeIndex].valueType = TagValueType.None;
+            TagUnitType tagUnitType = m_xmlAttribute[attributeIndex].unitType = TagUnitType.Pixels;
+
+            // Clear attribute name hash codes
+            m_xmlAttribute[1].nameHashCode = 0;
+            m_xmlAttribute[2].nameHashCode = 0;
+            m_xmlAttribute[3].nameHashCode = 0;
+            m_xmlAttribute[4].nameHashCode = 0;
+
+            endIndex = startIndex;
+            bool isTagSet = false;
+            bool isValidHtmlTag = false;
+
+            for (int i = startIndex; i < chars.Length && chars[i].unicode != 0 && tagCharCount < m_htmlTag.Length && chars[i].unicode != '<'; i++)
+            {
+                int unicode = chars[i].unicode;
+
+                if (unicode == '>') // ASCII Code of End HTML tag '>'
+                {
+                    isValidHtmlTag = true;
+                    endIndex = i;
+                    m_htmlTag[tagCharCount] = (char)0;
+                    break;
+                }
+
+                m_htmlTag[tagCharCount] = (char)unicode;
+                tagCharCount += 1;
+
+                if (attributeFlag == 1)
+                {
+                    if (tagValueType == TagValueType.None)
+                    {
+                        // Check for attribute type
+                        if (unicode == '+' || unicode == '-' || unicode == '.' || (unicode >= '0' && unicode <= '9'))
+                        {
+                            tagUnitType = TagUnitType.Pixels;
+                            tagValueType = m_xmlAttribute[attributeIndex].valueType = TagValueType.NumericalValue;
+                            m_xmlAttribute[attributeIndex].valueStartIndex = tagCharCount - 1;
+                            m_xmlAttribute[attributeIndex].valueLength += 1;
+                        }
+                        else if (unicode == '#')
+                        {
+                            tagUnitType = TagUnitType.Pixels;
+                            tagValueType = m_xmlAttribute[attributeIndex].valueType = TagValueType.ColorValue;
+                            m_xmlAttribute[attributeIndex].valueStartIndex = tagCharCount - 1;
+                            m_xmlAttribute[attributeIndex].valueLength += 1;
+                        }
+                        else if (unicode == '"')
+                        {
+                            tagUnitType = TagUnitType.Pixels;
+                            tagValueType = m_xmlAttribute[attributeIndex].valueType = TagValueType.StringValue;
+                            m_xmlAttribute[attributeIndex].valueStartIndex = tagCharCount;
+                        }
+                        else
+                        {
+                            tagUnitType = TagUnitType.Pixels;
+                            tagValueType = m_xmlAttribute[attributeIndex].valueType = TagValueType.StringValue;
+                            m_xmlAttribute[attributeIndex].valueStartIndex = tagCharCount - 1;
+                            m_xmlAttribute[attributeIndex].valueHashCode = (m_xmlAttribute[attributeIndex].valueHashCode << 5) + m_xmlAttribute[attributeIndex].valueHashCode ^ unicode;
+                            m_xmlAttribute[attributeIndex].valueLength += 1;
+                        }
+                    }
+                    else
+                    {
+                        if (tagValueType == TagValueType.NumericalValue)
+                        {
+                            // Check for termination of numerical value.
+                            if (unicode == 'p' || unicode == 'e' || unicode == '%' || unicode == ' ')
+                            {
+                                attributeFlag = 2;
+                                tagValueType = TagValueType.None;
+
+                                switch (unicode)
+                                {
+                                    case 'e':
+                                        m_xmlAttribute[attributeIndex].unitType = tagUnitType = TagUnitType.FontUnits;
+                                        break;
+                                    case '%':
+                                        m_xmlAttribute[attributeIndex].unitType = tagUnitType = TagUnitType.Percentage;
+                                        break;
+                                    default:
+                                        m_xmlAttribute[attributeIndex].unitType = tagUnitType = TagUnitType.Pixels;
+                                        break;
+                                }
+
+                                attributeIndex += 1;
+                                m_xmlAttribute[attributeIndex].nameHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueType = TagValueType.None;
+                                m_xmlAttribute[attributeIndex].unitType = TagUnitType.Pixels;
+                                m_xmlAttribute[attributeIndex].valueStartIndex = 0;
+                                m_xmlAttribute[attributeIndex].valueLength = 0;
+
+                            }
+                            else if (attributeFlag != 2)
+                            {
+                                m_xmlAttribute[attributeIndex].valueLength += 1;
+                            }
+                        }
+                        else if (tagValueType == TagValueType.ColorValue)
+                        {
+                            if (unicode != ' ')
+                            {
+                                m_xmlAttribute[attributeIndex].valueLength += 1;
+                            }
+                            else
+                            {
+                                attributeFlag = 2;
+                                tagValueType = TagValueType.None;
+                                tagUnitType = TagUnitType.Pixels;
+                                attributeIndex += 1;
+                                m_xmlAttribute[attributeIndex].nameHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueType = TagValueType.None;
+                                m_xmlAttribute[attributeIndex].unitType = TagUnitType.Pixels;
+                                m_xmlAttribute[attributeIndex].valueHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueStartIndex = 0;
+                                m_xmlAttribute[attributeIndex].valueLength = 0;
+                            }
+                        }
+                        else if (tagValueType == TagValueType.StringValue)
+                        {
+                            // Compute HashCode value for the named tag.
+                            if (unicode != '"')
+                            {
+                                m_xmlAttribute[attributeIndex].valueHashCode = (m_xmlAttribute[attributeIndex].valueHashCode << 5) + m_xmlAttribute[attributeIndex].valueHashCode ^ unicode;
+                                m_xmlAttribute[attributeIndex].valueLength += 1;
+                            }
+                            else
+                            {
+                                attributeFlag = 2;
+                                tagValueType = TagValueType.None;
+                                tagUnitType = TagUnitType.Pixels;
+                                attributeIndex += 1;
+                                m_xmlAttribute[attributeIndex].nameHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueType = TagValueType.None;
+                                m_xmlAttribute[attributeIndex].unitType = TagUnitType.Pixels;
+                                m_xmlAttribute[attributeIndex].valueHashCode = 0;
+                                m_xmlAttribute[attributeIndex].valueStartIndex = 0;
+                                m_xmlAttribute[attributeIndex].valueLength = 0;
+                            }
+                        }
+                    }
+                }
+
+
+                if (unicode == '=') // '=' 
+                    attributeFlag = 1;
+
+                // Compute HashCode for the name of the attribute
+                if (attributeFlag == 0 && unicode == ' ')
+                {
+                    if (isTagSet) return false;
+
+                    isTagSet = true;
+                    attributeFlag = 2;
+
+                    tagValueType = TagValueType.None;
+                    tagUnitType = TagUnitType.Pixels;
+                    attributeIndex += 1;
+                    m_xmlAttribute[attributeIndex].nameHashCode = 0;
+                    m_xmlAttribute[attributeIndex].valueType = TagValueType.None;
+                    m_xmlAttribute[attributeIndex].unitType = TagUnitType.Pixels;
+                    m_xmlAttribute[attributeIndex].valueHashCode = 0;
+                    m_xmlAttribute[attributeIndex].valueStartIndex = 0;
+                    m_xmlAttribute[attributeIndex].valueLength = 0;
+                }
+
+                if (attributeFlag == 0)
+                    m_xmlAttribute[attributeIndex].nameHashCode = (m_xmlAttribute[attributeIndex].nameHashCode << 3) - m_xmlAttribute[attributeIndex].nameHashCode + unicode;
+
+                if (attributeFlag == 2 && unicode == ' ')
+                    attributeFlag = 0;
+
+            }
+
+            if (!isValidHtmlTag)
+            {
+                return false;
+            }
+
+            //Debug.Log("Tag is [" + m_htmlTag.ArrayToString() + "].  Tag HashCode: " + m_xmlAttribute[0].nameHashCode + "  Tag Value HashCode: " + m_xmlAttribute[0].valueHashCode + "  Attribute 1 HashCode: " + m_xmlAttribute[1].nameHashCode + " Value HashCode: " + m_xmlAttribute[1].valueHashCode);
+            //for (int i = 0; i < attributeIndex; i++)
+            //    Debug.Log("Tag [" + i + "] with HashCode: " + m_xmlAttribute[i].nameHashCode + " has value of [" + new string(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength) + "] Numerical Value: " + ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength));
+
+            #region Rich Text Tag Processing
+            #if !RICH_TEXT_ENABLED
+            // Special handling of the no parsing tag </noparse> </NOPARSE> tag
+            if (tag_NoParsing && (m_xmlAttribute[0].nameHashCode != 53822163 && m_xmlAttribute[0].nameHashCode != 49429939))
+                return false;
+            else if (m_xmlAttribute[0].nameHashCode == 53822163 || m_xmlAttribute[0].nameHashCode == 49429939)
+            {
+                tag_NoParsing = false;
+                return true;
+            }
+
+            // Color <#FFF> 3 Hex values (short form)
+            if (m_htmlTag[0] == 35 && tagCharCount == 4)
+            {
+                m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                m_colorStack.Add(m_htmlColor);
+                return true;
+            }
+            // Color <#FFF7> 4 Hex values with alpha (short form)
+            else if (m_htmlTag[0] == 35 && tagCharCount == 5)
+            {
+                m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                m_colorStack.Add(m_htmlColor);
+                return true;
+            }
+            // Color <#FF00FF>
+            else if (m_htmlTag[0] == 35 && tagCharCount == 7) // if Tag begins with # and contains 7 characters. 
+            {
+                m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                m_colorStack.Add(m_htmlColor);
+                return true;
+            }
+            // Color <#FF00FF00> with alpha
+            else if (m_htmlTag[0] == 35 && tagCharCount == 9) // if Tag begins with # and contains 9 characters. 
+            {
+                m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                m_colorStack.Add(m_htmlColor);
+                return true;
+            }
+            else
+            {
+                float value = 0;
+
+                switch (m_xmlAttribute[0].nameHashCode)
+                {
+                    case 98: // <b>
+                    case 66: // <B>
+                        m_FontStyleInternal |= FontStyles.Bold;
+                        m_fontStyleStack.Add(FontStyles.Bold);
+
+                        m_FontWeightInternal = FontWeight.Bold;
+                        return true;
+                    case 427: // </b>
+                    case 395: // </B>
+                        if ((m_fontStyle & FontStyles.Bold) != FontStyles.Bold)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.Bold) == 0)
+                            {
+                                m_FontStyleInternal &= ~FontStyles.Bold;
+                                m_FontWeightInternal = m_FontWeightStack.Peek();
+                            }
+                        }
+                        return true;
+                    case 105: // <i>
+                    case 73: // <I>
+                        m_FontStyleInternal |= FontStyles.Italic;
+                        m_fontStyleStack.Add(FontStyles.Italic);
+                        return true;
+                    case 434: // </i>
+                    case 402: // </I>
+                        if ((m_fontStyle & FontStyles.Italic) != FontStyles.Italic)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.Italic) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Italic;
+                        }
+                        return true;
+                    case 115: // <s>
+                    case 83: // <S>
+                        m_FontStyleInternal |= FontStyles.Strikethrough;
+                        m_fontStyleStack.Add(FontStyles.Strikethrough);
+
+                        if (m_xmlAttribute[1].nameHashCode == 281955 || m_xmlAttribute[1].nameHashCode == 192323)
+                        {
+                            m_strikethroughColor = HexCharsToColor(m_htmlTag, m_xmlAttribute[1].valueStartIndex, m_xmlAttribute[1].valueLength);
+                            m_strikethroughColor.a = m_htmlColor.a < m_strikethroughColor.a ? (byte)(m_htmlColor.a) : (byte)(m_strikethroughColor .a);
+                        }
+                        else
+                            m_strikethroughColor = m_htmlColor;
+
+                        m_strikethroughColorStack.Add(m_strikethroughColor);
+
+                        return true;
+                    case 444: // </s>
+                    case 412: // </S>
+                        if ((m_fontStyle & FontStyles.Strikethrough) != FontStyles.Strikethrough)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.Strikethrough) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Strikethrough;
+                        }
+                        return true;
+                    case 117: // <u>
+                    case 85: // <U>
+                        m_FontStyleInternal |= FontStyles.Underline;
+                        m_fontStyleStack.Add(FontStyles.Underline);
+
+                        if (m_xmlAttribute[1].nameHashCode == 281955 || m_xmlAttribute[1].nameHashCode == 192323)
+                        {
+                            m_underlineColor = HexCharsToColor(m_htmlTag, m_xmlAttribute[1].valueStartIndex, m_xmlAttribute[1].valueLength);
+                            m_underlineColor.a = m_htmlColor.a < m_underlineColor.a ? (byte)(m_htmlColor.a) : (byte)(m_underlineColor.a);
+                        }
+                        else
+                            m_underlineColor = m_htmlColor;
+
+                        m_underlineColorStack.Add(m_underlineColor);
+
+                        return true;
+                    case 446: // </u>
+                    case 414: // </U>
+                        if ((m_fontStyle & FontStyles.Underline) != FontStyles.Underline)
+                        {
+                            m_underlineColor = m_underlineColorStack.Remove();
+
+                            if (m_fontStyleStack.Remove(FontStyles.Underline) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Underline;
+                        }
+                        return true;
+                    case 43045: // <mark=#FF00FF80>
+                    case 30245: // <MARK>
+                        m_FontStyleInternal |= FontStyles.Highlight;
+                        m_fontStyleStack.Add(FontStyles.Highlight);
+
+                        m_highlightColor = HexCharsToColor(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        m_highlightColor.a = m_htmlColor.a < m_highlightColor.a ? (byte)(m_htmlColor.a) : (byte)(m_highlightColor.a);
+                        m_highlightColorStack.Add(m_highlightColor);
+
+                        // Handle Mark Tag Attributes
+                        for (int i = 0; i < m_xmlAttribute.Length && m_xmlAttribute[i].nameHashCode != 0; i++)
+                        {
+                            int nameHashCode = m_xmlAttribute[i].nameHashCode;
+
+                            switch (nameHashCode)
+                            {
+                                case 281955: // color
+                                    break;
+
+                                case 15087385: // padding
+                                    int paramCount = GetAttributeParameters(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength, ref m_attributeParameterValues);
+                                    if (paramCount != 4) return false;
+
+                                    m_highlightPadding = new Vector4(m_attributeParameterValues[0], m_attributeParameterValues[1], m_attributeParameterValues[2], m_attributeParameterValues[3]); 
+                                    break;
+                            }
+                        }
+
+                        return true;
+                    case 155892: // </mark>
+                    case 143092: // </MARK>
+                        if ((m_fontStyle & FontStyles.Highlight) != FontStyles.Highlight)
+                        {
+                            m_highlightColor = m_highlightColorStack.Remove();
+
+                            if (m_fontStyleStack.Remove(FontStyles.Highlight) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Highlight;
+                        }
+                        return true;
+                    case 6552: // <sub>
+                    case 4728: // <SUB>
+                        m_fontScaleMultiplier *= m_currentFontAsset.faceInfo.subscriptSize > 0 ? m_currentFontAsset.faceInfo.subscriptSize : 1;
+                        m_baselineOffsetStack.Push(m_baselineOffset);
+                        m_baselineOffset += m_currentFontAsset.faceInfo.subscriptOffset * m_fontScale * m_fontScaleMultiplier;
+
+                        m_fontStyleStack.Add(FontStyles.Subscript);
+                        m_FontStyleInternal |= FontStyles.Subscript;
+                        return true;
+                    case 22673: // </sub>
+                    case 20849: // </SUB>
+                        if ((m_FontStyleInternal & FontStyles.Subscript) == FontStyles.Subscript)
+                        {
+                            if (m_fontScaleMultiplier < 1)
+                            {
+                                //m_baselineOffset -= m_currentFontAsset.fontInfo.SubscriptOffset * m_fontScale * m_fontScaleMultiplier;
+                                m_baselineOffset = m_baselineOffsetStack.Pop();
+                                m_fontScaleMultiplier /= m_currentFontAsset.faceInfo.subscriptSize > 0 ? m_currentFontAsset.faceInfo.subscriptSize : 1;
+                            }
+
+                            if (m_fontStyleStack.Remove(FontStyles.Subscript) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Subscript;
+                        }
+                        return true;
+                    case 6566: // <sup>
+                    case 4742: // <SUP>
+                        m_fontScaleMultiplier *= m_currentFontAsset.faceInfo.superscriptSize > 0 ? m_currentFontAsset.faceInfo.superscriptSize : 1;
+                        m_baselineOffsetStack.Push(m_baselineOffset);
+                        m_baselineOffset += m_currentFontAsset.faceInfo.superscriptOffset * m_fontScale * m_fontScaleMultiplier;
+
+                        m_fontStyleStack.Add(FontStyles.Superscript);
+                        m_FontStyleInternal |= FontStyles.Superscript;
+                        return true;
+                    case 22687: // </sup>
+                    case 20863: // </SUP>
+                        if ((m_FontStyleInternal & FontStyles.Superscript) == FontStyles.Superscript)
+                        {
+                            if (m_fontScaleMultiplier < 1)
+                            {
+                                //m_baselineOffset -= m_currentFontAsset.fontInfo.SuperscriptOffset * m_fontScale * m_fontScaleMultiplier;
+                                m_baselineOffset = m_baselineOffsetStack.Pop();
+                                m_fontScaleMultiplier /= m_currentFontAsset.faceInfo.superscriptSize > 0 ? m_currentFontAsset.faceInfo.superscriptSize : 1;
+                            }
+
+                            if (m_fontStyleStack.Remove(FontStyles.Superscript) == 0)
+                                m_FontStyleInternal &= ~FontStyles.Superscript;
+                        }
+                        return true;
+                    case -330774850: // <font-weight>
+                    case 2012149182: // <FONT-WEIGHT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+
+                        //if (value == -9999) return false;
+
+                        //if ((m_fontStyle & FontStyles.Bold) == FontStyles.Bold)
+                        //{
+                        //    // Nothing happens since Bold is forced on the text.
+                        //    //m_fontWeight = 700;
+                        //    return true;
+                        //}
+
+
+                        //// Remove bold style
+                        //m_style &= ~FontStyles.Bold;
+
+                        switch ((int)value)
+                        {
+                            case 100:
+                                m_FontWeightInternal = FontWeight.Thin;
+                                break;
+                            case 200:
+                                m_FontWeightInternal = FontWeight.ExtraLight;
+                                break;
+                            case 300:
+                                m_FontWeightInternal = FontWeight.Light;
+                                break;
+                            case 400:
+                                m_FontWeightInternal = FontWeight.Regular;
+                                break;
+                            case 500:
+                                m_FontWeightInternal = FontWeight.Medium;
+                                break;
+                            case 600:
+                                m_FontWeightInternal = FontWeight.SemiBold;
+                                break;
+                            case 700:
+                                m_FontWeightInternal = FontWeight.Bold;
+                                break;
+                            case 800:
+                                m_FontWeightInternal = FontWeight.Heavy;
+                                break;
+                            case 900:
+                                m_FontWeightInternal = FontWeight.Black;
+                                break;
+                        }
+
+                        m_FontWeightStack.Add(m_FontWeightInternal);
+
+                        return true;
+                    case -1885698441: // </font-weight>
+                    case 457225591: // </FONT-WEIGHT>
+                        m_FontWeightStack.Remove();
+
+                        if (m_FontStyleInternal == FontStyles.Bold)
+                            m_FontWeightInternal = FontWeight.Bold;
+                        else
+                            m_FontWeightInternal = m_FontWeightStack.Peek();
+
+                        return true;
+                    case 6380: // <pos=000.00px> <pos=0em> <pos=50%>
+                    case 4556: // <POS>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_xAdvance = value * (m_isOrthographic ? 1.0f : 0.1f);
+                                //m_isIgnoringAlignment = true;
+                                return true;
+                            case TagUnitType.FontUnits:
+                                m_xAdvance = value * m_currentFontSize * (m_isOrthographic ? 1.0f : 0.1f);
+                                //m_isIgnoringAlignment = true;
+                                return true;
+                            case TagUnitType.Percentage:
+                                m_xAdvance = m_marginWidth * value / 100;
+                                //m_isIgnoringAlignment = true;
+                                return true;
+                        }
+                        return false;
+                    case 22501: // </pos>
+                    case 20677: // </POS>
+                        m_isIgnoringAlignment = false;
+                        return true;
+                    case 16034505: // <voffset>
+                    case 11642281: // <VOFFSET>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_baselineOffset = value * (m_isOrthographic ? 1 : 0.1f);
+                                return true;
+                            case TagUnitType.FontUnits:
+                                m_baselineOffset = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                return true;
+                            case TagUnitType.Percentage:
+                                //m_baselineOffset = m_marginHeight * val / 100;
+                                return false;
+                        }
+                        return false;
+                    case 54741026: // </voffset>
+                    case 50348802: // </VOFFSET>
+                        m_baselineOffset = 0;
+                        return true;
+                    case 43991: // <page>
+                    case 31191: // <PAGE>
+                        // This tag only works when Overflow - Page mode is used.
+                        if (m_overflowMode == TextOverflowModes.Page)
+                        {
+                            m_xAdvance = 0 + tag_LineIndent + tag_Indent;
+                            m_lineOffset = 0;
+                            m_pageNumber += 1;
+                            m_isNewPage = true;
+                        }
+                        return true;
+                    // <BR> tag is now handled inline where it is replaced by a linefeed or \n.
+                    //case 544: // <BR>
+                    //case 800: // <br>
+                    //    m_forceLineBreak = true;
+                    //    return true;
+                    case 43969: // <nobr>
+                    case 31169: // <NOBR>
+                        m_isNonBreakingSpace = true;
+                        return true;
+                    case 156816: // </nobr>
+                    case 144016: // </NOBR>
+                        m_isNonBreakingSpace = false;
+                        return true;
+                    case 45545: // <size=>
+                    case 32745: // <SIZE>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                if (m_htmlTag[5] == 43) // <size=+00>
+                                {
+                                    m_currentFontSize = m_fontSize + value;
+                                    m_sizeStack.Add(m_currentFontSize);
+                                    m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                                    return true;
+                                }
+                                else if (m_htmlTag[5] == 45) // <size=-00>
+                                {
+                                    m_currentFontSize = m_fontSize + value;
+                                    m_sizeStack.Add(m_currentFontSize);
+                                    m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                                    return true;
+                                }
+                                else // <size=00.0>
+                                {
+                                    m_currentFontSize = value;
+                                    m_sizeStack.Add(m_currentFontSize);
+                                    m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                                    return true;
+                                }
+                            case TagUnitType.FontUnits:
+                                m_currentFontSize = m_fontSize * value;
+                                m_sizeStack.Add(m_currentFontSize);
+                                m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                                return true;
+                            case TagUnitType.Percentage:
+                                m_currentFontSize = m_fontSize * value / 100;
+                                m_sizeStack.Add(m_currentFontSize);
+                                m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                                return true;
+                        }
+                        return false;
+                    case 158392: // </size>
+                    case 145592: // </SIZE>
+                        m_currentFontSize = m_sizeStack.Remove();
+                        m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                        return true;
+                    case 41311: // <font=xx>
+                    case 28511: // <FONT>
+                        int fontHashCode = m_xmlAttribute[0].valueHashCode;
+                        int materialAttributeHashCode = m_xmlAttribute[1].nameHashCode;
+                        int materialHashCode = m_xmlAttribute[1].valueHashCode;
+
+                        // Special handling for <font=default> or <font=Default>
+                        if (fontHashCode == 764638571 || fontHashCode == 523367755)
+                        {
+                            m_currentFontAsset = m_materialReferences[0].fontAsset;
+                            m_currentMaterial = m_materialReferences[0].material;
+                            m_currentMaterialIndex = 0;
+                            //Debug.Log("<font=Default> assigning Font Asset [" + m_currentFontAsset.name + "] with Material [" + m_currentMaterial.name + "].");
+
+                            m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+
+                            m_materialReferenceStack.Add(m_materialReferences[0]);
+
+                            return true;
+                        }
+
+                        TMP_FontAsset tempFont;
+                        Material tempMaterial;
+
+                        // HANDLE NEW FONT ASSET
+                        if (MaterialReferenceManager.TryGetFontAsset(fontHashCode, out tempFont))
+                        {
+                            //if (tempFont != m_currentFontAsset)
+                            //{
+                            //    //Debug.Log("Assigning Font Asset: " + tempFont.name);
+                            //    m_currentFontAsset = tempFont;
+                            //    m_fontScale = (m_currentFontSize / m_currentFontAsset.fontInfo.PointSize * m_currentFontAsset.fontInfo.Scale * (m_isOrthographic ? 1 : 0.1f));
+                            //}
+                        }
+                        else
+                        {
+                            // Load Font Asset
+                            tempFont = Resources.Load<TMP_FontAsset>(TMP_Settings.defaultFontAssetPath + new string(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength));
+
+                            if (tempFont == null)
+                                return false;
+
+                            // Add new reference to the font asset as well as default material to the MaterialReferenceManager
+                            MaterialReferenceManager.AddFontAsset(tempFont);
+                        }
+
+
+                        // HANDLE NEW MATERIAL
+                        if (materialAttributeHashCode == 0 && materialHashCode == 0)
+                        {
+                            // No material specified then use default font asset material.
+                            m_currentMaterial = tempFont.material;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, tempFont, m_materialReferences, m_materialReferenceIndexLookup);
+
+                            m_materialReferenceStack.Add(m_materialReferences[m_currentMaterialIndex]);
+                        }
+                        else if (materialAttributeHashCode == 103415287 || materialAttributeHashCode == 72669687) // using material attribute
+                        {
+                            if (MaterialReferenceManager.TryGetMaterial(materialHashCode, out tempMaterial))
+                            {
+                                m_currentMaterial = tempMaterial;
+
+                                m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, tempFont, m_materialReferences, m_materialReferenceIndexLookup);
+
+                                m_materialReferenceStack.Add(m_materialReferences[m_currentMaterialIndex]);
+                            }
+                            else
+                            {
+                                // Load new material
+                                tempMaterial = Resources.Load<Material>(TMP_Settings.defaultFontAssetPath + new string(m_htmlTag, m_xmlAttribute[1].valueStartIndex, m_xmlAttribute[1].valueLength));
+
+                                if (tempMaterial == null)
+                                    return false;
+
+                                // Add new reference to this material in the MaterialReferenceManager
+                                MaterialReferenceManager.AddFontMaterial(materialHashCode, tempMaterial);
+
+                                m_currentMaterial = tempMaterial;
+
+                                m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, tempFont, m_materialReferences, m_materialReferenceIndexLookup);
+
+                                m_materialReferenceStack.Add(m_materialReferences[m_currentMaterialIndex]);
+                            }
+                        }
+                        else
+                            return false;
+
+                        m_currentFontAsset = tempFont;
+                        m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+
+                        return true;
+                    case 154158: // </font>
+                    case 141358: // </FONT>
+                        {
+                            MaterialReference materialReference = m_materialReferenceStack.Remove();
+
+                            m_currentFontAsset = materialReference.fontAsset;
+                            m_currentMaterial = materialReference.material;
+                            m_currentMaterialIndex = materialReference.index;
+
+                            m_fontScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+
+                            return true;
+                        }
+                    case 103415287: // <material="material name">
+                    case 72669687: // <MATERIAL>
+                        materialHashCode = m_xmlAttribute[0].valueHashCode;
+
+                        // Special handling for <material=default> or <material=Default>
+                        if (materialHashCode == 764638571 || materialHashCode == 523367755)
+                        {
+                            // Check if material font atlas texture matches that of the current font asset.
+                            //if (m_currentFontAsset.atlas.GetInstanceID() != m_currentMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID()) return false;
+
+                            m_currentMaterial = m_materialReferences[0].material;
+                            m_currentMaterialIndex = 0;
+
+                            m_materialReferenceStack.Add(m_materialReferences[0]);
+
+                            return true;
+                        }
+
+
+                        // Check if material 
+                        if (MaterialReferenceManager.TryGetMaterial(materialHashCode, out tempMaterial))
+                        {
+                            // Check if material font atlas texture matches that of the current font asset.
+                            //if (m_currentFontAsset.atlas.GetInstanceID() != tempMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID()) return false;
+
+                            m_currentMaterial = tempMaterial;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+
+                            m_materialReferenceStack.Add(m_materialReferences[m_currentMaterialIndex]);
+                        }
+                        else
+                        {
+                            // Load new material
+                            tempMaterial = Resources.Load<Material>(TMP_Settings.defaultFontAssetPath + new string(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength));
+
+                            if (tempMaterial == null)
+                                return false;
+
+                            // Check if material font atlas texture matches that of the current font asset.
+                            //if (m_currentFontAsset.atlas.GetInstanceID() != tempMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID()) return false;
+
+                            // Add new reference to this material in the MaterialReferenceManager
+                            MaterialReferenceManager.AddFontMaterial(materialHashCode, tempMaterial);
+
+                            m_currentMaterial = tempMaterial;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset , m_materialReferences, m_materialReferenceIndexLookup);
+
+                            m_materialReferenceStack.Add(m_materialReferences[m_currentMaterialIndex]);
+                        }
+                        return true;
+                    case 374360934: // </material>
+                    case 343615334: // </MATERIAL>
+                        {
+                            //if (m_currentMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() != m_materialReferenceStack.PreviousItem().material.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                            //    return false;
+
+                            MaterialReference materialReference = m_materialReferenceStack.Remove();
+
+                            m_currentMaterial = materialReference.material;
+                            m_currentMaterialIndex = materialReference.index;
+
+                            return true;
+                        }
+                    case 320078: // <space=000.00>
+                    case 230446: // <SPACE>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_xAdvance += value * (m_isOrthographic ? 1 : 0.1f);
+                                return true;
+                            case TagUnitType.FontUnits:
+                                m_xAdvance += value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                return true;
+                            case TagUnitType.Percentage:
+                                // Not applicable
+                                return false;
+                        }
+                        return false;
+                    case 276254: // <alpha=#FF>
+                    case 186622: // <ALPHA>
+                        if (m_xmlAttribute[0].valueLength != 3) return false;
+
+                        m_htmlColor.a = (byte)(HexToInt(m_htmlTag[7]) * 16 + HexToInt(m_htmlTag[8]));
+                        return true;
+
+                    case 1750458: // <a name=" ">
+                        return false;
+                    case 426: // </a>
+                        return true;
+                    case 43066: // <link="name">
+                    case 30266: // <LINK>
+                        if (m_isParsingText && !m_isCalculatingPreferredValues)
+                        {
+                            int index = m_textInfo.linkCount;
+
+                            if (index + 1 > m_textInfo.linkInfo.Length)
+                                TMP_TextInfo.Resize(ref m_textInfo.linkInfo, index + 1);
+
+                            m_textInfo.linkInfo[index].textComponent = this;
+                            m_textInfo.linkInfo[index].hashCode = m_xmlAttribute[0].valueHashCode;
+                            m_textInfo.linkInfo[index].linkTextfirstCharacterIndex = m_characterCount;
+
+                            m_textInfo.linkInfo[index].linkIdFirstCharacterIndex = startIndex + m_xmlAttribute[0].valueStartIndex;
+                            m_textInfo.linkInfo[index].linkIdLength = m_xmlAttribute[0].valueLength;
+                            m_textInfo.linkInfo[index].SetLinkID(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        }
+                        return true;
+                    case 155913: // </link>
+                    case 143113: // </LINK>
+                        if (m_isParsingText && !m_isCalculatingPreferredValues)
+                        {
+                            if (m_textInfo.linkCount < m_textInfo.linkInfo.Length)
+                            {
+                                m_textInfo.linkInfo[m_textInfo.linkCount].linkTextLength = m_characterCount - m_textInfo.linkInfo[m_textInfo.linkCount].linkTextfirstCharacterIndex;
+
+                                m_textInfo.linkCount += 1;
+                            }
+                        }
+                        return true;
+                    case 275917: // <align=>
+                    case 186285: // <ALIGN>
+                        switch (m_xmlAttribute[0].valueHashCode)
+                        {
+                            case 3774683: // <align=left>
+                                m_lineJustification = TextAlignmentOptions.Left;
+                                m_lineJustificationStack.Add(m_lineJustification);
+                                return true;
+                            case 136703040: // <align=right>
+                                m_lineJustification = TextAlignmentOptions.Right;
+                                m_lineJustificationStack.Add(m_lineJustification);
+                                return true;
+                            case -458210101: // <align=center>
+                                m_lineJustification = TextAlignmentOptions.Center;
+                                m_lineJustificationStack.Add(m_lineJustification);
+                                return true;
+                            case -523808257: // <align=justified>
+                                m_lineJustification = TextAlignmentOptions.Justified;
+                                m_lineJustificationStack.Add(m_lineJustification);
+                                return true;
+                            case 122383428: // <align=flush>
+                                m_lineJustification = TextAlignmentOptions.Flush;
+                                m_lineJustificationStack.Add(m_lineJustification);
+                                return true;
+                        }
+                        return false;
+                    case 1065846: // </align>
+                    case 976214: // </ALIGN>
+                        m_lineJustification = m_lineJustificationStack.Remove();
+                        return true;
+                    case 327550: // <width=xx>
+                    case 237918: // <WIDTH>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_width = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                return false;
+                            //break;
+                            case TagUnitType.Percentage:
+                                m_width = m_marginWidth * value / 100;
+                                break;
+                        }
+                        return true;
+                    case 1117479: // </width>
+                    case 1027847: // </WIDTH>
+                        m_width = -1;
+                        return true;
+                    // STYLE tag is now handled inline and replaced by its definition.
+                    //case 322689: // <style="name">
+                    //case 233057: // <STYLE>
+                    //    TMP_Style style = TMP_StyleSheet.GetStyle(m_xmlAttribute[0].valueHashCode);
+
+                    //    if (style == null) return false;
+
+                    //    m_styleStack.Add(style.hashCode);
+
+                    //    // Parse Style Macro
+                    //    for (int i = 0; i < style.styleOpeningTagArray.Length; i++)
+                    //    {
+                    //        if (style.styleOpeningTagArray[i] == 60)
+                    //        {
+                    //            if (ValidateHtmlTag(style.styleOpeningTagArray, i + 1, out i) == false) return false;
+                    //        }
+                    //    }
+                    //    return true;
+                    //case 1112618: // </style>
+                    //case 1022986: // </STYLE>
+                    //    style = TMP_StyleSheet.GetStyle(m_xmlAttribute[0].valueHashCode);
+
+                    //    if (style == null)
+                    //    {
+                    //        // Get style from the Style Stack
+                    //        int styleHashCode = m_styleStack.CurrentItem();
+                    //        style = TMP_StyleSheet.GetStyle(styleHashCode);
+
+                    //        m_styleStack.Remove();
+                    //    }
+
+                    //    if (style == null) return false;
+                    //    //// Parse Style Macro
+                    //    for (int i = 0; i < style.styleClosingTagArray.Length; i++)
+                    //    {
+                    //        if (style.styleClosingTagArray[i] == 60)
+                    //            ValidateHtmlTag(style.styleClosingTagArray, i + 1, out i);
+                    //    }
+                    //    return true;
+                    case 281955: // <color> <color=#FF00FF> or <color=#FF00FF00>
+                    case 192323: // <COLOR=#FF00FF>
+                        // <color=#FFF> 3 Hex (short hand)
+                        if (m_htmlTag[6] == 35 && tagCharCount == 10)
+                        {
+                            m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                            m_colorStack.Add(m_htmlColor);
+                            return true;
+                        }
+                        // <color=#FFF7> 4 Hex (short hand)
+                        else if (m_htmlTag[6] == 35 && tagCharCount == 11)
+                        {
+                            m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                            m_colorStack.Add(m_htmlColor);
+                            return true;
+                        }
+                        // <color=#FF00FF> 3 Hex pairs
+                        if (m_htmlTag[6] == 35 && tagCharCount == 13)
+                        {
+                            m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                            m_colorStack.Add(m_htmlColor);
+                            return true;
+                        }
+                        // <color=#FF00FF00> 4 Hex pairs
+                        else if (m_htmlTag[6] == 35 && tagCharCount == 15)
+                        {
+                            m_htmlColor = HexCharsToColor(m_htmlTag, tagCharCount);
+                            m_colorStack.Add(m_htmlColor);
+                            return true;
+                        }
+
+                        // <color=name>
+                        switch (m_xmlAttribute[0].valueHashCode)
+                        {
+                            case 125395: // <color=red>
+                                m_htmlColor = Color.red;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 3573310: // <color=blue>
+                                m_htmlColor = Color.blue;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 117905991: // <color=black>
+                                m_htmlColor = Color.black;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 121463835: // <color=green>
+                                m_htmlColor = Color.green;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 140357351: // <color=white>
+                                m_htmlColor = Color.white;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 26556144: // <color=orange>
+                                m_htmlColor = new Color32(255, 128, 0, 255);
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case -36881330: // <color=purple>
+                                m_htmlColor = new Color32(160, 32, 240, 255);
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                            case 554054276: // <color=yellow>
+                                m_htmlColor = Color.yellow;
+                                m_colorStack.Add(m_htmlColor);
+                                return true;
+                        }
+                        return false;
+
+                    case 100149144: //<gradient>
+                    case 69403544:  // <GRADIENT>
+                        int gradientPresetHashCode = m_xmlAttribute[0].valueHashCode;
+                        TMP_ColorGradient tempColorGradientPreset;
+
+                        // Check if Color Gradient Preset has already been loaded.
+                        if (MaterialReferenceManager.TryGetColorGradientPreset(gradientPresetHashCode, out tempColorGradientPreset))
+                        {
+                            m_colorGradientPreset = tempColorGradientPreset;
+                        }
+                        else
+                        {
+                            // Load Color Gradient Preset
+                            if (tempColorGradientPreset == null)
+                            {
+                                tempColorGradientPreset = Resources.Load<TMP_ColorGradient>(TMP_Settings.defaultColorGradientPresetsPath + new string(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength));
+                            }
+
+                            if (tempColorGradientPreset == null)
+                                return false;
+
+                            MaterialReferenceManager.AddColorGradientPreset(gradientPresetHashCode, tempColorGradientPreset);
+                            m_colorGradientPreset = tempColorGradientPreset;
+                        }
+
+                        m_colorGradientStack.Add(m_colorGradientPreset);
+
+                        // TODO : Add support for defining preset in the tag itself
+
+                        return true;
+
+                    case 371094791: // </gradient>
+                    case 340349191: // </GRADIENT>
+                        m_colorGradientPreset = m_colorGradientStack.Remove();
+                        return true;
+
+                    case 1983971: // <cspace=xx.x>
+                    case 1356515: // <CSPACE>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_cSpacing = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                m_cSpacing = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                return false;
+                        }
+                        return true;
+                    case 7513474: // </cspace>
+                    case 6886018: // </CSPACE>
+                        if (!m_isParsingText) return true;
+
+                        // Adjust xAdvance to remove extra space from last character.
+                        if (m_characterCount > 0)
+                        {
+                            m_xAdvance -= m_cSpacing;
+                            m_textInfo.characterInfo[m_characterCount - 1].xAdvance = m_xAdvance;
+                        }
+                        m_cSpacing = 0;
+                        return true;
+                    case 2152041: // <mspace=xx.x>
+                    case 1524585: // <MSPACE>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_monoSpacing = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                m_monoSpacing = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                return false;
+                        }
+                        return true;
+                    case 7681544: // </mspace>
+                    case 7054088: // </MSPACE>
+                        m_monoSpacing = 0;
+                        return true;
+                    case 280416: // <class="name">
+                        return false;
+                    case 1071884: // </color>
+                    case 982252: // </COLOR>
+                        m_htmlColor = m_colorStack.Remove();
+                        return true;
+                    case 2068980: // <indent=10px> <indent=10em> <indent=50%>
+                    case 1441524: // <INDENT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                tag_Indent = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                tag_Indent = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                tag_Indent = m_marginWidth * value / 100;
+                                break;
+                        }
+                        m_indentStack.Add(tag_Indent);
+
+                        m_xAdvance = tag_Indent;
+                        return true;
+                    case 7598483: // </indent>
+                    case 6971027: // </INDENT>
+                        tag_Indent = m_indentStack.Remove();
+                        //m_xAdvance = tag_Indent;
+                        return true;
+                    case 1109386397: // <line-indent>
+                    case -842656867: // <LINE-INDENT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                tag_LineIndent = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                tag_LineIndent = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                tag_LineIndent = m_marginWidth * value / 100;
+                                break;
+                        }
+
+                        m_xAdvance += tag_LineIndent;
+                        return true;
+                    case -445537194: // </line-indent>
+                    case 1897386838: // </LINE-INDENT>
+                        tag_LineIndent = 0;
+                        return true;
+                    case 2246877: // <sprite=x>
+                    case 1619421: // <SPRITE>
+                        int spriteAssetHashCode = m_xmlAttribute[0].valueHashCode;
+                        TMP_SpriteAsset tempSpriteAsset;
+                        m_spriteIndex = -1;
+
+                        // CHECK TAG FORMAT
+                        if (m_xmlAttribute[0].valueType == TagValueType.None || m_xmlAttribute[0].valueType == TagValueType.NumericalValue)
+                        {
+                            // No Sprite Asset is assigned to the text object
+                            if (m_spriteAsset != null)
+                            {
+                                m_currentSpriteAsset = m_spriteAsset;
+                            }
+                            else if (m_defaultSpriteAsset != null)
+                            {
+                                m_currentSpriteAsset = m_defaultSpriteAsset;
+                            }
+                            else if (m_defaultSpriteAsset == null)
+                            {
+                                if (TMP_Settings.defaultSpriteAsset != null)
+                                    m_defaultSpriteAsset = TMP_Settings.defaultSpriteAsset;
+                                else
+                                    m_defaultSpriteAsset = Resources.Load<TMP_SpriteAsset>("Sprite Assets/Default Sprite Asset");
+
+                                m_currentSpriteAsset = m_defaultSpriteAsset;
+                            }
+
+                            // No valid sprite asset available
+                            if (m_currentSpriteAsset == null)
+                                return false;
+                        }
+                        else
+                        {
+                            // A Sprite Asset has been specified
+                            if (MaterialReferenceManager.TryGetSpriteAsset(spriteAssetHashCode, out tempSpriteAsset))
+                            {
+                                m_currentSpriteAsset = tempSpriteAsset;
+                            }
+                            else
+                            {
+                                // Load Sprite Asset
+                                if (tempSpriteAsset == null)
+                                {
+                                    tempSpriteAsset = Resources.Load<TMP_SpriteAsset>(TMP_Settings.defaultSpriteAssetPath + new string(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength));
+                                }
+
+                                if (tempSpriteAsset == null)
+                                    return false;
+
+                                //Debug.Log("Loading & assigning new Sprite Asset: " + tempSpriteAsset.name);
+                                MaterialReferenceManager.AddSpriteAsset(spriteAssetHashCode, tempSpriteAsset);
+                                m_currentSpriteAsset = tempSpriteAsset;
+                            }
+                        }
+
+                        // Handling of <sprite=index> legacy tag format.
+                        if (m_xmlAttribute[0].valueType == TagValueType.NumericalValue) // <sprite=index>
+                        {
+                            int index = (int)ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                            if (index == -9999) return false;
+
+                            // Check to make sure sprite index is valid
+                            if (index > m_currentSpriteAsset.spriteCharacterTable.Count - 1) return false;
+
+                            m_spriteIndex = index;
+                        }
+
+                        m_spriteColor = s_colorWhite;
+                        m_tintSprite = false;
+
+                        // Handle Sprite Tag Attributes
+                        for (int i = 0; i < m_xmlAttribute.Length && m_xmlAttribute[i].nameHashCode != 0; i++)
+                        {
+                            //Debug.Log("Attribute[" + i + "].nameHashCode=" + m_xmlAttribute[i].nameHashCode + "   Value:" + ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength));
+                            int nameHashCode = m_xmlAttribute[i].nameHashCode;
+                            int index = 0;
+
+                            switch (nameHashCode)
+                            {
+                                case 43347: // <sprite name="">
+                                case 30547: // <SPRITE NAME="">
+                                    m_currentSpriteAsset = TMP_SpriteAsset.SearchForSpriteByHashCode(m_currentSpriteAsset, m_xmlAttribute[i].valueHashCode, true, out index);
+                                    if (index == -1) return false;
+
+                                    m_spriteIndex = index;
+                                    break;
+                                case 295562: // <sprite index=>
+                                case 205930: // <SPRITE INDEX=>
+                                    index = (int)ConvertToFloat(m_htmlTag, m_xmlAttribute[1].valueStartIndex, m_xmlAttribute[1].valueLength);
+                                    if (index == -9999) return false;
+
+                                    // Check to make sure sprite index is valid
+                                    if (index > m_currentSpriteAsset.spriteCharacterTable.Count - 1) return false;
+
+                                    m_spriteIndex = index;
+                                    break;
+                                case 45819: // tint
+                                case 33019: // TINT
+                                    m_tintSprite = ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength) != 0;
+                                    break;
+                                case 281955: // color=#FF00FF80
+                                case 192323: // COLOR
+                                    m_spriteColor = HexCharsToColor(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength);
+                                    break;
+                                case 39505: // anim="0,16,12"  start, end, fps
+                                case 26705: // ANIM
+                                    //Debug.Log("Start: " + m_xmlAttribute[i].valueStartIndex + "  Length: " + m_xmlAttribute[i].valueLength);
+                                    int paramCount = GetAttributeParameters(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength, ref m_attributeParameterValues);
+                                    if (paramCount != 3) return false;
+
+                                    m_spriteIndex = (int)m_attributeParameterValues[0];
+
+                                    if (m_isParsingText)
+                                    {
+                                        // TODO : fix this!
+                                        //if (m_attributeParameterValues[0] > m_currentSpriteAsset.spriteInfoList.Count - 1 || m_attributeParameterValues[1] > m_currentSpriteAsset.spriteInfoList.Count - 1)
+                                        //    return false;
+
+                                        spriteAnimator.DoSpriteAnimation(m_characterCount, m_currentSpriteAsset, m_spriteIndex, (int)m_attributeParameterValues[1], (int)m_attributeParameterValues[2]);
+                                    }
+
+                                    break;
+                                //case 45545: // size
+                                //case 32745: // SIZE
+
+                                //    break;
+                                default:
+                                    if (nameHashCode != 2246877 && nameHashCode != 1619421)
+                                        return false;
+                                    break;
+                            }
+                        }
+
+                        if (m_spriteIndex == -1) return false;
+
+                        // Material HashCode for the Sprite Asset is the Sprite Asset Hash Code
+                        m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentSpriteAsset.material, m_currentSpriteAsset, m_materialReferences, m_materialReferenceIndexLookup);
+
+                        m_textElementType = TMP_TextElementType.Sprite;
+                        return true;
+                    case 730022849: // <lowercase>
+                    case 514803617: // <LOWERCASE>
+                        m_FontStyleInternal |= FontStyles.LowerCase;
+                        m_fontStyleStack.Add(FontStyles.LowerCase);
+                        return true;
+                    case -1668324918: // </lowercase>
+                    case -1883544150: // </LOWERCASE>
+                        if ((m_fontStyle & FontStyles.LowerCase) != FontStyles.LowerCase)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.LowerCase) == 0)
+                                m_FontStyleInternal &= ~FontStyles.LowerCase;
+                        }
+                        return true;
+                    case 13526026: // <allcaps>
+                    case 9133802: // <ALLCAPS>
+                    case 781906058: // <uppercase>
+                    case 566686826: // <UPPERCASE>
+                        m_FontStyleInternal |= FontStyles.UpperCase;
+                        m_fontStyleStack.Add(FontStyles.UpperCase);
+                        return true;
+                    case 52232547: // </allcaps>
+                    case 47840323: // </ALLCAPS>
+                    case -1616441709: // </uppercase>
+                    case -1831660941: // </UPPERCASE>
+                        if ((m_fontStyle & FontStyles.UpperCase) != FontStyles.UpperCase)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.UpperCase) == 0)
+                                m_FontStyleInternal &= ~FontStyles.UpperCase;
+                        }
+                        return true;
+                    case 766244328: // <smallcaps>
+                    case 551025096: // <SMALLCAPS>
+                        m_FontStyleInternal |= FontStyles.SmallCaps;
+                        m_fontStyleStack.Add(FontStyles.SmallCaps);
+                        return true;
+                    case -1632103439: // </smallcaps>
+                    case -1847322671: // </SMALLCAPS>
+                        if ((m_fontStyle & FontStyles.SmallCaps) != FontStyles.SmallCaps)
+                        {
+                            if (m_fontStyleStack.Remove(FontStyles.SmallCaps) == 0)
+                                m_FontStyleInternal &= ~FontStyles.SmallCaps;
+                        }
+                        return true;
+                    case 2109854: // <margin=00.0> <margin=00em> <margin=50%>
+                    case 1482398: // <MARGIN>
+                        // Check value type
+                        switch (m_xmlAttribute[0].valueType)
+                        {
+                            case TagValueType.NumericalValue:
+                                value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength); // px
+                                if (value == -9999) return false;
+
+                                // Determine tag unit type
+                                switch (tagUnitType)
+                                {
+                                    case TagUnitType.Pixels:
+                                        m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f);
+                                        break;
+                                    case TagUnitType.FontUnits:
+                                        m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                        break;
+                                    case TagUnitType.Percentage:
+                                        m_marginLeft = (m_marginWidth - (m_width != -1 ? m_width : 0)) * value / 100;
+                                        break;
+                                }
+                                m_marginLeft = m_marginLeft >= 0 ? m_marginLeft : 0;
+                                m_marginRight = m_marginLeft;
+                                return true;
+
+                            case TagValueType.None:
+                                for (int i = 1; i < m_xmlAttribute.Length && m_xmlAttribute[i].nameHashCode != 0; i++)
+                                {
+                                    // Get attribute name
+                                    int nameHashCode = m_xmlAttribute[i].nameHashCode;
+
+                                    switch (nameHashCode)
+                                    {
+                                        case 42823:  // <margin left=value>
+                                            value = ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength); // px
+                                            if (value == -9999) return false;
+
+                                            switch (m_xmlAttribute[i].unitType)
+                                            {
+                                                case TagUnitType.Pixels:
+                                                    m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f);
+                                                    break;
+                                                case TagUnitType.FontUnits:
+                                                    m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                                    break;
+                                                case TagUnitType.Percentage:
+                                                    m_marginLeft = (m_marginWidth - (m_width != -1 ? m_width : 0)) * value / 100;
+                                                    break;
+                                            }
+                                            m_marginLeft = m_marginLeft >= 0 ? m_marginLeft : 0;
+                                            break;
+
+                                        case 315620: // <margin right=value>
+                                            value = ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength); // px
+                                            if (value == -9999) return false;
+
+                                            switch (m_xmlAttribute[i].unitType)
+                                            {
+                                                case TagUnitType.Pixels:
+                                                    m_marginRight = value * (m_isOrthographic ? 1 : 0.1f);
+                                                    break;
+                                                case TagUnitType.FontUnits:
+                                                    m_marginRight = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                                    break;
+                                                case TagUnitType.Percentage:
+                                                    m_marginRight = (m_marginWidth - (m_width != -1 ? m_width : 0)) * value / 100;
+                                                    break;
+                                            }
+                                            m_marginRight = m_marginRight >= 0 ? m_marginRight : 0;
+                                            break;
+                                    }
+                                }
+                                return true;
+                        }
+
+                        return false;
+                    case 7639357: // </margin>
+                    case 7011901: // </MARGIN>
+                        m_marginLeft = 0;
+                        m_marginRight = 0;
+                        return true;
+                    case 1100728678: // <margin-left=xx.x>
+                    case -855002522: // <MARGIN-LEFT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength); // px
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                m_marginLeft = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                m_marginLeft = (m_marginWidth - (m_width != -1 ? m_width : 0)) * value / 100;
+                                break;
+                        }
+                        m_marginLeft = m_marginLeft >= 0 ? m_marginLeft : 0;
+                        return true;
+                    case -884817987: // <margin-right=xx.x>
+                    case -1690034531: // <MARGIN-RIGHT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength); // px
+                        if (value == -9999) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_marginRight = value * (m_isOrthographic ? 1 : 0.1f);
+                                break;
+                            case TagUnitType.FontUnits:
+                                m_marginRight = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                m_marginRight = (m_marginWidth - (m_width != -1 ? m_width : 0)) * value / 100;
+                                break;
+                        }
+                        m_marginRight = m_marginRight >= 0 ? m_marginRight : 0;
+                        return true;
+                    case 1109349752: // <line-height=xx.x>
+                    case -842693512: // <LINE-HEIGHT>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999 || value == 0) return false;
+
+                        switch (tagUnitType)
+                        {
+                            case TagUnitType.Pixels:
+                                m_lineHeight = value * (m_isOrthographic ? 1 : 0.1f); 
+                                break;
+                            case TagUnitType.FontUnits:
+                                m_lineHeight = value * (m_isOrthographic ? 1 : 0.1f) * m_currentFontSize;
+                                break;
+                            case TagUnitType.Percentage:
+                                m_lineHeight = m_fontAsset.faceInfo.lineHeight * value / 100 * m_fontScale;
+                                break;
+                        }
+                        return true;
+                    case -445573839: // </line-height>
+                    case 1897350193: // </LINE-HEIGHT>
+                        m_lineHeight = TMP_Math.FLOAT_UNSET;
+                        return true;
+                    case 15115642: // <noparse>
+                    case 10723418: // <NOPARSE>
+                        tag_NoParsing = true;
+                        return true;
+                    case 1913798: // <action>
+                    case 1286342: // <ACTION>
+                        int actionID = m_xmlAttribute[0].valueHashCode;
+
+                        if (m_isParsingText)
+                        {
+                            m_actionStack.Add(actionID);
+
+                            Debug.Log("Action ID: [" + actionID + "] First character index: " + m_characterCount);
+
+
+                        }
+                        //if (m_isParsingText)
+                        //{
+                        // TMP_Action action = TMP_Action.GetAction(m_xmlAttribute[0].valueHashCode);
+                        //}
+                        return true;
+                    case 7443301: // </action>
+                    case 6815845: // </ACTION>
+                        if (m_isParsingText)
+                        {
+                            Debug.Log("Action ID: [" + m_actionStack.CurrentItem() + "] Last character index: " + (m_characterCount - 1));
+                        }
+
+                        m_actionStack.Remove();
+                        return true;
+                    case 315682: // <scale=xx.x>
+                    case 226050: // <SCALE=xx.x>
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        m_FXMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(value, 1, 1));
+                        m_isFXMatrixSet = true;
+
+                        return true;
+                    case 1105611: // </scale>
+                    case 1015979: // </SCALE>
+                        m_isFXMatrixSet = false;
+                        return true;
+                    case 2227963: // <rotate=xx.x>
+                    case 1600507: // <ROTATE=xx.x>
+                        // TODO: Add ability to use Random Rotation
+
+                        value = ConvertToFloat(m_htmlTag, m_xmlAttribute[0].valueStartIndex, m_xmlAttribute[0].valueLength);
+                        if (value == -9999) return false;
+
+                        m_FXMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, value), Vector3.one);
+                        m_isFXMatrixSet = true;
+
+                        return true;
+                    case 7757466: // </rotate>
+                    case 7130010: // </ROTATE>
+                        m_isFXMatrixSet = false;
+                        return true;
+                    case 317446: // <table>
+                    case 227814: // <TABLE>
+                        switch (m_xmlAttribute[1].nameHashCode)
+                        {
+                            case 327550: // width
+                                float tableWidth = ConvertToFloat(m_htmlTag, m_xmlAttribute[1].valueStartIndex, m_xmlAttribute[1].valueLength);
+
+                                switch (tagUnitType)
+                                {
+                                    case TagUnitType.Pixels:
+                                        Debug.Log("Table width = " + tableWidth + "px.");
+                                        break;
+                                    case TagUnitType.FontUnits:
+                                        Debug.Log("Table width = " + tableWidth + "em.");
+                                        break;
+                                    case TagUnitType.Percentage:
+                                        Debug.Log("Table width = " + tableWidth + "%.");
+                                        break;
+                                }
+                                break;
+                        }
+                        return true;
+                    case 1107375: // </table>
+                    case 1017743: // </TABLE>
+                        return true;
+                    case 926: // <tr>
+                    case 670: // <TR>
+                        return true;
+                    case 3229: // </tr>
+                    case 2973: // </TR>
+                        return true;
+                    case 916: // <th>
+                    case 660: // <TH>
+                        // Set style to bold and center alignment
+                        return true;
+                    case 3219: // </th>
+                    case 2963: // </TH>
+                        return true;
+                    case 912: // <td>
+                    case 656: // <TD>
+                              // Style options
+                        for (int i = 1; i < m_xmlAttribute.Length && m_xmlAttribute[i].nameHashCode != 0; i++)
+                        {
+                            switch (m_xmlAttribute[i].nameHashCode)
+                            {
+                                case 327550: // width
+                                    float tableWidth = ConvertToFloat(m_htmlTag, m_xmlAttribute[i].valueStartIndex, m_xmlAttribute[i].valueLength);
+
+                                    switch (tagUnitType)
+                                    {
+                                        case TagUnitType.Pixels:
+                                            Debug.Log("Table width = " + tableWidth + "px.");
+                                            break;
+                                        case TagUnitType.FontUnits:
+                                            Debug.Log("Table width = " + tableWidth + "em.");
+                                            break;
+                                        case TagUnitType.Percentage:
+                                            Debug.Log("Table width = " + tableWidth + "%.");
+                                            break;
+                                    }
+                                    break;
+                                case 275917: // align
+                                    switch (m_xmlAttribute[i].valueHashCode)
+                                    {
+                                        case 3774683: // left
+                                            Debug.Log("TD align=\"left\".");
+                                            break;
+                                        case 136703040: // right
+                                            Debug.Log("TD align=\"right\".");
+                                            break;
+                                        case -458210101: // center
+                                            Debug.Log("TD align=\"center\".");
+                                            break;
+                                        case -523808257: // justified
+                                            Debug.Log("TD align=\"justified\".");
+                                            break;
+                                    }
+                                    break;
+                            }
+                        }
+
+                        return true;
+                    case 3215: // </td>
+                    case 2959: // </TD>
+                        return true;
+                }
+            }
+            #endif
+            #endregion
+
+            return false;
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cef63a5c62ba087179b9c117a5559faad343dd33
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_Text.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5143f58107604835ab1a5efa2d8818fd
+timeCreated: 1445841744
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs
new file mode 100644
index 0000000000000000000000000000000000000000..97954d9db59fa96366af1f9801b86b04c484281d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs
@@ -0,0 +1,62 @@
+using System;
+using UnityEngine;
+using UnityEngine.TextCore;
+
+namespace TMPro
+{
+    public enum TextElementType : byte
+    {
+        Character   = 0x1,
+        Sprite      = 0x2,
+    }
+
+    /// <summary>
+    /// Base class for all text elements like Character and SpriteCharacter.
+    /// </summary>
+    [Serializable]
+    public class TMP_TextElement
+    {
+        /// <summary>
+        /// The type of text element which can be a character or sprite.
+        /// </summary>
+        public TextElementType elementType { get { return m_ElementType; } }
+
+        /// <summary>
+        /// The unicode value (code point) of the character.
+        /// </summary>
+        public uint unicode { get { return m_Unicode; } set { m_Unicode = value; } }
+
+        /// <summary>
+        /// The glyph used by this text element.
+        /// </summary>
+        public Glyph glyph { get { return m_Glyph; } set { m_Glyph = value; } }
+
+        /// <summary>
+        /// The index of the glyph used by this text element.
+        /// </summary>
+        public uint glyphIndex { get { return m_GlyphIndex; } set { m_GlyphIndex = value; } }
+
+        /// <summary>
+        /// The relative scale of the character.
+        /// </summary>
+        public float scale { get { return m_Scale; } set { m_Scale = value; } }
+
+        // =============================================
+        // Private backing fields for public properties.
+        // =============================================
+
+        [SerializeField]
+        protected TextElementType m_ElementType;
+
+        [SerializeField]
+        private uint m_Unicode;
+
+        private Glyph m_Glyph;
+
+        [SerializeField]
+        private uint m_GlyphIndex;
+
+        [SerializeField]
+        private float m_Scale;
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d369da07951d75c7b9d32eb6334bf120fd1a02d3
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 543674eec776b1442a192c932e6cd9b3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cb698cfa6e5c20ee06ed320716433d6ff80450d6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs
@@ -0,0 +1,25 @@
+using UnityEngine;
+using System;
+using System.Collections;
+
+
+namespace TMPro
+{
+
+    /// <summary>
+    /// Base class for all text elements like characters (glyphs) and sprites.
+    /// </summary>
+    [Serializable]
+    public class TMP_TextElement_Legacy
+    {
+        public int id;
+        public float x;
+        public float y;
+        public float width;
+        public float height;
+        public float xOffset;
+        public float yOffset;
+        public float xAdvance;
+        public float scale;
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..d782bf9b05d88d48a519b555c909216971091e99
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextElement_Legacy.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 87ab1bebe13f41f89d5427e7d2c34d58
+timeCreated: 1448407070
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1098304105ce3a8faf13213264a3b35d97700a11
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs
@@ -0,0 +1,256 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Class which contains information about every element contained within the text object.
+    /// </summary>
+    [Serializable]
+    public class TMP_TextInfo
+    {
+        private static Vector2 k_InfinityVectorPositive = new Vector2(32767, 32767);
+        private static Vector2 k_InfinityVectorNegative = new Vector2(-32767, -32767);
+
+        public TMP_Text textComponent;
+
+        public int characterCount;
+        public int spriteCount;
+        public int spaceCount;
+        public int wordCount;
+        public int linkCount;
+        public int lineCount;
+        public int pageCount;
+
+        public int materialCount;
+
+        public TMP_CharacterInfo[] characterInfo;
+        public TMP_WordInfo[] wordInfo;
+        public TMP_LinkInfo[] linkInfo;
+        public TMP_LineInfo[] lineInfo;
+        public TMP_PageInfo[] pageInfo;
+        public TMP_MeshInfo[] meshInfo;
+
+        private TMP_MeshInfo[] m_CachedMeshInfo;
+
+        // Default Constructor
+        public TMP_TextInfo()
+        {
+            characterInfo = new TMP_CharacterInfo[8];
+            wordInfo = new TMP_WordInfo[16];
+            linkInfo = new TMP_LinkInfo[0];
+            lineInfo = new TMP_LineInfo[2];
+            pageInfo = new TMP_PageInfo[4];
+
+            meshInfo = new TMP_MeshInfo[1];
+        }
+
+
+        public TMP_TextInfo(TMP_Text textComponent)
+        {
+            this.textComponent = textComponent;
+
+            characterInfo = new TMP_CharacterInfo[8];
+
+            wordInfo = new TMP_WordInfo[4];
+            linkInfo = new TMP_LinkInfo[0];
+
+            lineInfo = new TMP_LineInfo[2];
+            pageInfo = new TMP_PageInfo[4];
+
+            meshInfo = new TMP_MeshInfo[1];
+            meshInfo[0].mesh = textComponent.mesh;
+            materialCount = 1;
+        }
+
+
+        /// <summary>
+        /// Function to clear the counters of the text object.
+        /// </summary>
+        public void Clear()
+        {
+            characterCount = 0;
+            spaceCount = 0;
+            wordCount = 0;
+            linkCount = 0;
+            lineCount = 0;
+            pageCount = 0;
+            spriteCount = 0;
+
+            for (int i = 0; i < this.meshInfo.Length; i++)
+            {
+                this.meshInfo[i].vertexCount = 0;
+            }
+        }
+
+
+        /// <summary>
+        /// Function to clear the content of the MeshInfo array while preserving the Triangles, Normals and Tangents.
+        /// </summary>
+        public void ClearMeshInfo(bool updateMesh)
+        {
+            for (int i = 0; i < this.meshInfo.Length; i++)
+                this.meshInfo[i].Clear(updateMesh);
+        }
+
+
+        /// <summary>
+        /// Function to clear the content of all the MeshInfo arrays while preserving their Triangles, Normals and Tangents.
+        /// </summary>
+        public void ClearAllMeshInfo()
+        {
+            for (int i = 0; i < this.meshInfo.Length; i++)
+                this.meshInfo[i].Clear(true);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public void ResetVertexLayout(bool isVolumetric)
+        {
+            for (int i = 0; i < this.meshInfo.Length; i++)
+                this.meshInfo[i].ResizeMeshInfo(0, isVolumetric);
+        }
+
+
+        /// <summary>
+        /// Function used to mark unused vertices as degenerate.
+        /// </summary>
+        /// <param name="materials"></param>
+        public void ClearUnusedVertices(MaterialReference[] materials)
+        {
+            for (int i = 0; i < meshInfo.Length; i++)
+            {
+                int start = 0; // materials[i].referenceCount * 4;
+                meshInfo[i].ClearUnusedVertices(start);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to clear and initialize the lineInfo array. 
+        /// </summary>
+        public void ClearLineInfo()
+        {
+            if (this.lineInfo == null)
+                this.lineInfo = new TMP_LineInfo[2];
+
+            for (int i = 0; i < this.lineInfo.Length; i++)
+            {
+                this.lineInfo[i].characterCount = 0;
+                this.lineInfo[i].spaceCount = 0;
+                this.lineInfo[i].wordCount = 0;
+                this.lineInfo[i].controlCharacterCount = 0;
+                this.lineInfo[i].width = 0;
+
+                this.lineInfo[i].ascender = k_InfinityVectorNegative.x;
+                this.lineInfo[i].descender = k_InfinityVectorPositive.x;
+
+                this.lineInfo[i].lineExtents.min = k_InfinityVectorPositive;
+                this.lineInfo[i].lineExtents.max = k_InfinityVectorNegative;
+
+                this.lineInfo[i].maxAdvance = 0;
+                //this.lineInfo[i].maxScale = 0;
+
+            }
+        }
+
+
+        /// <summary>
+        /// Function to copy the MeshInfo Arrays and their primary vertex data content.
+        /// </summary>
+        /// <returns>A copy of the MeshInfo[]</returns>
+        public TMP_MeshInfo[] CopyMeshInfoVertexData()
+        {
+            if (m_CachedMeshInfo == null || m_CachedMeshInfo.Length != meshInfo.Length)
+            {
+                m_CachedMeshInfo = new TMP_MeshInfo[meshInfo.Length];
+
+                // Initialize all the vertex data arrays
+                for (int i = 0; i < m_CachedMeshInfo.Length; i++)
+                {
+                    int length = meshInfo[i].vertices.Length;
+
+                    m_CachedMeshInfo[i].vertices = new Vector3[length];
+                    m_CachedMeshInfo[i].uvs0 = new Vector2[length];
+                    m_CachedMeshInfo[i].uvs2 = new Vector2[length];
+                    m_CachedMeshInfo[i].colors32 = new Color32[length];
+
+                    //m_CachedMeshInfo[i].normals = new Vector3[length];
+                    //m_CachedMeshInfo[i].tangents = new Vector4[length];
+                    //m_CachedMeshInfo[i].triangles = new int[meshInfo[i].triangles.Length];
+                }
+            }
+
+            for (int i = 0; i < m_CachedMeshInfo.Length; i++)
+            {
+                int length = meshInfo[i].vertices.Length;
+
+                if (m_CachedMeshInfo[i].vertices.Length != length)
+                {
+                    m_CachedMeshInfo[i].vertices = new Vector3[length];
+                    m_CachedMeshInfo[i].uvs0 = new Vector2[length];
+                    m_CachedMeshInfo[i].uvs2 = new Vector2[length];
+                    m_CachedMeshInfo[i].colors32 = new Color32[length];
+
+                    //m_CachedMeshInfo[i].normals = new Vector3[length];
+                    //m_CachedMeshInfo[i].tangents = new Vector4[length];
+                    //m_CachedMeshInfo[i].triangles = new int[meshInfo[i].triangles.Length];
+                }
+
+
+                // Only copy the primary vertex data
+                Array.Copy(meshInfo[i].vertices, m_CachedMeshInfo[i].vertices, length);
+                Array.Copy(meshInfo[i].uvs0, m_CachedMeshInfo[i].uvs0, length);
+                Array.Copy(meshInfo[i].uvs2, m_CachedMeshInfo[i].uvs2, length);
+                Array.Copy(meshInfo[i].colors32, m_CachedMeshInfo[i].colors32, length);
+
+                //Array.Copy(meshInfo[i].normals, m_CachedMeshInfo[i].normals, length);
+                //Array.Copy(meshInfo[i].tangents, m_CachedMeshInfo[i].tangents, length);
+                //Array.Copy(meshInfo[i].triangles, m_CachedMeshInfo[i].triangles, meshInfo[i].triangles.Length);
+            }
+
+            return m_CachedMeshInfo;
+        }
+
+
+
+        /// <summary>
+        /// Function to resize any of the structure contained in the TMP_TextInfo class.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="array"></param>
+        /// <param name="size"></param>
+        public static void Resize<T> (ref T[] array, int size)
+        {
+            // Allocated to the next power of two
+            int newSize = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size);
+
+            Array.Resize(ref array, newSize);
+        }
+
+
+        /// <summary>
+        /// Function to resize any of the structure contained in the TMP_TextInfo class.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="array"></param>
+        /// <param name="size"></param>
+        /// <param name="isFixedSize"></param>
+        public static void Resize<T>(ref T[] array, int size, bool isBlockAllocated)
+        {
+            //if (size <= array.Length) return;
+
+            if (isBlockAllocated) size = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size);
+
+            if (size == array.Length) return;
+
+            Array.Resize(ref array, size);
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..4f70c1f7f0563d8654338cef768679e4f359c922
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextInfo.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4ae64f3f72004807a9f919f9c27af0db
+timeCreated: 1446589998
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c2acfba761c153902f1db376a028b67621fd8e2b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs
@@ -0,0 +1,136 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace TMPro
+{
+    public class TMP_TextParsingUtilities 
+    {
+        private static readonly TMP_TextParsingUtilities s_Instance = new TMP_TextParsingUtilities();
+
+        /// <summary>
+        /// Default constructor
+        /// </summary>
+        static TMP_TextParsingUtilities() { }
+
+
+        /// <summary>
+        /// Get a singleton instance of the TextModuleUtilities.
+        /// </summary>
+        public static TMP_TextParsingUtilities instance
+        {
+            get { return s_Instance; }
+        }
+
+
+        /// <summary>
+        /// Function returning the hashcode value of a given string.
+        /// </summary>
+        public static uint GetHashCode(string s)
+        {
+            uint hashCode = 0;
+
+            for (int i = 0; i < s.Length; i++)
+                hashCode = ((hashCode << 5) + hashCode) ^ ToUpperASCIIFast(s[i]);
+
+            return hashCode;
+        }
+
+        public static int GetHashCodeCaseSensitive(string s)
+        {
+            int hashCode = 0;
+
+            for (int i = 0; i < s.Length; i++)
+                hashCode = ((hashCode << 5) + hashCode) ^ s[i];
+
+            return hashCode;
+        }
+
+
+        /// <summary>
+        /// Table used to convert character to lowercase.
+        /// </summary>
+        const string k_LookupStringL = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[-]^_`abcdefghijklmnopqrstuvwxyz{|}~-";
+
+        /// <summary>
+        /// Table used to convert character to uppercase.
+        /// </summary>
+        const string k_LookupStringU = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[-]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~-";
+
+
+        /// <summary>
+        /// Get lowercase version of this ASCII character.
+        /// </summary>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static char ToLowerASCIIFast(char c)
+        {
+            if (c > k_LookupStringL.Length - 1)
+                return c;
+
+            return k_LookupStringL[c];
+        }
+
+
+        /// <summary>
+        /// Get uppercase version of this ASCII character.
+        /// </summary>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static char ToUpperASCIIFast(char c)
+        {
+            if (c > k_LookupStringU.Length - 1)
+                return c;
+
+            return k_LookupStringU[c];
+        }
+
+
+        /// <summary>
+        /// Get uppercase version of this ASCII character.
+        /// </summary>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static uint ToUpperASCIIFast(uint c)
+        {
+            if (c > k_LookupStringU.Length - 1)
+                return c;
+
+            return k_LookupStringU[(int)c];
+        }
+
+
+        /// <summary>
+        /// Get lowercase version of this ASCII character.
+        /// </summary>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static uint ToLowerASCIIFast(uint c)
+        {
+            if (c > k_LookupStringL.Length - 1)
+                return c;
+
+            return k_LookupStringL[(int)c];
+        }
+
+
+        /// <summary>
+        /// Check if Unicode is High Surrogate
+        /// </summary>
+        /// <param name="c"></param>
+        /// <returns></returns>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static bool IsHighSurrogate(uint c)
+        {
+            return c > 0xD800 && c < 0xDBFF;
+        }
+
+        /// <summary>
+        /// Check if Unicode is Low Surrogate
+        /// </summary>
+        /// <param name="c"></param>
+        /// <returns></returns>
+        //[MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static bool IsLowSurrogate(uint c)
+        {
+            return c > 0xDC00 && c < 0xDFFF;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e30b54c5dce3badbb52033d2427edd61686afd1f
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextParsingUtilities.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6ad632cbcc87f634d9b86006cdffdaf5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4db3d37cc9ec16d79c24f3bc9d50173789598e4d
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs
@@ -0,0 +1,2280 @@
+using UnityEngine;
+using System.Collections;
+
+
+namespace TMPro
+{
+    public enum CaretPosition { None, Left, Right }
+
+    /// <summary>
+    /// Structure which contains the character index and position of caret relative to the character.
+    /// </summary>
+    public struct CaretInfo
+    {
+        public int index;
+        public CaretPosition position;
+
+        public CaretInfo(int index, CaretPosition position)
+        {
+            this.index = index;
+            this.position = position;
+        }
+    }
+
+    public static class TMP_TextUtilities
+    {
+        private static Vector3[] m_rectWorldCorners = new Vector3[4];
+        
+        
+        // TEXT INPUT COMPONENT RELATED FUNCTIONS
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="textComponent">A reference to the text object.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        //public static CaretInfo GetCursorInsertionIndex(TMP_Text textComponent, Vector3 position, Camera camera)
+        //{
+        //    int index = TMP_TextUtilities.FindNearestCharacter(textComponent, position, camera, false);
+
+        //    RectTransform rectTransform = textComponent.rectTransform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    TMP_CharacterInfo cInfo = textComponent.textInfo.characterInfo[index];
+
+        //    // Get Bottom Left and Top Right position of the current character
+        //    Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+        //    //Vector3 tl = rectTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+        //    Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+        //    //Vector3 br = rectTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+        //    float insertPosition = (position.x - bl.x) / (tr.x - bl.x);
+
+        //    if (insertPosition < 0.5f)
+        //        return new CaretInfo(index, CaretPosition.Left);
+        //    else
+        //        return new CaretInfo(index, CaretPosition.Right);
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the character whose origin is closest to the cursor.
+        /// </summary>
+        /// <param name="textComponent">A reference to the text object.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static int GetCursorIndexFromPosition(TMP_Text textComponent, Vector3 position, Camera camera)
+        {
+            int index = TMP_TextUtilities.FindNearestCharacter(textComponent, position, camera, false);
+
+            RectTransform rectTransform = textComponent.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            TMP_CharacterInfo cInfo = textComponent.textInfo.characterInfo[index];
+
+            // Get Bottom Left and Top Right position of the current character
+            Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+            Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+
+            float insertPosition = (position.x - bl.x) / (tr.x - bl.x);
+
+            if (insertPosition < 0.5f)
+                return index;
+            else
+                return index + 1;
+
+        }
+
+
+        /// <summary>
+        /// Function returning the index of the character whose origin is closest to the cursor.
+        /// </summary>
+        /// <param name="textComponent">A reference to the text object.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <param name="cursor">The position of the cursor insertion position relative to the position.</param>
+        /// <returns></returns>
+        //public static int GetCursorIndexFromPosition(TMP_Text textComponent, Vector3 position, Camera camera, out CaretPosition cursor)
+        //{
+        //    int index = TMP_TextUtilities.FindNearestCharacter(textComponent, position, camera, false);
+
+        //    RectTransform rectTransform = textComponent.rectTransform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    TMP_CharacterInfo cInfo = textComponent.textInfo.characterInfo[index];
+
+        //    // Get Bottom Left and Top Right position of the current character
+        //    Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+        //    Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+
+        //    float insertPosition = (position.x - bl.x) / (tr.x - bl.x);
+
+        //    if (insertPosition < 0.5f)
+        //    {
+        //        cursor = CaretPosition.Left;
+        //        return index;
+        //    }
+        //    else
+        //    {
+        //        cursor = CaretPosition.Right;
+        //        return index;
+        //    }
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the character whose origin is closest to the cursor.
+        /// </summary>
+        /// <param name="textComponent">A reference to the text object.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <param name="cursor">The position of the cursor insertion position relative to the position.</param>
+        /// <returns></returns>
+        public static int GetCursorIndexFromPosition(TMP_Text textComponent, Vector3 position, Camera camera, out CaretPosition cursor)
+        {
+            int line = TMP_TextUtilities.FindNearestLine(textComponent, position, camera);
+
+            int index = FindNearestCharacterOnLine(textComponent, position, line, camera, false);
+
+            // Special handling if line contains only one character.
+            if (textComponent.textInfo.lineInfo[line].characterCount == 1)
+            {
+                cursor = CaretPosition.Left;
+                return index;
+            }
+
+            RectTransform rectTransform = textComponent.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            TMP_CharacterInfo cInfo = textComponent.textInfo.characterInfo[index];
+
+            // Get Bottom Left and Top Right position of the current character
+            Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+            Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+
+            float insertPosition = (position.x - bl.x) / (tr.x - bl.x);
+
+            if (insertPosition < 0.5f)
+            {
+                cursor = CaretPosition.Left;
+                return index;
+            }
+            else
+            {
+                cursor = CaretPosition.Right;
+                return index;
+            }
+        }
+
+
+        /// <summary>
+        /// Function returning the line nearest to the position.
+        /// </summary>
+        /// <param name="textComponent"></param>
+        /// <param name="position"></param>
+        /// <param name="camera"></param>
+        /// <returns></returns>
+        public static int FindNearestLine(TMP_Text text, Vector3 position, Camera camera)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            float distance = Mathf.Infinity;
+            int closest = -1;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.lineCount; i++)
+            {
+                TMP_LineInfo lineInfo = text.textInfo.lineInfo[i];
+
+                float ascender = rectTransform.TransformPoint(new Vector3(0, lineInfo.ascender, 0)).y;
+                float descender = rectTransform.TransformPoint(new Vector3(0, lineInfo.descender, 0)).y;
+
+                if (ascender > position.y && descender < position.y)
+                { 
+                    //Debug.Log("Position is on line " + i);
+                    return i;
+                }
+
+                float d0 = Mathf.Abs(ascender - position.y);
+                float d1 = Mathf.Abs(descender - position.y);
+
+                float d = Mathf.Min(d0, d1);
+                if (d < distance)
+                {
+                    distance = d;
+                    closest = i;
+                }
+            }
+
+            //Debug.Log("Closest line to position is " + closest);
+            return closest;
+        }
+
+
+        /// <summary>
+        /// Function returning the nearest character to position on a given line.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <param name="position"></param>
+        /// <param name="line"></param>
+        /// <param name="camera"></param>
+        /// <returns></returns>
+        public static int FindNearestCharacterOnLine(TMP_Text text, Vector3 position, int line, Camera camera, bool visibleOnly)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            int firstCharacter = text.textInfo.lineInfo[line].firstCharacterIndex;
+            int lastCharacter = text.textInfo.lineInfo[line].lastCharacterIndex;
+
+            float distanceSqr = Mathf.Infinity;
+            int closest = lastCharacter;
+
+            for (int i = firstCharacter; i < lastCharacter; i++)
+            {
+                // Get current character info.
+                TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+                if (visibleOnly && !cInfo.isVisible) continue;
+
+                // Get Bottom Left and Top Right position of the current character
+                Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+                Vector3 tl = rectTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+                Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+                Vector3 br = rectTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+                if (PointIntersectRectangle(position, bl, tl, tr, br))
+                {
+                    closest = i;
+                    break;
+                }
+
+                // Find the closest corner to position.
+                float dbl = DistanceToLine(bl, tl, position);
+                float dtl = DistanceToLine(tl, tr, position);
+                float dtr = DistanceToLine(tr, br, position);
+                float dbr = DistanceToLine(br, bl, position);
+
+                float d = dbl < dtl ? dbl : dtl;
+                d = d < dtr ? d : dtr;
+                d = d < dbr ? d : dbr;
+
+                if (distanceSqr > d)
+                {
+                    distanceSqr = d;
+                    closest = i;
+                }
+            }
+            return closest;
+        }
+
+
+        /// <summary>
+        /// Function used to determine if the position intersects with the RectTransform.
+        /// </summary>
+        /// <param name="rectTransform">A reference to the RectTranform of the text object.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static bool IsIntersectingRectTransform(RectTransform rectTransform, Vector3 position, Camera camera)
+        {
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            rectTransform.GetWorldCorners(m_rectWorldCorners);
+
+            if (PointIntersectRectangle(position, m_rectWorldCorners[0], m_rectWorldCorners[1], m_rectWorldCorners[2], m_rectWorldCorners[3]))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+
+        // CHARACTER HANDLING
+
+        /// <summary>
+        /// Function returning the index of the character at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which is rendering the text or whichever one might be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <param name="visibleOnly">Only check for visible characters.</param>
+        /// <returns></returns>
+        public static int FindIntersectingCharacter(TMP_Text text, Vector3 position, Camera camera, bool visibleOnly)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.characterCount; i++)
+            {
+                // Get current character info.
+                TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+                if (visibleOnly && !cInfo.isVisible) continue;
+
+                // Get Bottom Left and Top Right position of the current character
+                Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+                Vector3 tl = rectTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+                Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+                Vector3 br = rectTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+                if (PointIntersectRectangle(position, bl, tl, tr, br))
+                    return i;
+
+            }
+            return -1;
+        }
+
+
+        /// <summary>
+        /// Function returning the index of the character at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <param name="visibleOnly">Only check for visible characters.</param>
+        /// <returns></returns>
+        //public static int FindIntersectingCharacter(TextMeshPro text, Vector3 position, Camera camera, bool visibleOnly)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.characterCount; i++)
+        //    {
+        //        // Get current character info.
+        //        TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+        //        if ((visibleOnly && !cInfo.isVisible) || (text.OverflowMode == TextOverflowModes.Page && cInfo.pageNumber + 1 != text.pageToDisplay))
+        //            continue;
+
+        //        // Get Bottom Left and Top Right position of the current character
+        //        Vector3 bl = textTransform.TransformPoint(cInfo.bottomLeft);
+        //        Vector3 tl = textTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+        //        Vector3 tr = textTransform.TransformPoint(cInfo.topRight);
+        //        Vector3 br = textTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+        //        if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //            return i;
+
+        //    }
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// Function to find the nearest character to position.
+        /// </summary>
+        /// <param name="text">A reference to the TMP Text component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <param name="visibleOnly">Only check for visible characters.</param>
+        /// <returns></returns>
+        public static int FindNearestCharacter(TMP_Text text, Vector3 position, Camera camera, bool visibleOnly)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            float distanceSqr = Mathf.Infinity;
+            int closest = 0;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.characterCount; i++)
+            {
+                // Get current character info.
+                TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+                if (visibleOnly && !cInfo.isVisible) continue;
+
+                // Get Bottom Left and Top Right position of the current character
+                Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+                Vector3 tl = rectTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+                Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+                Vector3 br = rectTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+                if (PointIntersectRectangle(position, bl, tl, tr, br))
+                    return i;
+
+                // Find the closest corner to position.
+                float dbl = DistanceToLine(bl, tl, position);
+                float dtl = DistanceToLine(tl, tr, position);
+                float dtr = DistanceToLine(tr, br, position);
+                float dbr = DistanceToLine(br, bl, position);
+
+                float d = dbl < dtl ? dbl : dtl;
+                d = d < dtr ? d : dtr;
+                d = d < dbr ? d : dbr;
+
+                if (distanceSqr > d)
+                {
+                    distanceSqr = d;
+                    closest = i;
+                }
+            }
+
+            return closest;
+        }
+
+
+        /// <summary>
+        /// Function to find the nearest character to position.
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <param name="visibleOnly">Only check for visible characters.</param>
+        /// <returns></returns>
+        //public static int FindNearestCharacter(TextMeshProUGUI text, Vector3 position, Camera camera, bool visibleOnly)
+        //{
+        //    RectTransform rectTransform = text.rectTransform;
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.characterCount; i++)
+        //    {
+        //        // Get current character info.
+        //        TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+        //        if ((visibleOnly && !cInfo.isVisible) || (text.OverflowMode == TextOverflowModes.Page && cInfo.pageNumber + 1 != text.pageToDisplay))
+        //            continue;
+
+        //        // Get Bottom Left and Top Right position of the current character
+        //        Vector3 bl = rectTransform.TransformPoint(cInfo.bottomLeft);
+        //        Vector3 tl = rectTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+        //        Vector3 tr = rectTransform.TransformPoint(cInfo.topRight);
+        //        Vector3 br = rectTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+        //        if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //            return i;
+
+        //        // Find the closest corner to position.
+        //        float dbl = DistanceToLine(bl, tl, position);
+        //        float dtl = DistanceToLine(tl, tr, position);
+        //        float dtr = DistanceToLine(tr, br, position);
+        //        float dbr = DistanceToLine(br, bl, position);
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //    }
+
+        //    //Debug.Log("Returning nearest character at index: " + closest);
+
+        //    return closest;
+        //}
+
+
+        /// <summary>
+        /// Function to find the nearest character to position.
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <param name="visibleOnly">Only check for visible characters.</param>
+        /// <returns></returns>
+        //public static int FindNearestCharacter(TextMeshPro text, Vector3 position, Camera camera, bool visibleOnly)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.characterCount; i++)
+        //    {
+        //        // Get current character info.
+        //        TMP_CharacterInfo cInfo = text.textInfo.characterInfo[i];
+        //        if ((visibleOnly && !cInfo.isVisible) || (text.OverflowMode == TextOverflowModes.Page && cInfo.pageNumber + 1 != text.pageToDisplay))
+        //            continue;
+
+        //        // Get Bottom Left and Top Right position of the current character
+        //        Vector3 bl = textTransform.TransformPoint(cInfo.bottomLeft);
+        //        Vector3 tl = textTransform.TransformPoint(new Vector3(cInfo.bottomLeft.x, cInfo.topRight.y, 0));
+        //        Vector3 tr = textTransform.TransformPoint(cInfo.topRight);
+        //        Vector3 br = textTransform.TransformPoint(new Vector3(cInfo.topRight.x, cInfo.bottomLeft.y, 0));
+
+        //        if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //            return i;
+
+        //        // Find the closest corner to position.
+        //        float dbl = DistanceToLine(bl, tl, position); // (position - bl).sqrMagnitude;
+        //        float dtl = DistanceToLine(tl, tr, position); // (position - tl).sqrMagnitude;
+        //        float dtr = DistanceToLine(tr, br, position); // (position - tr).sqrMagnitude;
+        //        float dbr = DistanceToLine(br, bl, position); // (position - br).sqrMagnitude;
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //    }
+
+        //    //Debug.Log("Returning nearest character at index: " + closest);
+
+        //    return closest;
+        //}
+
+
+        // WORD HANDLING
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TMP_Text component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static int FindIntersectingWord(TMP_Text text, Vector3 position, Camera camera)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.wordCount; i++)
+            {
+                TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+                bool isBeginRegion = false;
+
+                Vector3 bl = Vector3.zero;
+                Vector3 tl = Vector3.zero;
+                Vector3 br = Vector3.zero;
+                Vector3 tr = Vector3.zero;
+
+                float maxAscender = -Mathf.Infinity;
+                float minDescender = Mathf.Infinity;
+
+                // Iterate through each character of the word
+                for (int j = 0; j < wInfo.characterCount; j++)
+                {
+                    int characterIndex = wInfo.firstCharacterIndex + j;
+                    TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+                    int currentLine = currentCharInfo.lineNumber;
+
+                    bool isCharacterVisible = currentCharInfo.isVisible;
+
+                    // Track maximum Ascender and minimum Descender for each word.
+                    maxAscender = Mathf.Max(maxAscender, currentCharInfo.ascender);
+                    minDescender = Mathf.Min(minDescender, currentCharInfo.descender);
+
+                    if (isBeginRegion == false && isCharacterVisible)
+                    {
+                        isBeginRegion = true;
+
+                        bl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0);
+                        tl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0);
+
+                        //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+                        // If Word is one character
+                        if (wInfo.characterCount == 1)
+                        {
+                            isBeginRegion = false;
+
+                            br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+                            tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+                            // Transform coordinates to be relative to transform and account min descender and max ascender.
+                            bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+                            tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+                            tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+                            br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+                            // Check for Intersection
+                            if (PointIntersectRectangle(position, bl, tl, tr, br))
+                                return i;
+
+                            //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                        }
+                    }
+
+                    // Last Character of Word
+                    if (isBeginRegion && j == wInfo.characterCount - 1)
+                    {
+                        isBeginRegion = false;
+
+                        br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+                        tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+                        // Transform coordinates to be relative to transform and account min descender and max ascender.
+                        bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+                        tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+                        br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                    }
+                    // If Word is split on more than one line.
+                    else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+                    {
+                        isBeginRegion = false;
+
+                        br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+                        tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+                        // Transform coordinates to be relative to transform and account min descender and max ascender.
+                        bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+                        tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+                        br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+                        maxAscender = -Mathf.Infinity;
+                        minDescender = Mathf.Infinity;
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                    }
+                }
+
+                //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+            }
+
+            return -1;
+        }
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        //public static int FindIntersectingWord(TextMeshProUGUI text, Vector3 position, Camera camera)
+        //{
+        //    RectTransform rectTransform = text.rectTransform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.wordCount; i++)
+        //    {
+        //        TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        float maxAscender = -Mathf.Infinity;
+        //        float minDescender = Mathf.Infinity;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < wInfo.characterCount; j++)
+        //        {
+        //            int characterIndex = wInfo.firstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            bool isCharacterVisible = characterIndex > text.maxVisibleCharacters ||
+        //                                      currentCharInfo.lineNumber > text.maxVisibleLines ||
+        //                                     (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) ? false : true;
+
+        //            // Track maximum Ascender and minimum Descender for each word.
+        //            maxAscender = Mathf.Max(maxAscender, currentCharInfo.ascender);
+        //            minDescender = Mathf.Min(minDescender, currentCharInfo.descender);
+
+        //            if (isBeginRegion == false && isCharacterVisible)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0);
+        //                tl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0);
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (wInfo.characterCount == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                    tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                    // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                    bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                    tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                    tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                    br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == wInfo.characterCount - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                bl = rectTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                tl = rectTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                br = rectTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                maxAscender = -Mathf.Infinity;
+        //                minDescender = Mathf.Infinity;
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <returns></returns>
+        //public static int FindIntersectingWord(TextMeshPro text, Vector3 position, Camera camera)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.wordCount; i++)
+        //    {
+        //        TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        float maxAscender = -Mathf.Infinity;
+        //        float minDescender = Mathf.Infinity;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < wInfo.characterCount; j++)
+        //        {
+        //            int characterIndex = wInfo.firstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            bool isCharacterVisible = characterIndex > text.maxVisibleCharacters ||
+        //                                      currentCharInfo.lineNumber > text.maxVisibleLines ||
+        //                                     (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) ? false : true;
+
+        //            // Track maximum Ascender and minimum Descender for each word.
+        //            maxAscender = Mathf.Max(maxAscender, currentCharInfo.ascender);
+        //            minDescender = Mathf.Min(minDescender, currentCharInfo.descender);
+
+        //            if (isBeginRegion == false && isCharacterVisible)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0);
+        //                tl = new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0);
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (wInfo.characterCount == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                    tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                    // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                    bl = textTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                    tl = textTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                    tr = textTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                    br = textTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == wInfo.characterCount - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                bl = textTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                tl = textTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                br = textTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0);
+        //                tr = new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0);
+
+        //                // Transform coordinates to be relative to transform and account min descender and max ascender.
+        //                bl = textTransform.TransformPoint(new Vector3(bl.x, minDescender, 0));
+        //                tl = textTransform.TransformPoint(new Vector3(tl.x, maxAscender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(tr.x, maxAscender, 0));
+        //                br = textTransform.TransformPoint(new Vector3(br.x, minDescender, 0));
+
+        //                // Reset maxAscender and minDescender for next word segment.
+        //                maxAscender = -Mathf.Infinity;
+        //                minDescender = Mathf.Infinity;
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+        //    }
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TMP_Text component.</param>
+        /// <param name="position"></param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static int FindNearestWord(TMP_Text text, Vector3 position, Camera camera)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            float distanceSqr = Mathf.Infinity;
+            int closest = 0;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.wordCount; i++)
+            {
+                TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+                bool isBeginRegion = false;
+
+                Vector3 bl = Vector3.zero;
+                Vector3 tl = Vector3.zero;
+                Vector3 br = Vector3.zero;
+                Vector3 tr = Vector3.zero;
+
+                // Iterate through each character of the word
+                for (int j = 0; j < wInfo.characterCount; j++)
+                {
+                    int characterIndex = wInfo.firstCharacterIndex + j;
+                    TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+                    int currentLine = currentCharInfo.lineNumber;
+
+                    bool isCharacterVisible = currentCharInfo.isVisible;
+
+                    if (isBeginRegion == false && isCharacterVisible)
+                    {
+                        isBeginRegion = true;
+
+                        bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+                        tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+                        //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+                        // If Word is one character
+                        if (wInfo.characterCount == 1)
+                        {
+                            isBeginRegion = false;
+
+                            br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                            tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                            // Check for Intersection
+                            if (PointIntersectRectangle(position, bl, tl, tr, br))
+                                return i;
+
+                            // Find the closest line segment to position.
+                            float dbl = DistanceToLine(bl, tl, position);
+                            float dtl = DistanceToLine(tl, tr, position);
+                            float dtr = DistanceToLine(tr, br, position);
+                            float dbr = DistanceToLine(br, bl, position);
+
+                            float d = dbl < dtl ? dbl : dtl;
+                            d = d < dtr ? d : dtr;
+                            d = d < dbr ? d : dbr;
+
+                            if (distanceSqr > d)
+                            {
+                                distanceSqr = d;
+                                closest = i;
+                            }
+                        }
+                    }
+
+                    // Last Character of Word
+                    if (isBeginRegion && j == wInfo.characterCount - 1)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        // Find the closest line segment to position.
+                        float dbl = DistanceToLine(bl, tl, position);
+                        float dtl = DistanceToLine(tl, tr, position);
+                        float dtr = DistanceToLine(tr, br, position);
+                        float dbr = DistanceToLine(br, bl, position);
+
+                        float d = dbl < dtl ? dbl : dtl;
+                        d = d < dtr ? d : dtr;
+                        d = d < dbr ? d : dbr;
+
+                        if (distanceSqr > d)
+                        {
+                            distanceSqr = d;
+                            closest = i;
+                        }
+                    }
+                    // If Word is split on more than one line.
+                    else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        // Find the closest line segment to position.
+                        float dbl = DistanceToLine(bl, tl, position);
+                        float dtl = DistanceToLine(tl, tr, position);
+                        float dtr = DistanceToLine(tr, br, position);
+                        float dbr = DistanceToLine(br, bl, position);
+
+                        float d = dbl < dtl ? dbl : dtl;
+                        d = d < dtr ? d : dtr;
+                        d = d < dbr ? d : dbr;
+
+                        if (distanceSqr > d)
+                        {
+                            distanceSqr = d;
+                            closest = i;
+                        }
+                    }
+                }
+
+                //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+            }
+
+            return closest;
+        }
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position"></param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        //public static int FindNearestWord(TextMeshProUGUI text, Vector3 position, Camera camera)
+        //{
+        //    RectTransform rectTransform = text.rectTransform;
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.wordCount; i++)
+        //    {
+        //        TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < wInfo.characterCount; j++)
+        //        {
+        //            int characterIndex = wInfo.firstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            bool isCharacterVisible = characterIndex > text.maxVisibleCharacters ||
+        //                                      currentCharInfo.lineNumber > text.maxVisibleLines ||
+        //                                     (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) ? false : true;
+
+        //            if (isBeginRegion == false && isCharacterVisible)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (wInfo.characterCount == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == wInfo.characterCount - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        // Find the closest line segment to position.
+        //        float dbl = DistanceToLine(bl, tl, position); // (position - bl).sqrMagnitude;
+        //        float dtl = DistanceToLine(tl, tr, position); // (position - tl).sqrMagnitude;
+        //        float dtr = DistanceToLine(tr, br, position); // (position - tr).sqrMagnitude;
+        //        float dbr = DistanceToLine(br, bl, position); // (position - br).sqrMagnitude;
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return closest;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <returns></returns>
+        //public static int FindNearestWord(TextMeshPro text, Vector3 position, Camera camera)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.wordCount; i++)
+        //    {
+        //        TMP_WordInfo wInfo = text.textInfo.wordInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < wInfo.characterCount; j++)
+        //        {
+        //            int characterIndex = wInfo.firstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            bool isCharacterVisible = characterIndex > text.maxVisibleCharacters ||
+        //                                      currentCharInfo.lineNumber > text.maxVisibleLines ||
+        //                                     (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) ? false : true;
+
+        //            if (isBeginRegion == false && isCharacterVisible)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (wInfo.characterCount == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == wInfo.characterCount - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //         // Find the closest line segment to position.
+        //        float dbl = DistanceToLine(bl, tl, position);
+        //        float dtl = DistanceToLine(tl, tr, position);
+        //        float dtr = DistanceToLine(tr, br, position);
+        //        float dbr = DistanceToLine(br, bl, position);
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return closest;
+
+        //}
+
+
+        /// <summary>
+        /// Function returning the line intersecting the position.
+        /// </summary>
+        /// <param name="textComponent"></param>
+        /// <param name="position"></param>
+        /// <param name="camera"></param>
+        /// <returns></returns>
+        public static int FindIntersectingLine(TMP_Text text, Vector3 position, Camera camera)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            int closest = -1;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.lineCount; i++)
+            {
+                TMP_LineInfo lineInfo = text.textInfo.lineInfo[i];
+
+                float ascender = rectTransform.TransformPoint(new Vector3(0, lineInfo.ascender, 0)).y;
+                float descender = rectTransform.TransformPoint(new Vector3(0, lineInfo.descender, 0)).y;
+
+                if (ascender > position.y && descender < position.y)
+                {
+                    //Debug.Log("Position is on line " + i);
+                    return i;
+                }
+            }
+
+            //Debug.Log("Closest line to position is " + closest);
+            return closest;
+        }
+
+
+        /// <summary>
+        /// Function returning the index of the Link at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TMP_Text component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static int FindIntersectingLink(TMP_Text text, Vector3 position, Camera camera)
+        {
+            Transform rectTransform = text.transform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            for (int i = 0; i < text.textInfo.linkCount; i++)
+            {
+                TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+                bool isBeginRegion = false;
+
+                Vector3 bl = Vector3.zero;
+                Vector3 tl = Vector3.zero;
+                Vector3 br = Vector3.zero;
+                Vector3 tr = Vector3.zero;
+
+                // Iterate through each character of the word
+                for (int j = 0; j < linkInfo.linkTextLength; j++)
+                {
+                    int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+                    TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+                    int currentLine = currentCharInfo.lineNumber;
+
+                    // Check if Link characters are on the current page
+                    if (text.overflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) continue;
+
+                    if (isBeginRegion == false)
+                    {
+                        isBeginRegion = true;
+
+                        bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+                        tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+                        //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+                        // If Word is one character
+                        if (linkInfo.linkTextLength == 1)
+                        {
+                            isBeginRegion = false;
+
+                            br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                            tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                            // Check for Intersection
+                            if (PointIntersectRectangle(position, bl, tl, tr, br))
+                                return i;
+
+                            //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                        }
+                    }
+
+                    // Last Character of Word
+                    if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                    }
+                    // If Word is split on more than one line.
+                    else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+                    }
+                }
+
+                //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+            }
+
+            return -1;
+        }
+
+        /// <summary>
+        /// Function returning the index of the Link at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        //public static int FindIntersectingLink(TextMeshProUGUI text, Vector3 position, Camera camera)
+        //{
+        //    Transform rectTransform = text.transform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.linkCount; i++)
+        //    {
+        //        TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < linkInfo.linkTextLength; j++)
+        //        {
+        //            int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            // Check if Link characters are on the current page
+        //            if (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) continue;
+
+        //            if (isBeginRegion == false)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (linkInfo.linkTextLength == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the Link at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <returns></returns>
+        //public static int FindIntersectingLink(TextMeshPro text, Vector3 position, Camera camera)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    for (int i = 0; i < text.textInfo.linkCount; i++)
+        //    {
+        //        TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < linkInfo.linkTextLength; j++)
+        //        {
+        //            int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            // Check if Link characters are on the current page
+        //            if (text.OverflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) continue;
+
+        //            if (isBeginRegion == false)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (linkInfo.linkTextLength == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return -1;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TMP_Text component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        public static int FindNearestLink(TMP_Text text, Vector3 position, Camera camera)
+        {
+            RectTransform rectTransform = text.rectTransform;
+
+            // Convert position into Worldspace coordinates
+            ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+            float distanceSqr = Mathf.Infinity;
+            int closest = 0;
+
+            for (int i = 0; i < text.textInfo.linkCount; i++)
+            {
+                TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+                bool isBeginRegion = false;
+
+                Vector3 bl = Vector3.zero;
+                Vector3 tl = Vector3.zero;
+                Vector3 br = Vector3.zero;
+                Vector3 tr = Vector3.zero;
+
+                // Iterate through each character of the link
+                for (int j = 0; j < linkInfo.linkTextLength; j++)
+                {
+                    int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+                    TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+                    int currentLine = currentCharInfo.lineNumber;
+
+                    // Check if Link characters are on the current page
+                    if (text.overflowMode == TextOverflowModes.Page && currentCharInfo.pageNumber + 1 != text.pageToDisplay) continue;
+
+                    if (isBeginRegion == false)
+                    {
+                        isBeginRegion = true;
+
+                        //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+                        bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+                        tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+                        // If Link is one character
+                        if (linkInfo.linkTextLength == 1)
+                        {
+                            isBeginRegion = false;
+
+                            br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                            tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                            // Check for Intersection
+                            if (PointIntersectRectangle(position, bl, tl, tr, br))
+                                return i;
+
+                            // Find the closest line segment to position.
+                            float dbl = DistanceToLine(bl, tl, position); 
+                            float dtl = DistanceToLine(tl, tr, position); 
+                            float dtr = DistanceToLine(tr, br, position); 
+                            float dbr = DistanceToLine(br, bl, position);
+
+                            float d = dbl < dtl ? dbl : dtl;
+                            d = d < dtr ? d : dtr;
+                            d = d < dbr ? d : dbr;
+
+                            if (distanceSqr > d)
+                            {
+                                distanceSqr = d;
+                                closest = i;
+                            }
+
+                        }
+                    }
+
+                    // Last Character of Word
+                    if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        // Find the closest line segment to position.
+                        float dbl = DistanceToLine(bl, tl, position);
+                        float dtl = DistanceToLine(tl, tr, position);
+                        float dtr = DistanceToLine(tr, br, position);
+                        float dbr = DistanceToLine(br, bl, position);
+
+                        float d = dbl < dtl ? dbl : dtl;
+                        d = d < dtr ? d : dtr;
+                        d = d < dbr ? d : dbr;
+
+                        if (distanceSqr > d)
+                        {
+                            distanceSqr = d;
+                            closest = i;
+                        }
+
+                    }
+                    // If Link is split on more than one line.
+                    else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+                    {
+                        isBeginRegion = false;
+
+                        br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+                        tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+                        // Check for Intersection
+                        if (PointIntersectRectangle(position, bl, tl, tr, br))
+                            return i;
+
+                        // Find the closest line segment to position.
+                        float dbl = DistanceToLine(bl, tl, position);
+                        float dtl = DistanceToLine(tl, tr, position);
+                        float dtr = DistanceToLine(tr, br, position);
+                        float dbr = DistanceToLine(br, bl, position);
+
+                        float d = dbl < dtl ? dbl : dtl;
+                        d = d < dtr ? d : dtr;
+                        d = d < dbr ? d : dbr;
+
+                        if (distanceSqr > d)
+                        {
+                            distanceSqr = d;
+                            closest = i;
+                        }
+                    }
+                }
+
+                //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+            }
+
+            return closest;
+        }
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro UGUI component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The scene camera which may be assigned to a Canvas using ScreenSpace Camera or WorldSpace render mode. Set to null is using ScreenSpace Overlay.</param>
+        /// <returns></returns>
+        //public static int FindNearestLink(TextMeshProUGUI text, Vector3 position, Camera camera)
+        //{
+        //    RectTransform rectTransform = text.rectTransform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(rectTransform, position, camera, out position);
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    for (int i = 0; i < text.textInfo.linkCount; i++)
+        //    {
+        //        TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < linkInfo.linkTextLength; j++)
+        //        {
+        //            int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            if (isBeginRegion == false)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = rectTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (linkInfo.linkTextLength == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = rectTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        // Find the closest line segment to position.
+        //        float dbl = DistanceToLine(bl, tl, position); // (position - bl).sqrMagnitude;
+        //        float dtl = DistanceToLine(tl, tr, position); // (position - tl).sqrMagnitude;
+        //        float dtr = DistanceToLine(tr, br, position); // (position - tr).sqrMagnitude;
+        //        float dbr = DistanceToLine(br, bl, position); // (position - br).sqrMagnitude;
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+
+        //    return closest;
+        //}
+
+
+        /// <summary>
+        /// Function returning the index of the word at the given position (if any).
+        /// </summary>
+        /// <param name="text">A reference to the TextMeshPro component.</param>
+        /// <param name="position">Position to check for intersection.</param>
+        /// <param name="camera">The camera which is rendering the text object.</param>
+        /// <returns></returns>
+        //public static int FindNearestLink(TextMeshPro text, Vector3 position, Camera camera)
+        //{
+        //    Transform textTransform = text.transform;
+
+        //    // Convert position into Worldspace coordinates
+        //    ScreenPointToWorldPointInRectangle(textTransform, position, camera, out position);
+
+        //    float distanceSqr = Mathf.Infinity;
+        //    int closest = 0;
+
+        //    for (int i = 0; i < text.textInfo.linkCount; i++)
+        //    {
+        //        TMP_LinkInfo linkInfo = text.textInfo.linkInfo[i];
+
+        //        bool isBeginRegion = false;
+
+        //        Vector3 bl = Vector3.zero;
+        //        Vector3 tl = Vector3.zero;
+        //        Vector3 br = Vector3.zero;
+        //        Vector3 tr = Vector3.zero;
+
+        //        // Iterate through each character of the word
+        //        for (int j = 0; j < linkInfo.linkTextLength; j++)
+        //        {
+        //            int characterIndex = linkInfo.linkTextfirstCharacterIndex + j;
+        //            TMP_CharacterInfo currentCharInfo = text.textInfo.characterInfo[characterIndex];
+        //            int currentLine = currentCharInfo.lineNumber;
+
+        //            if (isBeginRegion == false)
+        //            {
+        //                isBeginRegion = true;
+
+        //                bl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.descender, 0));
+        //                tl = textTransform.TransformPoint(new Vector3(currentCharInfo.bottomLeft.x, currentCharInfo.ascender, 0));
+
+        //                //Debug.Log("Start Word Region at [" + currentCharInfo.character + "]");
+
+        //                // If Word is one character
+        //                if (linkInfo.linkTextLength == 1)
+        //                {
+        //                    isBeginRegion = false;
+
+        //                    br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                    tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                    // Check for Intersection
+        //                    if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                        return i;
+
+        //                    //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //                }
+        //            }
+
+        //            // Last Character of Word
+        //            if (isBeginRegion && j == linkInfo.linkTextLength - 1)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //            // If Word is split on more than one line.
+        //            else if (isBeginRegion && currentLine != text.textInfo.characterInfo[characterIndex + 1].lineNumber)
+        //            {
+        //                isBeginRegion = false;
+
+        //                br = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.descender, 0));
+        //                tr = textTransform.TransformPoint(new Vector3(currentCharInfo.topRight.x, currentCharInfo.ascender, 0));
+
+        //                // Check for Intersection
+        //                if (PointIntersectRectangle(position, bl, tl, tr, br))
+        //                    return i;
+
+        //                //Debug.Log("End Word Region at [" + currentCharInfo.character + "]");
+        //            }
+        //        }
+
+        //        // Find the closest line segment to position.
+        //        float dbl = DistanceToLine(bl, tl, position);
+        //        float dtl = DistanceToLine(tl, tr, position);
+        //        float dtr = DistanceToLine(tr, br, position);
+        //        float dbr = DistanceToLine(br, bl, position);
+
+        //        float d = dbl < dtl ? dbl : dtl;
+        //        d = d < dtr ? d : dtr;
+        //        d = d < dbr ? d : dbr;
+
+        //        if (distanceSqr > d)
+        //        {
+        //            distanceSqr = d;
+        //            closest = i;
+        //        }
+        //        //Debug.Log("Word at Index: " + i + " is located at (" + bl + ", " + tl + ", " + tr + ", " + br + ").");
+
+        //    }
+        //    return closest;
+        //}
+
+
+    
+        /// <summary>
+        /// Function to check if a Point is contained within a Rectangle.
+        /// </summary>
+        /// <param name="m"></param>
+        /// <param name="a"></param>
+        /// <param name="b"></param>
+        /// <param name="c"></param>
+        /// <param name="d"></param>
+        /// <returns></returns>
+        private static bool PointIntersectRectangle(Vector3 m, Vector3 a, Vector3 b, Vector3 c, Vector3 d)
+        {
+            Vector3 ab = b - a;
+            Vector3 am = m - a;
+            Vector3 bc = c - b;
+            Vector3 bm = m - b;
+
+            float abamDot = Vector3.Dot(ab, am);
+            float bcbmDot = Vector3.Dot(bc, bm);
+
+            return 0 <= abamDot && abamDot <= Vector3.Dot(ab, ab) && 0 <= bcbmDot && bcbmDot <= Vector3.Dot(bc, bc);
+        }
+
+
+        /// <summary>
+        /// Method to convert ScreenPoint to WorldPoint aligned with Rectangle
+        /// </summary>
+        /// <param name="transform"></param>
+        /// <param name="screenPoint"></param>
+        /// <param name="cam"></param>
+        /// <param name="worldPoint"></param>
+        /// <returns></returns>
+        public static bool ScreenPointToWorldPointInRectangle(Transform transform, Vector2 screenPoint, Camera cam, out Vector3 worldPoint)
+        {
+            worldPoint = (Vector3)Vector2.zero;
+            Ray ray = RectTransformUtility.ScreenPointToRay(cam, screenPoint);
+            float enter;
+
+            if (!new Plane(transform.rotation * Vector3.back, transform.position).Raycast(ray, out enter))
+                return false;
+
+            worldPoint = ray.GetPoint(enter);
+
+            return true;
+        }
+
+
+        private struct LineSegment
+        {
+            public Vector3 Point1;
+            public Vector3 Point2;
+
+            public LineSegment(Vector3 p1, Vector3 p2)
+            {
+                Point1 = p1;
+                Point2 = p2;
+            }
+        }
+
+
+        /// <summary>
+        /// Function returning the point of intersection between a line and a plane.
+        /// </summary>
+        /// <param name="line"></param>
+        /// <param name="point"></param>
+        /// <param name="normal"></param>
+        /// <param name="intersectingPoint"></param>
+        /// <returns></returns>
+        private static bool IntersectLinePlane(LineSegment line, Vector3 point, Vector3 normal, out Vector3 intersectingPoint)
+        {
+            intersectingPoint = Vector3.zero;
+            Vector3 u = line.Point2 - line.Point1;
+            Vector3 w = line.Point1 - point;
+
+            float D = Vector3.Dot(normal, u);
+            float N = -Vector3.Dot(normal, w);
+
+            if (Mathf.Abs(D) < Mathf.Epsilon)   // if line is parallel & co-planar to plane
+            {
+                if (N == 0)
+                    return true;
+                else
+                    return false;
+            }
+
+            float sI = N / D;
+
+            if (sI < 0 || sI > 1) // Line parallel to plane
+                return false;
+
+            intersectingPoint = line.Point1 + sI * u;
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Function returning the Square Distance from a Point to a Line.
+        /// </summary>
+        /// <param name="a"></param>
+        /// <param name="b"></param>
+        /// <param name="point"></param>
+        /// <returns></returns>
+        public static float DistanceToLine(Vector3 a, Vector3 b, Vector3 point)
+        {            
+            Vector3 n = b - a;
+            Vector3 pa = a - point;
+ 
+            float c = Vector3.Dot( n, pa );
+ 
+            // Closest point is a
+            if ( c > 0.0f )
+                return Vector3.Dot( pa, pa );
+ 
+            Vector3 bp = point - b;
+ 
+            // Closest point is b
+            if (Vector3.Dot( n, bp ) > 0.0f )
+                return Vector3.Dot( bp, bp );
+ 
+            // Closest point is between a and b
+            Vector3 e = pa - n * (c / Vector3.Dot( n, n ));
+ 
+            return Vector3.Dot( e, e );
+        }
+
+
+        /// <summary>
+        /// Function returning the Square Distance from a Point to a Line and Direction.
+        /// </summary>
+        /// <param name="a"></param>
+        /// <param name="b"></param>
+        /// <param name="point"></param>
+        /// <param name="direction">-1 left, 0 in between, 1 right</param>
+        /// <returns></returns>
+        //public static float DistanceToLineDirectional(Vector3 a, Vector3 b, Vector3 point, ref int direction)
+        //{
+        //    Vector3 n = b - a;
+        //    Vector3 pa = a - point;
+
+        //    float c = Vector3.Dot(n, pa);
+        //    direction = -1;
+
+        //    // Closest point is a
+        //    if (c > 0.0f)
+        //        return Vector3.Dot(pa, pa);
+
+        //    Vector3 bp = point - b;
+        //    direction = 1;
+
+        //    // Closest point is b
+        //    if (Vector3.Dot(n, bp) > 0.0f)
+        //        return Vector3.Dot(bp, bp);
+
+        //    // Closest point is between a and b
+        //    Vector3 e = pa - n * (c / Vector3.Dot(n, n));
+
+        //    direction = 0;
+        //    return Vector3.Dot(e, e);
+        //}
+
+
+        /// <summary>
+        /// Table used to convert character to lowercase.
+        /// </summary>
+        const string k_lookupStringL = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[-]^_`abcdefghijklmnopqrstuvwxyz{|}~-";
+
+        /// <summary>
+        /// Table used to convert character to uppercase.
+        /// </summary>
+        const string k_lookupStringU = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[-]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~-";
+
+
+        /// <summary>
+        /// Get lowercase version of this ASCII character.
+        /// </summary>
+        public static char ToLowerFast(char c)
+        {
+            if (c > k_lookupStringL.Length - 1)
+                return c;
+
+            return k_lookupStringL[c];
+        }
+
+        /// <summary>
+        /// Get uppercase version of this ASCII character.
+        /// </summary>
+        public static char ToUpperFast(char c)
+        {
+            if (c > k_lookupStringU.Length - 1)
+                return c;
+
+            return k_lookupStringU[c];
+        }
+
+        /// <summary>
+        /// Function which returns a simple hashcode from a string.
+        /// </summary>
+        /// <returns></returns>
+        public static int GetSimpleHashCode(string s)
+        {
+            int hashCode = 0; // 5381;
+
+            for (int i = 0; i < s.Length; i++)
+                hashCode = (hashCode << 5) + hashCode ^ s[i];
+
+            return hashCode;
+        }
+
+        /// <summary>
+        /// Function which returns a simple hashcode from a string converted to lowercase.
+        /// </summary>
+        /// <returns></returns>
+        public static uint GetSimpleHashCodeLowercase(string s)
+        {
+            uint hashCode = 5381;
+
+            for (int i = 0; i < s.Length; i++)
+                hashCode = (hashCode << 5) + hashCode ^ ToLowerFast(s[i]);
+
+            return hashCode;
+        }
+
+
+        /// <summary>
+        /// Function to convert Hex to Int
+        /// </summary>
+        /// <param name="hex"></param>
+        /// <returns></returns>
+        public static int HexToInt(char hex)
+        {
+            switch (hex)
+            {
+                case '0': return 0;
+                case '1': return 1;
+                case '2': return 2;
+                case '3': return 3;
+                case '4': return 4;
+                case '5': return 5;
+                case '6': return 6;
+                case '7': return 7;
+                case '8': return 8;
+                case '9': return 9;
+                case 'A': return 10;
+                case 'B': return 11;
+                case 'C': return 12;
+                case 'D': return 13;
+                case 'E': return 14;
+                case 'F': return 15;
+                case 'a': return 10;
+                case 'b': return 11;
+                case 'c': return 12;
+                case 'd': return 13;
+                case 'e': return 14;
+                case 'f': return 15;
+            }
+            return 15;
+        }
+
+
+        /// <summary>
+        /// Function to convert a properly formatted string which contains an hex value to its decimal value. 
+        /// </summary>
+        /// <param name="s"></param>
+        /// <returns></returns>
+        public static int StringHexToInt(string s)
+        {
+            int value = 0;
+
+            for (int i = 0; i < s.Length; i++)
+            {
+                value += HexToInt(s[i]) * (int)Mathf.Pow(16, (s.Length - 1) - i);
+            }
+
+            return value;
+        }
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9597769ea6b7fb2be95d758ad1a1f5c53d3b94ed
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_TextUtilities.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4f0ca6874aa74540bb3d4fe5a0f86bcc
+timeCreated: 1432117579
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..4f07cf1ad68d04cd8af41f5e52d8f830af03f633
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs
@@ -0,0 +1,238 @@
+using UnityEngine;
+using UnityEngine.UI;
+using System.Collections.Generic;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.Rendering;
+#elif UNITY_2018_1_OR_NEWER
+using UnityEngine.Experimental.Rendering;
+#endif
+
+
+namespace TMPro
+{
+
+    public class TMP_UpdateManager
+    {
+        private static TMP_UpdateManager s_Instance;
+
+        private readonly List<TMP_Text> m_LayoutRebuildQueue = new List<TMP_Text>();
+        private Dictionary<int, int> m_LayoutQueueLookup = new Dictionary<int, int>();
+
+        private readonly List<TMP_Text> m_GraphicRebuildQueue = new List<TMP_Text>();
+        private Dictionary<int, int> m_GraphicQueueLookup = new Dictionary<int, int>();
+
+        private readonly List<TMP_Text> m_InternalUpdateQueue = new List<TMP_Text>();
+        private Dictionary<int, int> m_InternalUpdateLookup = new Dictionary<int, int>();
+
+        //private bool m_PerformingGraphicRebuild;
+        //private bool m_PerformingLayoutRebuild;
+
+        /// <summary>
+        /// Get a singleton instance of the registry
+        /// </summary>
+        public static TMP_UpdateManager instance
+        {
+            get
+            {
+                if (TMP_UpdateManager.s_Instance == null)
+                    TMP_UpdateManager.s_Instance = new TMP_UpdateManager();
+                return TMP_UpdateManager.s_Instance;
+            }
+        }
+
+
+        /// <summary>
+        /// Register to receive rendering callbacks.
+        /// </summary>
+        protected TMP_UpdateManager()
+        {
+            Camera.onPreCull += OnCameraPreCull;
+
+            #if UNITY_2019_1_OR_NEWER
+                RenderPipelineManager.beginFrameRendering += OnBeginFrameRendering;
+            #elif UNITY_2018_1_OR_NEWER
+                RenderPipeline.beginFrameRendering += OnBeginFrameRendering;
+            #endif
+        }
+
+        
+        /// <summary>
+        /// Function used as a replacement for LateUpdate() to handle SDF Scale updates and Legacy Animation updates.
+        /// </summary>
+        /// <param name="textObject"></param>
+        internal static void RegisterTextObjectForUpdate(TMP_Text textObject)
+        {
+            TMP_UpdateManager.instance.InternalRegisterTextObjectForUpdate(textObject);
+        }
+
+        private void InternalRegisterTextObjectForUpdate(TMP_Text textObject)
+        {
+            int id = textObject.GetInstanceID();
+
+            if (this.m_InternalUpdateLookup.ContainsKey(id))
+                return;
+
+            m_InternalUpdateLookup[id] = id;
+            this.m_InternalUpdateQueue.Add(textObject);
+
+            return;
+        }
+
+
+        /// <summary>
+        /// Function to register elements which require a layout rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void RegisterTextElementForLayoutRebuild(TMP_Text element)
+        {
+            TMP_UpdateManager.instance.InternalRegisterTextElementForLayoutRebuild(element);
+        }
+
+        private bool InternalRegisterTextElementForLayoutRebuild(TMP_Text element)
+        {
+            int id = element.GetInstanceID();
+
+            if (this.m_LayoutQueueLookup.ContainsKey(id))
+                return false;
+
+            m_LayoutQueueLookup[id] = id;
+            this.m_LayoutRebuildQueue.Add(element);
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Function to register elements which require a layout rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void RegisterTextElementForGraphicRebuild(TMP_Text element)
+        {
+            TMP_UpdateManager.instance.InternalRegisterTextElementForGraphicRebuild(element);
+        }
+
+        private bool InternalRegisterTextElementForGraphicRebuild(TMP_Text element)
+        {
+            int id = element.GetInstanceID();
+
+            if (this.m_GraphicQueueLookup.ContainsKey(id))
+                return false;
+
+            m_GraphicQueueLookup[id] = id;
+            this.m_GraphicRebuildQueue.Add(element);
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Callback which occurs just before the Scriptable Render Pipeline (SRP) begins rendering.
+        /// </summary>
+        /// <param name="cameras"></param>
+        #if UNITY_2019_1_OR_NEWER
+        void OnBeginFrameRendering(ScriptableRenderContext renderContext, Camera[] cameras)
+        #elif UNITY_2018_1_OR_NEWER
+        void OnBeginFrameRendering(Camera[] cameras)
+        #endif
+        {
+            // Exclude the PreRenderCamera
+            #if UNITY_EDITOR
+            if (cameras.Length == 1 && cameras[0].cameraType == CameraType.Preview) 
+                return;
+            #endif
+            DoRebuilds();
+        }
+
+        /// <summary>
+        /// Callback which occurs just before the cam is rendered.
+        /// </summary>
+        /// <param name="cam"></param>
+        void OnCameraPreCull(Camera cam)
+        {
+            // Exclude the PreRenderCamera
+            #if UNITY_EDITOR
+            if (cam.cameraType == CameraType.Preview) 
+                return;
+            #endif
+            DoRebuilds();
+        }
+        
+        /// <summary>
+        /// Process the rebuild requests in the rebuild queues.
+        /// </summary>
+        void DoRebuilds()
+        {
+            // Handle text objects the require an update either as a result of scale changes or legacy animation.
+            for (int i = 0; i < m_InternalUpdateQueue.Count; i++)
+            {
+                m_InternalUpdateQueue[i].InternalUpdate();
+            }
+
+            // Handle Layout Rebuild Phase
+            for (int i = 0; i < m_LayoutRebuildQueue.Count; i++)
+            {
+                m_LayoutRebuildQueue[i].Rebuild(CanvasUpdate.Prelayout);
+            }
+
+            if (m_LayoutRebuildQueue.Count > 0)
+            {
+                m_LayoutRebuildQueue.Clear();
+                m_LayoutQueueLookup.Clear();
+            }
+
+            // Handle Graphic Rebuild Phase
+            for (int i = 0; i < m_GraphicRebuildQueue.Count; i++)
+            {
+                m_GraphicRebuildQueue[i].Rebuild(CanvasUpdate.PreRender);
+            }
+
+            // If there are no objects in the queue, we don't need to clear the lists again.
+            if (m_GraphicRebuildQueue.Count > 0)
+            {
+                m_GraphicRebuildQueue.Clear();
+                m_GraphicQueueLookup.Clear();
+            }
+        }
+
+        internal static void UnRegisterTextObjectForUpdate(TMP_Text textObject)
+        {
+            TMP_UpdateManager.instance.InternalUnRegisterTextObjectForUpdate(textObject);
+        }
+
+        /// <summary>
+        /// Function to unregister elements which no longer require a rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void UnRegisterTextElementForRebuild(TMP_Text element)
+        {
+            TMP_UpdateManager.instance.InternalUnRegisterTextElementForGraphicRebuild(element);
+            TMP_UpdateManager.instance.InternalUnRegisterTextElementForLayoutRebuild(element);
+            TMP_UpdateManager.instance.InternalUnRegisterTextObjectForUpdate(element);
+        }
+
+        private void InternalUnRegisterTextElementForGraphicRebuild(TMP_Text element)
+        {
+            int id = element.GetInstanceID();
+
+            TMP_UpdateManager.instance.m_GraphicRebuildQueue.Remove(element);
+            m_GraphicQueueLookup.Remove(id);
+        }
+
+        private void InternalUnRegisterTextElementForLayoutRebuild(TMP_Text element)
+        {
+            int id = element.GetInstanceID();
+
+            TMP_UpdateManager.instance.m_LayoutRebuildQueue.Remove(element);
+            m_LayoutQueueLookup.Remove(id);
+        }
+
+        private void InternalUnRegisterTextObjectForUpdate(TMP_Text textObject)
+        {
+            int id = textObject.GetInstanceID();
+
+            TMP_UpdateManager.instance.m_InternalUpdateQueue.Remove(textObject);
+            m_InternalUpdateLookup.Remove(id);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..cea83cdd5729458ba069dac496f3d7d72eeb0beb
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 691db8cb70c4426a8ae718465c21345f
+timeCreated: 1447406424
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs
new file mode 100644
index 0000000000000000000000000000000000000000..12a85278921e39f1c9f57a739631b8f5cb5bc18c
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs
@@ -0,0 +1,178 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.UI.Collections;
+using System.Collections;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Class for handling and scheduling text object updates.
+    /// </summary>
+    public class TMP_UpdateRegistry
+    {
+        private static TMP_UpdateRegistry s_Instance;
+
+        private readonly List<ICanvasElement> m_LayoutRebuildQueue = new List<ICanvasElement>();
+        private Dictionary<int, int> m_LayoutQueueLookup = new Dictionary<int, int>();
+
+        private readonly List<ICanvasElement> m_GraphicRebuildQueue = new List<ICanvasElement>();
+        private Dictionary<int, int> m_GraphicQueueLookup = new Dictionary<int, int>();
+
+        //private bool m_PerformingLayoutUpdate;
+        //private bool m_PerformingGraphicUpdate;
+
+        /// <summary>
+        /// Get a singleton instance of the registry
+        /// </summary>
+        public static TMP_UpdateRegistry instance
+        {
+            get
+            {
+                if (TMP_UpdateRegistry.s_Instance == null)
+                    TMP_UpdateRegistry.s_Instance = new TMP_UpdateRegistry();
+                return TMP_UpdateRegistry.s_Instance;
+            }
+        }
+
+
+        /// <summary>
+        /// Register to receive callback from the Canvas System.
+        /// </summary>
+        protected TMP_UpdateRegistry()
+        {
+            //Debug.Log("Adding WillRenderCanvases");
+            Canvas.willRenderCanvases += PerformUpdateForCanvasRendererObjects;
+        }
+
+
+        /// <summary>
+        /// Function to register elements which require a layout rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void RegisterCanvasElementForLayoutRebuild(ICanvasElement element)
+        {
+            TMP_UpdateRegistry.instance.InternalRegisterCanvasElementForLayoutRebuild(element);
+        }
+
+        private bool InternalRegisterCanvasElementForLayoutRebuild(ICanvasElement element)
+        {
+            int id = (element as Object).GetInstanceID();
+
+            if (this.m_LayoutQueueLookup.ContainsKey(id))
+                return false;
+
+            m_LayoutQueueLookup[id] = id;
+            this.m_LayoutRebuildQueue.Add(element);
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Function to register elements which require a graphic rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void RegisterCanvasElementForGraphicRebuild(ICanvasElement element)
+        {
+            TMP_UpdateRegistry.instance.InternalRegisterCanvasElementForGraphicRebuild(element);
+        }
+
+        private bool InternalRegisterCanvasElementForGraphicRebuild(ICanvasElement element)
+        {
+            int id = (element as Object).GetInstanceID();
+
+            if (this.m_GraphicQueueLookup.ContainsKey(id))
+                return false;
+
+            m_GraphicQueueLookup[id] = id;
+            this.m_GraphicRebuildQueue.Add(element);
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Method to handle objects that need updating.
+        /// </summary>
+        private void PerformUpdateForCanvasRendererObjects()
+        {
+            //Debug.Log("Performing update of CanvasRenderer objects at Frame: " + Time.frameCount);
+
+            // Processing elements that require a layout rebuild.
+            //this.m_PerformingLayoutUpdate = true;
+            for (int index = 0; index < m_LayoutRebuildQueue.Count; index++)
+            {
+                ICanvasElement element = TMP_UpdateRegistry.instance.m_LayoutRebuildQueue[index];
+
+                element.Rebuild(CanvasUpdate.Prelayout);
+            }
+
+            if (m_LayoutRebuildQueue.Count > 0)
+            {
+                m_LayoutRebuildQueue.Clear();
+                m_LayoutQueueLookup.Clear();
+            }
+
+            // Update font assets before graphic rebuild
+
+
+            // Processing elements that require a graphic rebuild.
+            for (int index = 0; index < m_GraphicRebuildQueue.Count; index++)
+            {
+                ICanvasElement element = TMP_UpdateRegistry.instance.m_GraphicRebuildQueue[index];
+
+                element.Rebuild(CanvasUpdate.PreRender);
+            }
+
+            // If there are no objects in the queue, we don't need to clear the lists again.
+            if (m_GraphicRebuildQueue.Count > 0)
+            {
+                m_GraphicRebuildQueue.Clear();
+                m_GraphicQueueLookup.Clear();
+            }
+        }
+
+
+        /// <summary>
+        /// Method to handle objects that need updating.
+        /// </summary>
+        private void PerformUpdateForMeshRendererObjects()
+        {
+            Debug.Log("Perform update of MeshRenderer objects.");
+            
+        }
+
+
+        /// <summary>
+        /// Function to unregister elements which no longer require a rebuild.
+        /// </summary>
+        /// <param name="element"></param>
+        public static void UnRegisterCanvasElementForRebuild(ICanvasElement element)
+        {
+            TMP_UpdateRegistry.instance.InternalUnRegisterCanvasElementForLayoutRebuild(element);
+            TMP_UpdateRegistry.instance.InternalUnRegisterCanvasElementForGraphicRebuild(element);
+        }
+
+
+        private void InternalUnRegisterCanvasElementForLayoutRebuild(ICanvasElement element)
+        {
+            int id = (element as Object).GetInstanceID();
+
+            //element.LayoutComplete();
+            TMP_UpdateRegistry.instance.m_LayoutRebuildQueue.Remove(element);
+            m_GraphicQueueLookup.Remove(id);
+        }
+
+
+        private void InternalUnRegisterCanvasElementForGraphicRebuild(ICanvasElement element)
+        {
+            int id = (element as Object).GetInstanceID();
+
+            //element.GraphicUpdateComplete();
+            TMP_UpdateRegistry.instance.m_GraphicRebuildQueue.Remove(element);
+            m_LayoutQueueLookup.Remove(id);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e6427875301b76f2b9778c78bdea2c129a051b97
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMP_UpdateRegistery.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: a55fb7b4961a425381d1282fc424f966
+timeCreated: 1446775434
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f460f325d126e15f6affae043335564316d01810
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs
@@ -0,0 +1,150 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+
+namespace TMPro
+{
+    public enum Compute_DistanceTransform_EventTypes { Processing, Completed };
+
+
+    public static class TMPro_EventManager
+    {
+        public static readonly FastAction<object, Compute_DT_EventArgs> COMPUTE_DT_EVENT = new FastAction<object, Compute_DT_EventArgs>();
+
+        // Event & Delegate used to notify TextMesh Pro objects that Material properties have been changed.
+        public static readonly FastAction<bool, Material> MATERIAL_PROPERTY_EVENT = new FastAction<bool, Material>();
+
+        public static readonly FastAction<bool, TMP_FontAsset> FONT_PROPERTY_EVENT = new FastAction<bool, TMP_FontAsset>();
+
+        public static readonly FastAction<bool, Object> SPRITE_ASSET_PROPERTY_EVENT = new FastAction<bool, Object>();
+
+        public static readonly FastAction<bool, TextMeshPro> TEXTMESHPRO_PROPERTY_EVENT = new FastAction<bool, TextMeshPro>();
+
+        public static readonly FastAction<GameObject, Material, Material> DRAG_AND_DROP_MATERIAL_EVENT = new FastAction<GameObject, Material, Material>();
+
+        public static readonly FastAction<bool> TEXT_STYLE_PROPERTY_EVENT = new FastAction<bool>();
+
+        public static readonly FastAction<TMP_ColorGradient> COLOR_GRADIENT_PROPERTY_EVENT = new FastAction<TMP_ColorGradient>();
+
+        public static readonly FastAction TMP_SETTINGS_PROPERTY_EVENT = new FastAction();
+
+        public static readonly FastAction RESOURCE_LOAD_EVENT = new FastAction();
+
+        public static readonly FastAction<bool, TextMeshProUGUI> TEXTMESHPRO_UGUI_PROPERTY_EVENT = new FastAction<bool, TextMeshProUGUI>();
+
+        public static readonly FastAction OnPreRenderObject_Event = new FastAction();
+
+        public static readonly FastAction<Object> TEXT_CHANGED_EVENT = new FastAction<Object>();
+
+        //public static readonly FastAction WILL_RENDER_CANVASES = new FastAction();
+
+
+
+        //static TMPro_EventManager()
+        //{
+        //    // Register to the willRenderCanvases callback once
+        //    // then the WILL_RENDER_CANVASES FastAction will handle the rest
+        //    Canvas.willRenderCanvases += WILL_RENDER_CANVASES.Call;
+        //}
+
+        public static void ON_PRE_RENDER_OBJECT_CHANGED()
+        {
+            OnPreRenderObject_Event.Call();
+        }
+
+        public static void ON_MATERIAL_PROPERTY_CHANGED(bool isChanged, Material mat)
+        {
+            MATERIAL_PROPERTY_EVENT.Call(isChanged, mat);
+        }
+
+        public static void ON_FONT_PROPERTY_CHANGED(bool isChanged, TMP_FontAsset font)
+        {
+            FONT_PROPERTY_EVENT.Call(isChanged, font);
+        }
+
+        public static void ON_SPRITE_ASSET_PROPERTY_CHANGED(bool isChanged, Object obj)
+        {
+            SPRITE_ASSET_PROPERTY_EVENT.Call(isChanged, obj);
+        }
+
+        public static void ON_TEXTMESHPRO_PROPERTY_CHANGED(bool isChanged, TextMeshPro obj)
+        {
+            TEXTMESHPRO_PROPERTY_EVENT.Call(isChanged, obj);
+        }
+
+        public static void ON_DRAG_AND_DROP_MATERIAL_CHANGED(GameObject sender, Material currentMaterial, Material newMaterial)
+        {
+            DRAG_AND_DROP_MATERIAL_EVENT.Call(sender, currentMaterial, newMaterial);
+        }
+
+        public static void ON_TEXT_STYLE_PROPERTY_CHANGED(bool isChanged)
+        {
+            TEXT_STYLE_PROPERTY_EVENT.Call(isChanged);
+        }
+
+        public static void ON_COLOR_GRAIDENT_PROPERTY_CHANGED(TMP_ColorGradient gradient)
+        {
+            COLOR_GRADIENT_PROPERTY_EVENT.Call(gradient);
+        }
+
+
+        public static void ON_TEXT_CHANGED(Object obj)
+        {
+            TEXT_CHANGED_EVENT.Call(obj);
+        }
+
+        public static void ON_TMP_SETTINGS_CHANGED()
+        {
+            TMP_SETTINGS_PROPERTY_EVENT.Call();
+        }
+
+        public static void ON_RESOURCES_LOADED()
+        {
+            RESOURCE_LOAD_EVENT.Call();
+        }
+
+        public static void ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(bool isChanged, TextMeshProUGUI obj)
+        {
+            TEXTMESHPRO_UGUI_PROPERTY_EVENT.Call(isChanged, obj);
+        }
+
+        //public static void ON_BASE_MATERIAL_CHANGED(Material mat)
+        //{
+        //    BASE_MATERIAL_EVENT.Call(mat);
+        //}
+
+        //public static void ON_PROGRESSBAR_UPDATE(Progress_Bar_EventTypes event_type, Progress_Bar_EventArgs eventArgs)
+        //{
+        //    if (PROGRESS_BAR_EVENT != null)
+        //        PROGRESS_BAR_EVENT(event_type, eventArgs);
+        //}
+
+        public static void ON_COMPUTE_DT_EVENT(object Sender, Compute_DT_EventArgs e)
+        {
+            COMPUTE_DT_EVENT.Call(Sender, e);
+        }
+    }
+
+
+    public class Compute_DT_EventArgs
+    {
+        public Compute_DistanceTransform_EventTypes EventType;
+        public float ProgressPercentage;
+        public Color[] Colors;
+
+
+        public Compute_DT_EventArgs(Compute_DistanceTransform_EventTypes type, float progress)
+        {
+            EventType = type;
+            ProgressPercentage = progress;
+        }
+
+        public Compute_DT_EventArgs(Compute_DistanceTransform_EventTypes type, Color[] colors)
+        {
+            EventType = type;
+            Colors = colors;
+        }
+
+    }
+
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..067ecf0b945b9882e432bf3542416ffd7fc42bf9
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_EventManager.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 96e9072453a441618754c478755b3028
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8dd4b91b3ae2e9a4146137390797d9e75ed5ba18
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs
@@ -0,0 +1,224 @@
+using UnityEngine;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace TMPro
+{
+    public static class TMPro_ExtensionMethods
+    {
+
+        public static string ArrayToString(this char[] chars)
+        {
+            string s = string.Empty;
+
+            for (int i = 0; i < chars.Length && chars[i] != 0; i++)
+            {
+                s += chars[i];
+            }
+
+            return s;
+        }
+
+        public static string IntToString(this int[] unicodes)
+        {
+            char[] chars = new char[unicodes.Length];
+
+            for (int i = 0; i < unicodes.Length; i++)
+            {
+                chars[i] = (char)unicodes[i];
+            }
+
+            return new string(chars);
+        }
+
+        public static string IntToString(this int[] unicodes, int start, int length)
+        {
+            if (start > unicodes.Length)
+                return string.Empty;
+
+            int end = Mathf.Min(start + length, unicodes.Length);
+
+            char[] chars = new char[end - start];
+
+            int writeIndex = 0;
+
+            for (int i = start; i < end; i++)
+            {
+                chars[writeIndex++] = (char)unicodes[i];
+            }
+
+            return new string(chars);
+        }
+
+
+        public static int FindInstanceID <T> (this List<T> list, T target) where T : Object
+        {
+            int targetID = target.GetInstanceID();
+            
+            for (int i = 0; i < list.Count; i++)
+            {
+                if (list[i].GetInstanceID() == targetID)
+                    return i;
+            }
+            return -1;
+        }
+
+
+        public static bool Compare(this Color32 a, Color32 b)
+        {
+            return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;
+        }
+
+		public static bool CompareRGB(this Color32 a, Color32 b)
+		{
+			return a.r == b.r && a.g == b.g && a.b == b.b;
+		}
+
+		public static bool Compare(this Color a, Color b)
+        {
+            return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;
+        }
+
+
+		public static bool CompareRGB(this Color a, Color b)
+		{
+			return a.r == b.r && a.g == b.g && a.b == b.b;
+		}
+
+
+        public static Color32 Multiply (this Color32 c1, Color32 c2)
+        {
+            byte r = (byte)((c1.r / 255f) * (c2.r / 255f) * 255);
+            byte g = (byte)((c1.g / 255f) * (c2.g / 255f) * 255);
+            byte b = (byte)((c1.b / 255f) * (c2.b / 255f) * 255);
+            byte a = (byte)((c1.a / 255f) * (c2.a / 255f) * 255);
+
+            return new Color32(r, g, b, a);
+        }
+
+
+        public static Color32 Tint (this Color32 c1, Color32 c2)
+        {
+            byte r = (byte)((c1.r / 255f) * (c2.r / 255f) * 255);
+            byte g = (byte)((c1.g / 255f) * (c2.g / 255f) * 255);
+            byte b = (byte)((c1.b / 255f) * (c2.b / 255f) * 255);
+            byte a = (byte)((c1.a / 255f) * (c2.a / 255f) * 255);
+
+            return new Color32(r, g, b, a);
+        }
+
+        public static Color32 Tint(this Color32 c1, float tint)
+        {
+            byte r = (byte)(Mathf.Clamp(c1.r / 255f * tint * 255, 0, 255));
+            byte g = (byte)(Mathf.Clamp(c1.g / 255f * tint * 255, 0, 255));
+            byte b = (byte)(Mathf.Clamp(c1.b / 255f * tint * 255, 0, 255));
+            byte a = (byte)(Mathf.Clamp(c1.a / 255f * tint * 255, 0, 255));
+
+            return new Color32(r, g, b, a);
+        }
+
+
+        public static bool Compare(this Vector3 v1, Vector3 v2, int accuracy)
+        {
+            bool x = (int)(v1.x * accuracy) == (int)(v2.x * accuracy);
+            bool y = (int)(v1.y * accuracy) == (int)(v2.y * accuracy);
+            bool z = (int)(v1.z * accuracy) == (int)(v2.z * accuracy);
+
+            return x && y && z;
+        }
+
+        public static bool Compare(this Quaternion q1, Quaternion q2, int accuracy)
+        {
+            bool x = (int)(q1.x * accuracy) == (int)(q2.x * accuracy);
+            bool y = (int)(q1.y * accuracy) == (int)(q2.y * accuracy);
+            bool z = (int)(q1.z * accuracy) == (int)(q2.z * accuracy);
+            bool w = (int)(q1.w * accuracy) == (int)(q2.w * accuracy);
+
+            return x && y && z && w;
+        }
+
+        //public static void AddElementAtIndex<T>(this T[] array, int writeIndex, T item)
+        //{
+        //    if (writeIndex >= array.Length)
+        //        System.Array.Resize(ref array, Mathf.NextPowerOfTwo(writeIndex + 1));
+
+        //    array[writeIndex] = item;
+        //}
+
+        /// <summary>
+        /// Insert item into array at index.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="array"></param>
+        /// <param name="index"></param>
+        /// <param name="item"></param>
+        //public static void Insert<T>(this T[] array, int index, T item)
+        //{
+        //    if (index > array.Length - 1) return;
+
+        //    T savedItem = item;
+
+        //    for (int i = index; i < array.Length; i++)
+        //    {
+        //        savedItem = array[i];
+
+        //        array[i] = item;
+
+        //        item = savedItem;
+        //    }
+        //}
+
+        /// <summary>
+        /// Insert item into array at index.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="array"></param>
+        /// <param name="index"></param>
+        /// <param name="item"></param>
+        //public static void Insert<T>(this T[] array, int index, T[] items)
+        //{
+        //    if (index > array.Length - 1) return;
+
+        //    System.Array.Resize(ref array, array.Length + items.Length);
+
+        //    int sourceIndex = 0;
+
+        //    T savedItem = items[sourceIndex];
+
+        //    for (int i = index; i < array.Length; i++)
+        //    {
+        //        savedItem = array[i];
+
+        //        array[i] = items[sourceIndex];
+
+        //        items[sourceIndex] = savedItem;
+
+        //        if (sourceIndex < items.Length - 1)
+        //            sourceIndex += 1;
+        //        else
+        //            sourceIndex = 0;
+        //    }
+        //}
+
+    }
+
+    public static class TMP_Math
+    {
+        public const float FLOAT_MAX = 32767;
+        public const float FLOAT_MIN = -32767;
+        public const int INT_MAX = 2147483647;
+        public const int INT_MIN = -2147483647;
+
+        public const float FLOAT_UNSET = -32767;
+        public const int INT_UNSET = -32767;
+
+        public static Vector2 MAX_16BIT = new Vector2(FLOAT_MAX, FLOAT_MAX);
+        public static Vector2 MIN_16BIT = new Vector2(FLOAT_MIN, FLOAT_MIN);
+
+        public static bool Approximately(float a, float b)
+        {
+            return (b - 0.0001f) < a && a < (b + 0.0001f);
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..f646b54ad00d496bb76946cf205cefd83804e010
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_ExtensionMethods.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 77476292f9fa4905a787e6417853846b
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e74119393eeec3de2832fd048d66cf204481e712
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs
@@ -0,0 +1,357 @@
+using UnityEngine;
+using UnityEngine.TextCore;
+using System;
+
+
+namespace TMPro
+{
+    /// <summary>
+    /// Flags to control what vertex data is pushed to the mesh and renderer.
+    /// </summary>
+    public enum TMP_VertexDataUpdateFlags
+    {
+        None = 0x0,
+        Vertices = 0x1,
+        Uv0 = 0x2,
+        Uv2 = 0x4,
+        Uv4 = 0x8,
+        Colors32 = 0x10,
+        All = 0xFF
+    };
+
+
+    /// <summary>
+    /// TMP custom data type to represent 32 bit characters.
+    /// </summary>
+    //public struct TMP_Char
+    //{
+    //    private int m_value;
+
+    //    private TMP_Char(int value)
+    //    {
+    //        this.m_value = value;
+    //    }
+
+    //    private TMP_Char(TMP_Char value)
+    //    {
+    //        this.m_value = (int)value;
+    //    }
+
+    //    public static implicit operator TMP_Char(int value)
+    //    {
+    //        return new TMP_Char(value);
+    //    }
+
+    //    public static implicit operator TMP_Char(char c)
+    //    {
+    //        return new TMP_Char(c);
+    //    }
+
+    //    public static explicit operator int(TMP_Char value)
+    //    {
+    //        return value.m_value;
+    //    }
+
+    //    public override string ToString()
+    //    {
+    //        return m_value.ToString();
+    //    }
+    //}
+
+
+    //public struct TMP_VertexInfo
+    //{      
+    //    public TMP_Vertex topLeft;
+    //    public TMP_Vertex bottomLeft;
+    //    public TMP_Vertex topRight;
+    //    public TMP_Vertex bottomRight;
+    //}
+
+
+    [Serializable]
+    public struct VertexGradient
+    {
+        public Color topLeft;
+        public Color topRight;
+        public Color bottomLeft;
+        public Color bottomRight;
+
+        public VertexGradient (Color color)
+        {
+            this.topLeft = color;
+            this.topRight = color;
+            this.bottomLeft = color;
+            this.bottomRight = color;
+        }
+
+        /// <summary>
+        /// The vertex colors at the corners of the characters.
+        /// </summary>
+        /// <param name="color0">Top left color.</param>
+        /// <param name="color1">Top right color.</param>
+        /// <param name="color2">Bottom left color.</param>
+        /// <param name="color3">Bottom right color.</param>
+        public VertexGradient(Color color0, Color color1, Color color2, Color color3)
+        {
+            this.topLeft = color0;
+            this.topRight = color1;
+            this.bottomLeft = color2;
+            this.bottomRight = color3;
+        }
+    }
+
+
+    public struct TMP_PageInfo
+    {
+        public int firstCharacterIndex;
+        public int lastCharacterIndex;
+        public float ascender;
+        public float baseLine;
+        public float descender;
+        // public float extents;
+    }
+
+
+    /// <summary>
+    /// Structure containing information about individual links contained in the text object.
+    /// </summary>
+    public struct TMP_LinkInfo
+    {
+        public TMP_Text textComponent;
+
+        public int hashCode;
+
+        public int linkIdFirstCharacterIndex;
+        public int linkIdLength;
+        public int linkTextfirstCharacterIndex;
+        public int linkTextLength;
+
+        internal char[] linkID;
+
+
+        internal void SetLinkID(char[] text, int startIndex, int length)
+        {
+            if (linkID == null || linkID.Length < length) linkID = new char[length];
+
+            for (int i = 0; i < length; i++)
+                linkID[i] = text[startIndex + i];
+        }
+
+        /// <summary>
+        /// Function which returns the text contained in a link.
+        /// </summary>
+        /// <param name="textInfo"></param>
+        /// <returns></returns>
+        public string GetLinkText()
+        {
+            string text = string.Empty;
+            TMP_TextInfo textInfo = textComponent.textInfo;
+
+            for (int i = linkTextfirstCharacterIndex; i < linkTextfirstCharacterIndex + linkTextLength; i++)
+                text += textInfo.characterInfo[i].character;
+
+            return text;
+        }
+
+
+        /// <summary>
+        /// Function which returns the link ID as a string.
+        /// </summary>
+        /// <param name="text">The source input text.</param>
+        /// <returns></returns>
+        public string GetLinkID()
+        {
+            if (textComponent == null)
+                return string.Empty;
+
+            return new string(linkID, 0, linkIdLength);
+            //return textComponent.text.Substring(linkIdFirstCharacterIndex, linkIdLength);
+
+        }
+    }
+
+
+    /// <summary>
+    /// Structure containing information about the individual words contained in the text object.
+    /// </summary>
+    public struct TMP_WordInfo
+    {
+        // NOTE: Structure could be simplified by only including the firstCharacterIndex and length.
+
+        public TMP_Text textComponent;
+
+        public int firstCharacterIndex;
+        public int lastCharacterIndex;
+        public int characterCount;
+        //public float length;
+
+        /// <summary>
+        /// Returns the word as a string.
+        /// </summary>
+        /// <returns></returns>
+        public string GetWord()
+        {
+            string word = string.Empty;
+            TMP_CharacterInfo[] charInfo = textComponent.textInfo.characterInfo;
+            
+            for (int i = firstCharacterIndex; i < lastCharacterIndex + 1; i++)
+            {
+                word += charInfo[i].character;
+            }
+
+            return word;
+        }
+    }
+
+
+    public struct TMP_SpriteInfo
+    {
+        public int spriteIndex; // Index of the sprite in the sprite atlas.
+        public int characterIndex; // The characterInfo index which holds the key information about this sprite.
+        public int vertexIndex;
+    }
+
+
+    //public struct SpriteInfo
+    //{
+    //    
+    //}
+
+
+    public struct Extents
+    {
+        public Vector2 min;
+        public Vector2 max;
+
+        public Extents(Vector2 min, Vector2 max)
+        {
+            this.min = min;
+            this.max = max;
+        }
+
+        public override string ToString()
+        {
+            string s = "Min (" + min.x.ToString("f2") + ", " + min.y.ToString("f2") + ")   Max (" + max.x.ToString("f2") + ", " + max.y.ToString("f2") + ")";           
+            return s;
+        }
+    }
+
+
+    [Serializable]
+    public struct Mesh_Extents
+    {
+        public Vector2 min;
+        public Vector2 max;
+      
+     
+        public Mesh_Extents(Vector2 min, Vector2 max)
+        {
+            this.min = min;
+            this.max = max;
+        }
+
+        public override string ToString()
+        {
+            string s = "Min (" + min.x.ToString("f2") + ", " + min.y.ToString("f2") + ")   Max (" + max.x.ToString("f2") + ", " + max.y.ToString("f2") + ")";
+            //string s = "Center: (" + ")" + "  Extents: (" + ((max.x - min.x) / 2).ToString("f2") + "," + ((max.y - min.y) / 2).ToString("f2") + ").";
+            return s;
+        }
+    }
+
+
+    // Structure used for Word Wrapping which tracks the state of execution when the last space or carriage return character was encountered. 
+    public struct WordWrapState
+    {
+        public int previous_WordBreak;
+        public int total_CharacterCount;
+        public int visible_CharacterCount;
+        public int visible_SpriteCount;
+        public int visible_LinkCount;
+        public int firstCharacterIndex;
+        public int firstVisibleCharacterIndex;
+        public int lastCharacterIndex;
+        public int lastVisibleCharIndex;
+        public int lineNumber;
+
+        public float maxCapHeight;
+        public float maxAscender;
+        public float maxDescender;
+        public float maxLineAscender;
+        public float maxLineDescender;
+        public float previousLineAscender;
+
+        public float xAdvance;
+        public float preferredWidth;
+        public float preferredHeight;
+        //public float maxFontScale;
+        public float previousLineScale;
+      
+        public int wordCount;
+        public FontStyles fontStyle;
+        public float fontScale;
+        public float fontScaleMultiplier;
+      
+        public float currentFontSize;
+        public float baselineOffset;
+        public float lineOffset;
+
+        public TMP_TextInfo textInfo;
+        //public TMPro_CharacterInfo[] characterInfo;
+        public TMP_LineInfo lineInfo;
+        
+        public Color32 vertexColor;
+        public Color32 underlineColor;
+        public Color32 strikethroughColor;
+        public Color32 highlightColor;
+        public TMP_FontStyleStack basicStyleStack;
+        public TMP_RichTextTagStack<Color32> colorStack;
+        public TMP_RichTextTagStack<Color32> underlineColorStack;
+        public TMP_RichTextTagStack<Color32> strikethroughColorStack;
+        public TMP_RichTextTagStack<Color32> highlightColorStack;
+        public TMP_RichTextTagStack<TMP_ColorGradient> colorGradientStack;
+        public TMP_RichTextTagStack<float> sizeStack;
+        public TMP_RichTextTagStack<float> indentStack;
+        public TMP_RichTextTagStack<FontWeight> fontWeightStack;
+        public TMP_RichTextTagStack<int> styleStack;
+        public TMP_RichTextTagStack<float> baselineStack;
+        public TMP_RichTextTagStack<int> actionStack;
+        public TMP_RichTextTagStack<MaterialReference> materialReferenceStack;
+        public TMP_RichTextTagStack<TextAlignmentOptions> lineJustificationStack;
+        //public TMP_XmlTagStack<int> spriteAnimationStack;
+        public int spriteAnimationID;
+
+        public TMP_FontAsset currentFontAsset;
+        public TMP_SpriteAsset currentSpriteAsset;
+        public Material currentMaterial;
+        public int currentMaterialIndex;
+
+        public Extents meshExtents;
+
+        public bool tagNoParsing;
+        public bool isNonBreakingSpace;
+        //public Mesh_Extents lineExtents;
+    }
+
+
+    /// <summary>
+    /// Structure used to store retrieve the name and hashcode of the font and material
+    /// </summary>
+    public struct TagAttribute
+    {
+        public int startIndex;
+        public int length;
+        public int hashCode;
+    }
+
+
+    public struct RichTextTagAttribute
+    {
+        public int nameHashCode;
+        public int valueHashCode;
+        public TagValueType valueType;
+        public int valueStartIndex;
+        public int valueLength;
+        public TagUnitType unitType;
+    }
+
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..1a66edd7039979aec5808b264b01a29390047270
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_MeshUtilities.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: effb76e1937b45ff8adf45e51a4c08cf
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs
new file mode 100644
index 0000000000000000000000000000000000000000..e41d2a046fd7ebfbb19909ebb4a748a4cd10a731
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs
@@ -0,0 +1,4055 @@
+//#define TMP_PROFILE_ON
+//#define TMP_PROFILE_PHASES_ON
+
+using UnityEngine;
+using UnityEngine.TextCore;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+#pragma warning disable 0414 // Disabled a few warnings related to serialized variables not used in this script but used in the editor.
+
+namespace TMPro
+{
+
+    public partial class TextMeshPro
+    {
+        [SerializeField]
+        private bool m_hasFontAssetChanged = false; // Used to track when font properties have changed.
+
+        float m_previousLossyScaleY = -1; // Used for Tracking lossy scale changes in the transform;
+
+        [SerializeField]
+        private Renderer m_renderer;
+        private MeshFilter m_meshFilter;
+
+        private bool m_isFirstAllocation; // Flag to determine if this is the first allocation of the buffers.
+        private int m_max_characters = 8; // Determines the initial allocation and size of the character array / buffer.
+        private int m_max_numberOfLines = 4; // Determines the initial allocation and maximum number of lines of text. 
+
+        [SerializeField]
+        protected TMP_SubMesh[] m_subTextObjects = new TMP_SubMesh[8];
+
+
+        // MASKING RELATED PROPERTIES
+
+        //MaterialPropertyBlock m_maskingPropertyBlock;
+        //[SerializeField]
+        private bool m_isMaskingEnabled;
+        private bool isMaskUpdateRequired;
+        //private bool m_isMaterialBlockSet;
+
+        [SerializeField]
+        private MaskingTypes m_maskType;
+
+        // Matrix used to animated Env Map
+        private Matrix4x4 m_EnvMapMatrix = new Matrix4x4();
+
+
+        // Text Container / RectTransform Component
+        private Vector3[] m_RectTransformCorners = new Vector3[4];
+
+        [NonSerialized]
+        private bool m_isRegisteredForEvents;
+
+
+        // DEBUG Variables
+        //private System.Diagnostics.Stopwatch m_StopWatch;
+        //private bool isDebugOutputDone;
+        //private int m_recursiveCount = 0;
+        private int loopCountA;
+        //private int loopCountB;
+        //private int loopCountC;
+        //private int loopCountD;
+        //private int loopCountE;
+
+
+        protected override void Awake()
+        {
+            //Debug.Log("***** Awake() called on object ID " + GetInstanceID() + ". *****");
+
+            #if UNITY_EDITOR
+            // Special handling for TMP Settings and importing Essential Resources
+            if (TMP_Settings.instance == null)
+            {
+                if (m_isWaitingOnResourceLoad == false)
+                    TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED);
+
+                m_isWaitingOnResourceLoad = true;
+                return;
+            }
+            #endif
+
+            // Cache Reference to the Mesh Renderer.
+            m_renderer = GetComponent<Renderer>();
+            if (m_renderer == null)
+                m_renderer = gameObject.AddComponent<Renderer>();
+
+            // Make sure we have a CanvasRenderer for compatibility reasons and hide it
+            if (this.canvasRenderer != null)
+                this.canvasRenderer.hideFlags = HideFlags.HideInInspector;
+            else
+            {
+                CanvasRenderer canvasRenderer = gameObject.AddComponent<CanvasRenderer>();
+                canvasRenderer.hideFlags = HideFlags.HideInInspector;
+            }
+
+            // Cache Reference to RectTransform
+            m_rectTransform = this.rectTransform;
+
+            // Cache Reference to the transform;
+            m_transform = this.transform;
+
+            // Cache a reference to the Mesh Filter.
+            m_meshFilter = GetComponent<MeshFilter>();
+            if (m_meshFilter == null)
+                m_meshFilter = gameObject.AddComponent<MeshFilter>();
+
+            // Create new Mesh if necessary and cache reference to it.
+            if (m_mesh == null)
+            {
+                m_mesh = new Mesh();
+                m_mesh.hideFlags = HideFlags.HideAndDontSave;
+
+                m_meshFilter.mesh = m_mesh;
+
+                // Create new TextInfo for the text object.
+                m_textInfo = new TMP_TextInfo(this);
+            }
+            m_meshFilter.hideFlags = HideFlags.HideInInspector;
+
+            // Load TMP Settings for new text object instances.
+            LoadDefaultSettings();
+
+            // Load the font asset and assign material to renderer.
+            LoadFontAsset();
+
+            // Load Default TMP StyleSheet
+            TMP_StyleSheet.LoadDefaultStyleSheet();
+
+            // Allocate our initial buffers.
+            if (m_TextParsingBuffer == null)
+                m_TextParsingBuffer = new UnicodeChar[m_max_characters];
+
+            m_cached_TextElement = new TMP_Character();
+            m_isFirstAllocation = true;
+
+            // Check if we have a font asset assigned. Return if we don't because no one likes to see purple squares on screen.
+            if (m_fontAsset == null)
+            {
+                Debug.LogWarning("Please assign a Font Asset to this " + transform.name + " gameobject.", this);
+                return;
+            }
+
+            // Check to make sure Sub Text Objects are tracked correctly in the event a Prefab is used.
+            TMP_SubMesh[] subTextObjects = GetComponentsInChildren<TMP_SubMesh>();
+            if (subTextObjects.Length > 0)
+            {
+                for (int i = 0; i < subTextObjects.Length; i++)
+                    m_subTextObjects[i + 1] = subTextObjects[i];
+            }
+
+            // Set flags to ensure our text is parsed and redrawn.
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            m_isAwake = true;
+        }
+
+
+        protected override void OnEnable()
+        {
+            //Debug.Log("***** OnEnable() called on object ID " + GetInstanceID() + ". *****");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            // Register Callbacks for various events.
+            if (!m_isRegisteredForEvents)
+            {
+                #if UNITY_EDITOR
+                TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Add(ON_MATERIAL_PROPERTY_CHANGED);
+                TMPro_EventManager.FONT_PROPERTY_EVENT.Add(ON_FONT_PROPERTY_CHANGED);
+                TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Add(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+                TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Add(ON_DRAG_AND_DROP_MATERIAL);
+                TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED);
+                TMPro_EventManager.COLOR_GRADIENT_PROPERTY_EVENT.Add(ON_COLOR_GRADIENT_CHANGED);
+                TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Add(ON_TMP_SETTINGS_CHANGED);
+                #endif
+                m_isRegisteredForEvents = true;
+            }
+
+            TMP_UpdateManager.RegisterTextObjectForUpdate(this);
+
+            meshFilter.sharedMesh = mesh;
+            SetActiveSubMeshes(true);
+
+            // Schedule potential text object update (if any of the properties have changed.
+            ComputeMarginSize();
+
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_verticesAlreadyDirty = false;
+            SetVerticesDirty();
+        }
+
+
+        protected override void OnDisable()
+        {
+            //Debug.Log("***** OnDisable() called on object ID " + GetInstanceID() + ". *****");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            TMP_UpdateManager.UnRegisterTextElementForRebuild(this);
+            TMP_UpdateManager.UnRegisterTextObjectForUpdate(this);
+
+            m_meshFilter.sharedMesh = null;
+            SetActiveSubMeshes(false);
+        }
+
+
+        protected override void OnDestroy()
+        {
+            //Debug.Log("***** OnDestroy() called on object ID " + GetInstanceID() + ". *****");
+
+            // Destroy the mesh if we have one.
+            if (m_mesh != null)
+            {
+                DestroyImmediate(m_mesh);
+            }
+
+            // Unregister the event this object was listening to
+            #if UNITY_EDITOR
+            TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Remove(ON_MATERIAL_PROPERTY_CHANGED);
+            TMPro_EventManager.FONT_PROPERTY_EVENT.Remove(ON_FONT_PROPERTY_CHANGED);
+            TMPro_EventManager.TEXTMESHPRO_PROPERTY_EVENT.Remove(ON_TEXTMESHPRO_PROPERTY_CHANGED);
+            TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Remove(ON_DRAG_AND_DROP_MATERIAL);
+            TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED);
+            TMPro_EventManager.COLOR_GRADIENT_PROPERTY_EVENT.Remove(ON_COLOR_GRADIENT_CHANGED);
+            TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Remove(ON_TMP_SETTINGS_CHANGED);
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+            #endif
+
+            m_isRegisteredForEvents = false;
+            TMP_UpdateManager.UnRegisterTextElementForRebuild(this);
+            TMP_UpdateManager.UnRegisterTextObjectForUpdate(this);
+        }
+
+
+        #if UNITY_EDITOR
+        protected override void Reset()
+        {
+            //Debug.Log("Reset() has been called." + m_subTextObjects);
+            
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            if (m_mesh != null)
+                DestroyImmediate(m_mesh);
+
+            Awake();
+        }
+
+
+        protected override void OnValidate()
+        {
+            //Debug.Log("*** TextMeshPro OnValidate() has been called on Object ID:" + gameObject.GetInstanceID());
+            
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            // Additional Properties could be added to sync up Serialized Properties & Properties.
+
+            // Handle Font Asset changes in the inspector
+            if (m_fontAsset == null || m_hasFontAssetChanged)
+            {
+                LoadFontAsset();
+                m_isCalculateSizeRequired = true;
+                m_hasFontAssetChanged = false;
+            }
+
+            m_padding = GetPaddingForMaterial();
+            ComputeMarginSize();
+
+            m_isInputParsingRequired = true;
+            m_inputSource = TextInputSources.Text;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+            m_isPreferredWidthDirty = true;
+            m_isPreferredHeightDirty = true;
+
+            SetAllDirty();
+        }
+
+
+        // Event received when TMP resources have been loaded.
+        void ON_RESOURCES_LOADED()
+        {
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+
+            if (this == null)
+                return;
+
+            Awake();
+            OnEnable();
+        }
+
+
+        // Event received when custom material editor properties are changed.
+        void ON_MATERIAL_PROPERTY_CHANGED(bool isChanged, Material mat)
+        {
+            //Debug.Log("ON_MATERIAL_PROPERTY_CHANGED event received. Targeted Material is: " + mat.name + "  m_sharedMaterial: " + m_sharedMaterial.name + "  m_renderer.sharedMaterial: " + m_renderer.sharedMaterial);         
+
+            if (m_renderer.sharedMaterial == null)
+            {
+                if (m_fontAsset != null)
+                {
+                    m_renderer.sharedMaterial = m_fontAsset.material;
+                    Debug.LogWarning("No Material was assigned to " + name + ". " + m_fontAsset.material.name + " was assigned.", this);
+                }
+                else
+                    Debug.LogWarning("No Font Asset assigned to " + name + ". Please assign a Font Asset.", this);
+            }
+
+            if (m_fontAsset.atlasTexture != null && m_fontAsset.atlasTexture.GetInstanceID() != m_renderer.sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+            {
+                m_renderer.sharedMaterial = m_sharedMaterial;
+                //m_renderer.sharedMaterial = m_fontAsset.material;
+                Debug.LogWarning("Font Asset Atlas doesn't match the Atlas in the newly assigned material. Select a matching material or a different font asset.", this);
+            }
+
+            if (m_renderer.sharedMaterial != m_sharedMaterial) //    || m_renderer.sharedMaterials.Contains(mat))
+            {
+                //Debug.Log("ON_MATERIAL_PROPERTY_CHANGED Called on Target ID: " + GetInstanceID() + ". Previous Material:" + m_sharedMaterial + "  New Material:" + m_renderer.sharedMaterial); // on Object ID:" + GetInstanceID() + ". m_sharedMaterial: " + m_sharedMaterial.name + "  m_renderer.sharedMaterial: " + m_renderer.sharedMaterial.name);         
+                m_sharedMaterial = m_renderer.sharedMaterial;
+            }
+
+            m_padding = GetPaddingForMaterial();
+            //m_sharedMaterialHashCode = TMP_TextUtilities.GetSimpleHashCode(m_sharedMaterial.name);
+
+            UpdateMask();
+            UpdateEnvMapMatrix();
+            m_havePropertiesChanged = true;
+            SetVerticesDirty();
+        }
+
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_FONT_PROPERTY_CHANGED(bool isChanged, TMP_FontAsset font)
+        {
+            if (MaterialReference.Contains(m_materialReferences, font))
+            {
+                //Debug.Log("ON_FONT_PROPERTY_CHANGED event received.");
+                m_isInputParsingRequired = true;
+                m_havePropertiesChanged = true;
+
+                UpdateMeshPadding();
+
+                SetMaterialDirty();
+                SetVerticesDirty();
+            }
+        }
+
+     
+        // Event received when UNDO / REDO Event alters the properties of the object.
+        void ON_TEXTMESHPRO_PROPERTY_CHANGED(bool isChanged, TextMeshPro obj)
+        {
+            if (obj == this)
+            {
+                //Debug.Log("Undo / Redo Event Received by Object ID:" + GetInstanceID());
+                m_havePropertiesChanged = true;
+                m_isInputParsingRequired = true;
+
+                m_padding = GetPaddingForMaterial();
+                ComputeMarginSize(); // Verify this change
+                SetVerticesDirty();
+            }
+        }
+
+
+        // Event to Track Material Changed resulting from Drag-n-drop.
+        void ON_DRAG_AND_DROP_MATERIAL(GameObject obj, Material currentMaterial, Material newMaterial)
+        {
+            //Debug.Log("Drag-n-Drop Event - Receiving Object ID " + GetInstanceID()); // + ". Target Object ID " + obj.GetInstanceID() + ".  New Material is " + mat.name + " with ID " + mat.GetInstanceID() + ". Base Material is " + m_baseMaterial.name + " with ID " + m_baseMaterial.GetInstanceID());
+
+            // Check if event applies to this current object
+            #if UNITY_2018_2_OR_NEWER
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject) == obj)
+            #else
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetPrefabParent(gameObject) == obj)
+            #endif
+            {
+                UnityEditor.Undo.RecordObject(this, "Material Assignment");
+                UnityEditor.Undo.RecordObject(m_renderer, "Material Assignment");
+
+                m_sharedMaterial = newMaterial;
+
+                m_padding = GetPaddingForMaterial();
+                m_havePropertiesChanged = true;
+                SetVerticesDirty();
+                SetMaterialDirty();
+            }
+        }
+
+
+        // Event received when Text Styles are changed.
+        void ON_TEXT_STYLE_CHANGED(bool isChanged)
+        {
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            SetVerticesDirty();
+        }
+
+
+        /// <summary>
+        /// Event received when a Color Gradient Preset is modified.
+        /// </summary>
+        /// <param name="textObject"></param>
+        void ON_COLOR_GRADIENT_CHANGED(TMP_ColorGradient gradient)
+        {
+            if (m_fontColorGradientPreset != null && gradient.GetInstanceID() == m_fontColorGradientPreset.GetInstanceID())
+            {
+                m_havePropertiesChanged = true;
+                SetVerticesDirty();
+            }
+        }
+
+
+        /// <summary>
+        /// Event received when the TMP Settings are changed.
+        /// </summary>
+        void ON_TMP_SETTINGS_CHANGED()
+        {
+            m_defaultSpriteAsset = null;
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            SetAllDirty();
+        }
+#endif
+
+
+            // Function which loads either the default font or a newly assigned font asset. This function also assigned the appropriate material to the renderer.
+        protected override void LoadFontAsset()
+        {
+            //Debug.Log("TextMeshPro LoadFontAsset() has been called."); // Current Font Asset is " + (font != null ? font.name: "Null") );
+
+            ShaderUtilities.GetShaderPropertyIDs(); // Initialize & Get shader property IDs.
+
+            if (m_fontAsset == null)
+            {
+                if (TMP_Settings.defaultFontAsset != null)
+                    m_fontAsset =TMP_Settings.defaultFontAsset;
+                else
+                    m_fontAsset = Resources.Load<TMP_FontAsset>("Fonts & Materials/LiberationSans SDF");
+
+                if (m_fontAsset == null)
+                {
+                    Debug.LogWarning("The LiberationSans SDF Font Asset was not found. There is no Font Asset assigned to " + gameObject.name + ".", this);
+                    return;
+                }
+
+                if (m_fontAsset.characterLookupTable == null)
+                {
+                    Debug.Log("Dictionary is Null!");
+                }
+
+                m_renderer.sharedMaterial = m_fontAsset.material;
+                m_sharedMaterial = m_fontAsset.material;
+                m_sharedMaterial.SetFloat("_CullMode", 0);
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 4);
+                m_renderer.receiveShadows = false;
+                m_renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; // true;
+                // Get a Reference to the Shader
+            }
+            else
+            {
+                if (m_fontAsset.characterLookupTable == null)
+                {
+                    //Debug.Log("Reading Font Definition and Creating Character Dictionary.");
+                    m_fontAsset.ReadFontAssetDefinition();
+                }
+
+                //Debug.Log("Font Asset name:" + font.material.name);
+
+                // If font atlas texture doesn't match the assigned material font atlas, switch back to default material specified in the Font Asset.
+                if (m_renderer.sharedMaterial == null || m_renderer.sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex) == null || m_fontAsset.atlasTexture.GetInstanceID() != m_renderer.sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                {
+                    m_renderer.sharedMaterial = m_fontAsset.material;
+                    m_sharedMaterial = m_fontAsset.material; 
+                }
+                else
+                {
+                    m_sharedMaterial = m_renderer.sharedMaterial;
+                }
+
+                //m_sharedMaterial.SetFloat("_CullMode", 0);
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 4);
+
+                // Check if we are using the SDF Surface Shader
+                if (m_sharedMaterial.passCount == 1)
+                {
+                    m_renderer.receiveShadows = false;
+                    m_renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
+                }
+
+            }
+
+            m_padding = GetPaddingForMaterial();
+            //m_alignmentPadding = ShaderUtilities.GetFontExtent(m_sharedMaterial);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+
+
+            // Find and cache Underline & Ellipsis characters.
+            GetSpecialCharacters(m_fontAsset);
+
+
+            //m_sharedMaterials.Add(m_sharedMaterial);
+            //m_sharedMaterialHashCode = TMP_TextUtilities.GetSimpleHashCode(m_sharedMaterial.name);
+            // Hide Material Editor Component
+            //m_renderer.sharedMaterial.hideFlags = HideFlags.None;
+        }
+
+
+        void UpdateEnvMapMatrix()
+        {
+            if (!m_sharedMaterial.HasProperty(ShaderUtilities.ID_EnvMap) || m_sharedMaterial.GetTexture(ShaderUtilities.ID_EnvMap) == null)
+                return;
+
+            //Debug.Log("Updating Env Matrix...");
+            Vector3 rotation = m_sharedMaterial.GetVector(ShaderUtilities.ID_EnvMatrixRotation);
+            m_EnvMapMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(rotation), Vector3.one);
+
+            m_sharedMaterial.SetMatrix(ShaderUtilities.ID_EnvMatrix, m_EnvMapMatrix);
+        }
+
+
+        //
+        void SetMask(MaskingTypes maskType)
+        {
+            switch(maskType)
+            {
+                case MaskingTypes.MaskOff:
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+                    break;
+                case MaskingTypes.MaskSoft:
+                    m_sharedMaterial.EnableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+                    break;
+                case MaskingTypes.MaskHard:
+                    m_sharedMaterial.EnableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+                    break;
+                //case MaskingTypes.MaskTex:
+                //    m_sharedMaterial.EnableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+                //    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                //    m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                //    break;
+            }
+        }
+
+
+        // Method used to set the masking coordinates
+        void SetMaskCoordinates(Vector4 coords)
+        {
+            m_sharedMaterial.SetVector(ShaderUtilities.ID_ClipRect, coords);
+        }
+
+        // Method used to set the masking coordinates
+        void SetMaskCoordinates(Vector4 coords, float softX, float softY)
+        {
+            m_sharedMaterial.SetVector(ShaderUtilities.ID_ClipRect, coords);
+            m_sharedMaterial.SetFloat(ShaderUtilities.ID_MaskSoftnessX, softX);
+            m_sharedMaterial.SetFloat(ShaderUtilities.ID_MaskSoftnessY, softY);
+        }
+
+
+
+        // Enable Masking in the Shader
+        void EnableMasking()
+        {
+            if (m_sharedMaterial.HasProperty(ShaderUtilities.ID_ClipRect))
+            {
+                m_sharedMaterial.EnableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+
+                m_isMaskingEnabled = true;
+                UpdateMask();
+            }
+        }
+
+
+        // Enable Masking in the Shader
+        void DisableMasking()
+        {
+            if (m_sharedMaterial.HasProperty(ShaderUtilities.ID_ClipRect))
+            {
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+
+                m_isMaskingEnabled = false;
+                UpdateMask();
+            }
+        }
+
+
+        void UpdateMask()
+        {
+            //Debug.Log("UpdateMask() called.");
+            
+            if (!m_isMaskingEnabled)
+            {
+                // Release Masking Material
+
+                // Re-assign Base Material
+
+                return;
+            }
+            
+            if (m_isMaskingEnabled && m_fontMaterial == null)
+            {
+                CreateMaterialInstance();
+            }
+
+            
+            /*
+            if (!m_isMaskingEnabled)
+            {
+                //Debug.Log("Masking is not enabled.");
+                if (m_maskingPropertyBlock != null)
+                {
+                    m_renderer.SetPropertyBlock(null);
+                    //havePropertiesChanged = true;
+                }
+                return;
+            }
+            //else
+            //    Debug.Log("Updating Masking...");
+            */
+             
+            // Compute Masking Coordinates & Softness
+            //float softnessX = Mathf.Min(Mathf.Min(m_textContainer.margins.x, m_textContainer.margins.z), m_sharedMaterial.GetFloat(ShaderUtilities.ID_MaskSoftnessX));
+            //float softnessY = Mathf.Min(Mathf.Min(m_textContainer.margins.y, m_textContainer.margins.w), m_sharedMaterial.GetFloat(ShaderUtilities.ID_MaskSoftnessY));
+
+            //softnessX = softnessX > 0 ? softnessX : 0;
+            //softnessY = softnessY > 0 ? softnessY : 0;
+           
+            //float width = (m_textContainer.width - Mathf.Max(m_textContainer.margins.x, 0) - Mathf.Max(m_textContainer.margins.z, 0)) / 2 + softnessX;
+            //float height =  (m_textContainer.height - Mathf.Max(m_textContainer.margins.y, 0) - Mathf.Max(m_textContainer.margins.w, 0)) / 2 + softnessY;
+          
+            //Vector2 center = new Vector2((0.5f - m_textContainer.pivot.x) * m_textContainer.width + (Mathf.Max(m_textContainer.margins.x, 0) - Mathf.Max(m_textContainer.margins.z, 0)) / 2, (0.5f - m_textContainer.pivot.y) * m_textContainer.height + (- Mathf.Max(m_textContainer.margins.y, 0) + Mathf.Max(m_textContainer.margins.w, 0)) / 2);                           
+            //Vector4 mask = new Vector4(center.x, center.y, width, height);
+
+
+            //m_fontMaterial.SetVector(ShaderUtilities.ID_ClipRect, mask);
+            //m_fontMaterial.SetFloat(ShaderUtilities.ID_MaskSoftnessX, softnessX);
+            //m_fontMaterial.SetFloat(ShaderUtilities.ID_MaskSoftnessY, softnessY);
+
+            /*                     
+            if(m_maskingPropertyBlock == null)
+            {                
+                m_maskingPropertyBlock = new MaterialPropertyBlock();
+         
+                //m_maskingPropertyBlock.AddFloat(ShaderUtilities.ID_VertexOffsetX,  m_sharedMaterial.GetFloat(ShaderUtilities.ID_VertexOffsetX));
+                //m_maskingPropertyBlock.AddFloat(ShaderUtilities.ID_VertexOffsetY,  m_sharedMaterial.GetFloat(ShaderUtilities.ID_VertexOffsetY));
+                //Debug.Log("Creating new MaterialPropertyBlock.");
+            }
+
+            //Debug.Log("Updating Material Property Block.");
+            //m_maskingPropertyBlock.Clear();
+            m_maskingPropertyBlock.AddFloat(ShaderUtilities.ID_MaskID, m_renderer.GetInstanceID());
+            m_maskingPropertyBlock.AddVector(ShaderUtilities.ID_MaskCoord, mask);
+            m_maskingPropertyBlock.AddFloat(ShaderUtilities.ID_MaskSoftnessX, softnessX);
+            m_maskingPropertyBlock.AddFloat(ShaderUtilities.ID_MaskSoftnessY, softnessY);
+           
+            m_renderer.SetPropertyBlock(m_maskingPropertyBlock);
+            */
+        }
+
+
+        // Function called internally when a new material is assigned via the fontMaterial property.
+        protected override Material GetMaterial(Material mat)
+        {
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object.
+            //if (m_renderer == null)
+            //    m_renderer = GetComponent<Renderer>();
+
+            // Create Instance Material only if the new material is not the same instance previously used.
+            if (m_fontMaterial == null || m_fontMaterial.GetInstanceID() != mat.GetInstanceID())
+                m_fontMaterial = CreateMaterialInstance(mat);
+
+            m_sharedMaterial = m_fontMaterial;
+
+            m_padding = GetPaddingForMaterial();
+
+            SetVerticesDirty();
+            SetMaterialDirty();
+
+            return m_sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Method returning instances of the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected override Material[] GetMaterials(Material[] mats)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            if (m_fontMaterials == null)
+                m_fontMaterials = new Material[materialCount];
+            else if (m_fontMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontMaterials, materialCount, false);
+
+            // Get instances of the materials
+            for (int i = 0; i < materialCount; i++)
+            {
+                if (i == 0)
+                    m_fontMaterials[i] = fontMaterial;
+                else
+                    m_fontMaterials[i] = m_subTextObjects[i].material;
+            }
+
+            m_fontSharedMaterials = m_fontMaterials;
+
+            return m_fontMaterials;
+        }
+
+
+        // Function called internally when a new shared material is assigned via the fontSharedMaterial property.
+        protected override void SetSharedMaterial(Material mat)
+        {
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object.
+            //if (m_renderer == null)
+            //    m_renderer = GetComponent<Renderer>();
+
+            m_sharedMaterial = mat;
+
+            m_padding = GetPaddingForMaterial();
+
+            SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// Method returning an array containing the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected override Material[] GetSharedMaterials()
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            if (m_fontSharedMaterials == null)
+                m_fontSharedMaterials = new Material[materialCount];
+            else if (m_fontSharedMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontSharedMaterials, materialCount, false);
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                if (i == 0)
+                    m_fontSharedMaterials[i] = m_sharedMaterial;
+                else
+                    m_fontSharedMaterials[i] = m_subTextObjects[i].sharedMaterial;
+            }
+
+            return m_fontSharedMaterials;
+        }
+
+
+        /// <summary>
+        /// Method used to assign new materials to the text and sub text objects.
+        /// </summary>
+        protected override void SetSharedMaterials(Material[] materials)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            // Check allocation of the fontSharedMaterials array.
+            if (m_fontSharedMaterials == null)
+                m_fontSharedMaterials = new Material[materialCount];
+            else if (m_fontSharedMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontSharedMaterials, materialCount, false);
+
+            // Only assign as many materials as the text object contains.
+            for (int i = 0; i < materialCount; i++)
+            {
+                Texture mat_MainTex = materials[i].GetTexture(ShaderUtilities.ID_MainTex);
+
+                if (i == 0)
+                {
+                    // Only assign new material if the font atlas textures match.
+                    if ( mat_MainTex == null || mat_MainTex.GetInstanceID() != m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        continue;
+
+                    m_sharedMaterial = m_fontSharedMaterials[i] = materials[i];
+                    m_padding = GetPaddingForMaterial(m_sharedMaterial);
+                }
+                else
+                {
+                    // Only assign new material if the font atlas textures match.
+                    if (mat_MainTex == null || mat_MainTex.GetInstanceID() != m_subTextObjects[i].sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        continue;
+
+                    // Only assign a new material if none were specified in the text input.
+                    if (m_subTextObjects[i].isDefaultMaterial)
+                        m_subTextObjects[i].sharedMaterial = m_fontSharedMaterials[i] = materials[i];
+                }
+            }
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetOutlineThickness(float thickness)
+        {
+            thickness = Mathf.Clamp01(thickness);
+            m_renderer.material.SetFloat(ShaderUtilities.ID_OutlineWidth, thickness);
+
+            if (m_fontMaterial == null)
+                m_fontMaterial = m_renderer.material;
+
+            m_fontMaterial = m_renderer.material;
+            m_sharedMaterial = m_fontMaterial;
+            m_padding = GetPaddingForMaterial();
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetFaceColor(Color32 color)
+        {
+            m_renderer.material.SetColor(ShaderUtilities.ID_FaceColor, color);
+
+            if (m_fontMaterial == null)
+                m_fontMaterial = m_renderer.material;
+
+            m_sharedMaterial = m_fontMaterial;
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetOutlineColor(Color32 color)
+        {
+            m_renderer.material.SetColor(ShaderUtilities.ID_OutlineColor, color);
+
+            if (m_fontMaterial == null)
+                m_fontMaterial = m_renderer.material;
+
+            //Debug.Log("Material ID:" + m_fontMaterial.GetInstanceID());
+            m_sharedMaterial = m_fontMaterial;
+        }
+
+
+        // Function used to create an instance of the material
+        void CreateMaterialInstance()
+        {
+            Material mat = new Material(m_sharedMaterial);
+            mat.shaderKeywords = m_sharedMaterial.shaderKeywords;
+
+            //mat.hideFlags = HideFlags.DontSave;
+            mat.name += " Instance";
+
+            m_fontMaterial = mat;
+        }
+
+
+        // Sets the Render Queue and Ztest mode 
+        protected override void SetShaderDepth()
+        {
+            if (m_isOverlay)
+            {
+                // Changing these properties results in an instance of the material
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 0);
+                //m_renderer.material.SetFloat("_ZTestMode", 8);
+                m_renderer.material.renderQueue = 4000;
+
+                m_sharedMaterial = m_renderer.material;
+                //Debug.Log("Text set to Overlay mode.");
+            }
+            else
+            {
+                // Should this use an instanced material?
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 4);
+                m_renderer.material.renderQueue = -1;
+                
+                m_sharedMaterial = m_renderer.material;
+                //Debug.Log("Text set to Normal mode.");
+            }
+        }
+
+
+        // Sets the Culling mode of the material
+        protected override void SetCulling()
+        {
+            if (m_isCullingEnabled)
+            {
+                m_renderer.material.SetFloat("_CullMode", 2);
+
+                for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+                {
+                    Renderer renderer = m_subTextObjects[i].renderer;
+
+                    if (renderer != null)
+                    {
+                        renderer.material.SetFloat(ShaderUtilities.ShaderTag_CullMode, 2);
+                    }
+                }
+            }
+            else
+            {
+                m_renderer.material.SetFloat("_CullMode", 0);
+
+                for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+                {
+                    Renderer renderer = m_subTextObjects[i].renderer;
+
+                    if (renderer != null)
+                    {
+                        renderer.material.SetFloat(ShaderUtilities.ShaderTag_CullMode, 0);
+                    }
+                }
+            }
+        }
+
+
+        // Set Perspective Correction Mode based on whether Camera is Orthographic or Perspective
+        void SetPerspectiveCorrection()
+        {
+            if (m_isOrthographic)
+                m_sharedMaterial.SetFloat(ShaderUtilities.ID_PerspectiveFilter, 0.0f);
+            else
+                m_sharedMaterial.SetFloat(ShaderUtilities.ID_PerspectiveFilter, 0.875f);
+        }
+
+
+        /// <summary>
+        /// Get the padding value for the currently assigned material.
+        /// </summary>
+        /// <returns></returns>
+        protected override float GetPaddingForMaterial(Material mat)
+        {
+            m_padding = ShaderUtilities.GetPadding(mat, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_isSDFShader = mat.HasProperty(ShaderUtilities.ID_WeightNormal);
+
+            return m_padding;
+        }
+
+
+        /// <summary>
+        /// Get the padding value for the currently assigned material.
+        /// </summary>
+        /// <returns></returns>
+        protected override float GetPaddingForMaterial()
+        {
+            ShaderUtilities.GetShaderPropertyIDs();
+
+            if (m_sharedMaterial == null) return 0;
+
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_isSDFShader = m_sharedMaterial.HasProperty(ShaderUtilities.ID_WeightNormal);
+
+            return m_padding;
+        }
+
+
+        // This function parses through the Char[] to determine how many characters will be visible. It then makes sure the arrays are large enough for all those characters.
+        protected override int SetArraySizes(UnicodeChar[] chars)
+        {
+            //Debug.Log("*** SetArraySizes() ***");
+
+            int spriteCount = 0;
+
+            m_totalCharacterCount = 0;
+            m_isUsingBold = false;
+            m_isParsingText = false;
+            tag_NoParsing = false;
+            m_FontStyleInternal = m_fontStyle;
+
+            m_FontWeightInternal = (m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold ? FontWeight.Bold : m_fontWeight;
+            m_FontWeightStack.SetDefault(m_FontWeightInternal);
+
+            m_currentFontAsset = m_fontAsset;
+            m_currentMaterial = m_sharedMaterial;
+            m_currentMaterialIndex = 0;
+
+            m_materialReferenceStack.SetDefault(new MaterialReference(m_currentMaterialIndex, m_currentFontAsset, null, m_currentMaterial, m_padding));
+
+            m_materialReferenceIndexLookup.Clear();
+            MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+
+            if (m_textInfo == null) m_textInfo = new TMP_TextInfo();
+            m_textElementType = TMP_TextElementType.Character;
+
+            // Clear Linked Text object if we have one.
+            if (m_linkedTextComponent != null)
+            {
+                m_linkedTextComponent.text = string.Empty;
+                m_linkedTextComponent.ForceMeshUpdate();
+            }
+
+            // Parsing XML tags in the text
+            for (int i = 0; i < chars.Length && chars[i].unicode != 0; i++)
+            {
+                //Make sure the characterInfo array can hold the next text element.
+                if (m_textInfo.characterInfo == null || m_totalCharacterCount >= m_textInfo.characterInfo.Length)
+                    TMP_TextInfo.Resize(ref m_textInfo.characterInfo, m_totalCharacterCount + 1, true);
+
+                int unicode = (int)chars[i].unicode;
+
+                // PARSE XML TAGS
+                #region PARSE XML TAGS
+                if (m_isRichText && unicode == 60) // if Char '<'
+                {
+                    int prev_MaterialIndex = m_currentMaterialIndex;
+                    int endTagIndex;
+
+                    // Check if Tag is Valid
+                    if (ValidateHtmlTag(chars, i + 1, out endTagIndex))
+                    {
+                        int tagStartIndex = chars[i].stringIndex;
+                        i = endTagIndex;
+
+                        if ((m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold) m_isUsingBold = true;
+
+                        if (m_textElementType == TMP_TextElementType.Sprite)
+                        {
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)(57344 + m_spriteIndex);
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = m_spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = m_currentSpriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = m_currentSpriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = tagStartIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].stringIndex - tagStartIndex + 1;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_MaterialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+                        }
+
+                        continue;
+                    }
+                }
+                #endregion
+
+                bool isUsingAlternativeTypeface = false;
+                bool isUsingFallbackOrAlternativeTypeface = false;
+
+                TMP_Character character;
+                TMP_FontAsset tempFontAsset;
+                TMP_FontAsset prev_fontAsset = m_currentFontAsset;
+                Material prev_material = m_currentMaterial;
+                int prev_materialIndex = m_currentMaterialIndex;
+
+
+                // Handle Font Styles like LowerCase, UpperCase and SmallCaps.
+                #region Handling of LowerCase, UpperCase and SmallCaps Font Styles
+                if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    if ((m_FontStyleInternal & FontStyles.UpperCase) == FontStyles.UpperCase)
+                    {
+                        // If this character is lowercase, switch to uppercase.
+                        if (char.IsLower((char)unicode))
+                            unicode = char.ToUpper((char)unicode);
+
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.LowerCase) == FontStyles.LowerCase)
+                    {
+                        // If this character is uppercase, switch to lowercase.
+                        if (char.IsUpper((char)unicode))
+                            unicode = char.ToLower((char)unicode);
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.SmallCaps) == FontStyles.SmallCaps)
+                    {
+                        // Only convert lowercase characters to uppercase.
+                        if (char.IsLower((char)unicode))
+                            unicode = char.ToUpper((char)unicode);
+                    }
+                }
+                #endregion
+
+
+                // Lookup the Glyph data for each character and cache it.
+                #region LOOKUP GLYPH
+                character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, false, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                // Search for the glyph in the list of fallback assigned to the primary font asset.
+                if (character == null)
+                {
+                    if (m_currentFontAsset.fallbackFontAssetTable != null && m_currentFontAsset.fallbackFontAssetTable.Count > 0)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, m_currentFontAsset.fallbackFontAssetTable, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // Search for the glyph in the Sprite Asset assigned to the text object.
+                if (character == null)
+                {
+                    TMP_SpriteAsset spriteAsset = this.spriteAsset;
+
+                    if (spriteAsset != null)
+                    {
+                        int spriteIndex = -1;
+
+                        // Check Default Sprite Asset and its Fallbacks
+                        spriteAsset = TMP_SpriteAsset.SearchForSpriteByUnicode(spriteAsset, (uint)unicode, true, out spriteIndex);
+
+                        if (spriteIndex != -1)
+                        {
+                            m_textElementType = TMP_TextElementType.Sprite;
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(spriteAsset.material, spriteAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = spriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = spriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_materialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+
+                            continue;
+                        }
+                    }
+                }
+
+                // Search for the glyph in the list of fallback assigned in the TMP Settings (General Fallbacks).
+                if (character == null)
+                {
+                    if (TMP_Settings.fallbackFontAssets != null && TMP_Settings.fallbackFontAssets.Count > 0)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, TMP_Settings.fallbackFontAssets, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // Search for the glyph in the Default Font Asset assigned in the TMP Settings file.
+                if (character == null)
+                {
+                    if (TMP_Settings.defaultFontAsset != null)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, TMP_Settings.defaultFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // TODO: Add support for using Sprite Assets like a special Emoji only Sprite Asset when UTF16 or UTF32 glyphs are requested.
+                // This would kind of mirror native Emoji support.
+                if (character == null)
+                {
+                    TMP_SpriteAsset spriteAsset = TMP_Settings.defaultSpriteAsset;
+
+                    if (spriteAsset != null)
+                    {
+                        int spriteIndex = -1;
+
+                        // Check Default Sprite Asset and its Fallbacks
+                        spriteAsset = TMP_SpriteAsset.SearchForSpriteByUnicode(spriteAsset, (uint)unicode, true, out spriteIndex);
+
+                        if (spriteIndex != -1)
+                        {
+                            m_textElementType = TMP_TextElementType.Sprite;
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(spriteAsset.material, spriteAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = spriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = spriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_materialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+
+                            continue;
+                        }
+
+                    }
+                }
+
+                //Check if Lowercase or Uppercase variant of the character is available.
+                // Not sure this is necessary anyone as it is very unlikely with recursive search through fallback fonts.
+                //if (glyph == null)
+                //{
+                //    if (char.IsLower((char)c))
+                //    {
+                //        if (m_currentFontAsset.characterDictionary.TryGetValue(char.ToUpper((char)c), out glyph))
+                //            c = chars[i] = char.ToUpper((char)c);
+                //    }
+                //    else if (char.IsUpper((char)c))
+                //    {
+                //        if (m_currentFontAsset.characterDictionary.TryGetValue(char.ToLower((char)c), out glyph))
+                //            c = chars[i] = char.ToLower((char)c);
+                //    }
+                //}
+
+                // Replace missing glyph by the Square (9633) glyph or possibly the Space (32) glyph.
+                if (character == null)
+                {
+                    // Save the original unicode character
+                    int srcGlyph = unicode;
+
+                    // Try replacing the missing glyph character by TMP Settings Missing Glyph or Square (9633) character.
+                    unicode = chars[i].unicode = TMP_Settings.missingGlyphCharacter == 0 ? 9633 : TMP_Settings.missingGlyphCharacter;
+
+                    // Check for the missing glyph character in the currently assigned font asset and its fallbacks
+                    character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                    if (character == null)
+                    {
+                        // Search for the missing glyph character in the TMP Settings Fallback list.
+                        if (TMP_Settings.fallbackFontAssets != null && TMP_Settings.fallbackFontAssets.Count > 0)
+                            character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, TMP_Settings.fallbackFontAssets, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                    }
+
+                    if (character == null)
+                    {
+                        // Search for the missing glyph in the TMP Settings Default Font Asset.
+                        if (TMP_Settings.defaultFontAsset != null)
+                            character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, TMP_Settings.defaultFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                    }
+
+                    if (character == null)
+                    {
+                        // Use Space (32) Glyph from the currently assigned font asset.
+                        unicode = chars[i].unicode = 32;
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                        if (!TMP_Settings.warningsDisabled)
+                            Debug.LogWarning("Character with ASCII value of " + srcGlyph + " was not found in the Font Asset Glyph Table. It was replaced by a space.", this);
+                    }
+                }
+
+                // Determine if the font asset is still the current font asset or a fallback.
+                if (tempFontAsset != null)
+                {
+                    if (tempFontAsset.GetInstanceID() != m_currentFontAsset.GetInstanceID())
+                    {
+                        isUsingFallbackOrAlternativeTypeface = true;
+                        m_currentFontAsset = tempFontAsset;
+                    }
+                }
+                #endregion
+
+                m_textInfo.characterInfo[m_totalCharacterCount].elementType = TMP_TextElementType.Character;
+                m_textInfo.characterInfo[m_totalCharacterCount].textElement = character;
+                m_textInfo.characterInfo[m_totalCharacterCount].isUsingAlternateTypeface = isUsingAlternativeTypeface;
+                m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                if (isUsingFallbackOrAlternativeTypeface)
+                {
+                    // Create Fallback material instance matching current material preset if necessary
+                    if (TMP_Settings.matchMaterialPreset)
+                        m_currentMaterial = TMP_MaterialManager.GetFallbackMaterial(m_currentMaterial, m_currentFontAsset.material);
+                    else
+                        m_currentMaterial = m_currentFontAsset.material;
+
+                    m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                }
+
+                if (!char.IsWhiteSpace((char)unicode) && unicode != 0x200B)
+                {
+                    // Limit the mesh of the main text object to 65535 vertices and use sub objects for the overflow.
+                    if (m_materialReferences[m_currentMaterialIndex].referenceCount < 16383)
+                        m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+                    else
+                    {
+                        m_currentMaterialIndex = MaterialReference.AddMaterialReference(new Material(m_currentMaterial), m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                        m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+                    }
+                }
+
+                m_textInfo.characterInfo[m_totalCharacterCount].material = m_currentMaterial;
+                m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                m_materialReferences[m_currentMaterialIndex].isFallbackMaterial = isUsingFallbackOrAlternativeTypeface;
+
+                // Restore previous font asset and material if fallback font was used.
+                if (isUsingFallbackOrAlternativeTypeface)
+                {
+                    m_materialReferences[m_currentMaterialIndex].fallbackMaterial = prev_material;
+                    m_currentFontAsset = prev_fontAsset;
+                    m_currentMaterial = prev_material;
+                    m_currentMaterialIndex = prev_materialIndex;
+                }
+
+                m_totalCharacterCount += 1;
+            }
+
+            // Early return if we are calculating the preferred values.
+            if (m_isCalculatingPreferredValues)
+            {
+                m_isCalculatingPreferredValues = false;
+                m_isInputParsingRequired = true;
+                return m_totalCharacterCount;
+            }
+
+            // Save material and sprite count.
+            m_textInfo.spriteCount = spriteCount;
+            int materialCount = m_textInfo.materialCount = m_materialReferenceIndexLookup.Count;
+
+            // Check if we need to resize the MeshInfo array for handling different materials.
+            if (materialCount > m_textInfo.meshInfo.Length)
+                TMP_TextInfo.Resize(ref m_textInfo.meshInfo, materialCount, false);
+
+            // Resize SubTextObject array if necessary
+            if (materialCount > m_subTextObjects.Length)
+                TMP_TextInfo.Resize(ref m_subTextObjects, Mathf.NextPowerOfTwo(materialCount + 1));
+
+            // Resize CharacterInfo[] if allocations are excessive
+            if (m_textInfo.characterInfo.Length - m_totalCharacterCount > 256)
+                TMP_TextInfo.Resize(ref m_textInfo.characterInfo, Mathf.Max(m_totalCharacterCount + 1, 256), true);
+
+
+            // Iterate through the material references to set the mesh buffer allocations
+            for (int i = 0; i < materialCount; i++)
+            {
+                // Add new sub text object for each material reference
+                if (i > 0)
+                {
+                    if (m_subTextObjects[i] == null)
+                    {
+                        m_subTextObjects[i] = TMP_SubMesh.AddSubTextObject(this, m_materialReferences[i]);
+
+                        // Not sure this is necessary
+                        m_textInfo.meshInfo[i].vertices = null;
+                    }
+                    //else if (m_subTextObjects[i].gameObject.activeInHierarchy == false)
+                    //    m_subTextObjects[i].gameObject.SetActive(true);
+
+                    // Check if the material has changed.
+                    if (m_subTextObjects[i].sharedMaterial == null || m_subTextObjects[i].sharedMaterial.GetInstanceID() != m_materialReferences[i].material.GetInstanceID())
+                    {
+                        bool isDefaultMaterial = m_materialReferences[i].isDefaultMaterial;
+
+                        m_subTextObjects[i].isDefaultMaterial = isDefaultMaterial;
+
+                        // Assign new material if we are not using the default material or if the font asset has changed.
+                        if (!isDefaultMaterial || m_subTextObjects[i].sharedMaterial == null || m_subTextObjects[i].sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() != m_materialReferences[i].material.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        {
+                            m_subTextObjects[i].sharedMaterial = m_materialReferences[i].material;
+                            m_subTextObjects[i].fontAsset = m_materialReferences[i].fontAsset;
+                            m_subTextObjects[i].spriteAsset = m_materialReferences[i].spriteAsset;
+                        }
+                    }
+
+                    // Check if we need to use a Fallback Material
+                    if (m_materialReferences[i].isFallbackMaterial)
+                    {
+                        m_subTextObjects[i].fallbackMaterial = m_materialReferences[i].material;
+                        m_subTextObjects[i].fallbackSourceMaterial = m_materialReferences[i].fallbackMaterial;
+                    }
+
+                }
+
+                int referenceCount = m_materialReferences[i].referenceCount;
+
+                // Check to make sure our buffers allocations can accommodate the required text elements.
+                if (m_textInfo.meshInfo[i].vertices == null || m_textInfo.meshInfo[i].vertices.Length < referenceCount * (!m_isVolumetricText ? 4 : 8))
+                {
+                    if (m_textInfo.meshInfo[i].vertices == null)
+                    {
+                        if (i == 0)
+                            m_textInfo.meshInfo[i] = new TMP_MeshInfo(m_mesh, referenceCount + 1, m_isVolumetricText);
+                        else
+                            m_textInfo.meshInfo[i] = new TMP_MeshInfo(m_subTextObjects[i].mesh, referenceCount + 1, m_isVolumetricText);
+                    }
+                    else
+                        m_textInfo.meshInfo[i].ResizeMeshInfo(referenceCount > 1024 ? referenceCount + 256 : Mathf.NextPowerOfTwo(referenceCount + 1), m_isVolumetricText);
+                }
+                else if (m_VertexBufferAutoSizeReduction && referenceCount > 0 && m_textInfo.meshInfo[i].vertices.Length - referenceCount * (!m_isVolumetricText ? 4 : 8) > 1024)
+                {
+                    // Resize vertex buffers if allocations are excessive.
+                    //Debug.Log("Reducing the size of the vertex buffers.");
+                    m_textInfo.meshInfo[i].ResizeMeshInfo(referenceCount > 1024 ? referenceCount + 256 : Mathf.NextPowerOfTwo(referenceCount + 1), m_isVolumetricText);
+                }
+            }
+
+            //TMP_MaterialManager.CleanupFallbackMaterials();
+
+            // Clean up unused SubMeshes
+            for (int i = materialCount; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                if (i < m_textInfo.meshInfo.Length)
+                    m_textInfo.meshInfo[i].ClearUnusedVertices(0, true);
+
+                //m_subTextObjects[i].gameObject.SetActive(false);
+            }
+
+            return m_totalCharacterCount;
+        }
+
+
+        // Added to sort handle the potential issue with OnWillRenderObject() not getting called when objects are not visible by camera.
+        //void OnBecameInvisible()
+        //{
+        //    if (m_mesh != null)
+        //        m_mesh.bounds = new Bounds(transform.position, new Vector3(1000, 1000, 0));
+        //}
+
+
+        /// <summary>
+        /// Update the margin width and height
+        /// </summary>
+        public override void ComputeMarginSize()
+        {
+            if (this.rectTransform != null)
+            {
+                //Debug.Log("*** ComputeMarginSize() *** Current RectTransform's Width is " + m_rectTransform.rect.width + " and Height is " + m_rectTransform.rect.height); // + " and size delta is "  + m_rectTransform.sizeDelta);
+
+                m_marginWidth = m_rectTransform.rect.width - m_margin.x - m_margin.z;
+                m_marginHeight = m_rectTransform.rect.height - m_margin.y - m_margin.w;
+
+                // Update the corners of the RectTransform
+                m_RectTransformCorners = GetTextContainerLocalCorners();
+            }
+        }
+
+
+        protected override void OnDidApplyAnimationProperties()
+        {
+            //Debug.Log("*** OnDidApplyAnimationProperties() ***");
+            m_havePropertiesChanged = true;
+            isMaskUpdateRequired = true;
+
+            SetVerticesDirty();
+        }
+
+
+        protected override void OnTransformParentChanged()
+        {
+            //Debug.Log("*** OnTransformParentChanged() ***");
+            //ComputeMarginSize();
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        protected override void OnRectTransformDimensionsChange()
+        {
+            //Debug.Log("*** OnRectTransformDimensionsChange() ***");
+            ComputeMarginSize();
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Function used as a replacement for LateUpdate to check if the transform or scale of the text object has changed.
+        /// </summary>
+        internal override void InternalUpdate()
+        {
+            // We need to update the SDF scale or possibly regenerate the text object if lossy scale has changed.
+            if (m_havePropertiesChanged == false)
+            {
+                float lossyScaleY = m_rectTransform.lossyScale.y;
+                if (lossyScaleY != m_previousLossyScaleY && m_text != string.Empty && m_text != null)
+                {
+                    float scaleDelta = lossyScaleY / m_previousLossyScaleY;
+
+                    UpdateSDFScale(scaleDelta);
+
+                    m_previousLossyScaleY = lossyScaleY;
+                }
+            }
+
+            // Added to handle legacy animation mode.
+            if (m_isUsingLegacyAnimationComponent)
+            {
+                //if (m_havePropertiesChanged)
+                m_havePropertiesChanged = true;
+                OnPreRenderObject();
+            }
+        }
+
+
+        /// <summary>
+        /// Function called when the text needs to be updated.
+        /// </summary>
+        void OnPreRenderObject()
+        {
+            //Debug.Log("*** OnPreRenderObject() ***");
+
+            if (!m_isAwake || (this.IsActive() == false && m_ignoreActiveState == false)) return;
+
+            // Debug Variables
+            loopCountA = 0;
+            //loopCountB = 0;
+            //loopCountC = 0;
+            //loopCountD = 0;
+            //loopCountE = 0;
+
+            if (m_havePropertiesChanged || m_isLayoutDirty)
+            {
+                //Debug.Log("Properties have changed!"); // Assigned Material is:" + m_sharedMaterial); // New Text is: " + m_text + ".");
+
+                if (isMaskUpdateRequired)
+                {
+                    UpdateMask();
+                    isMaskUpdateRequired = false;
+                }
+
+                // Update mesh padding if necessary.
+                if (checkPaddingRequired)
+                    UpdateMeshPadding();
+
+                // Reparse the text if the input has changed or text was truncated.
+                if (m_isInputParsingRequired || m_isTextTruncated)
+                    ParseInputText();
+
+                // Reset Font min / max used with Auto-sizing
+                if (m_enableAutoSizing)
+                    m_fontSize = Mathf.Clamp(m_fontSizeBase, m_fontSizeMin, m_fontSizeMax);
+
+                m_maxFontSize = m_fontSizeMax;
+                m_minFontSize = m_fontSizeMin;
+                m_lineSpacingDelta = 0;
+                m_charWidthAdjDelta = 0;
+                //m_recursiveCount = 0;
+
+                m_isCharacterWrappingEnabled = false;
+                m_isTextTruncated = false;
+
+                m_havePropertiesChanged = false;
+                m_isLayoutDirty = false;
+                m_ignoreActiveState = false;
+
+                GenerateTextMesh();
+            }
+        }
+
+
+        /// <summary>
+        /// This is the main function that is responsible for creating / displaying the text.
+        /// </summary>
+        protected override void GenerateTextMesh()
+        {
+            //Debug.Log("***** GenerateTextMesh() *****"); // ***** Frame: " + Time.frameCount); // + ". Point Size: " + m_fontSize + ". Margins are (W) " + m_marginWidth + "  (H) " + m_marginHeight); // ". Iteration Count: " + loopCountA + ".  Min: " + m_minFontSize + "  Max: " + m_maxFontSize + "  Delta: " + (m_maxFontSize - m_minFontSize) + "  Font size is " + m_fontSize); //called for Object with ID " + GetInstanceID()); // Assigned Material is " + m_uiRenderer.GetMaterial().name); // IncludeForMasking " + this.m_IncludeForMasking); // and text is " + m_text);
+
+            // Early exit if no font asset was assigned. This should not be needed since LiberationSans SDF will be assigned by default.
+            if (m_fontAsset == null || m_fontAsset.characterLookupTable == null)
+            {
+                Debug.LogWarning("Can't Generate Mesh! No Font Asset has been assigned to Object ID: " + this.GetInstanceID());
+                return;
+            }
+
+            // Clear TextInfo
+            if (m_textInfo != null)
+                m_textInfo.Clear();
+
+            // Early exit if we don't have any Text to generate.
+            if (m_TextParsingBuffer == null || m_TextParsingBuffer.Length == 0 || m_TextParsingBuffer[0].unicode == (char)0)
+            {
+                // Clear mesh and upload changes to the mesh.
+                ClearMesh(true);
+
+                m_preferredWidth = 0;
+                m_preferredHeight = 0;
+
+                // Event indicating the text has been regenerated.
+                TMPro_EventManager.ON_TEXT_CHANGED(this);
+
+                return;
+            }
+
+            m_currentFontAsset = m_fontAsset;
+            m_currentMaterial = m_sharedMaterial;
+            m_currentMaterialIndex = 0;
+            m_materialReferenceStack.SetDefault(new MaterialReference(m_currentMaterialIndex, m_currentFontAsset, null, m_currentMaterial, m_padding));
+
+            m_currentSpriteAsset = m_spriteAsset;
+
+            // Stop  all Sprite Animations
+            if (m_spriteAnimator != null)
+                m_spriteAnimator.StopAllAnimations();
+
+            // Total character count is computed when the text is parsed.
+            int totalCharacterCount = m_totalCharacterCount;
+
+            // Calculate the scale of the font based on selected font size and sampling point size.
+            // baseScale is calculated using the font asset assigned to the text object.
+            float baseScale = m_fontScale = (m_fontSize / m_fontAsset.faceInfo.pointSize * m_fontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+            float currentElementScale = baseScale;
+            m_fontScaleMultiplier = 1;
+
+            m_currentFontSize = m_fontSize;
+            m_sizeStack.SetDefault(m_currentFontSize);
+            float fontSizeDelta = 0;
+
+            int charCode = 0; // Holds the character code of the currently being processed character.
+
+            m_FontStyleInternal = m_fontStyle; // Set the default style.
+            m_FontWeightInternal = (m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold ? FontWeight.Bold : m_fontWeight;
+            m_FontWeightStack.SetDefault(m_FontWeightInternal);
+            m_fontStyleStack.Clear();
+
+            m_lineJustification = m_textAlignment; // Sets the line justification mode to match editor alignment.
+            m_lineJustificationStack.SetDefault(m_lineJustification);
+
+            float padding = 0;
+            float style_padding = 0; // Extra padding required to accommodate Bold style.
+            float bold_xAdvance_multiplier = 1; // Used to increase spacing between character when style is bold.
+
+            m_baselineOffset = 0; // Used by subscript characters.
+            m_baselineOffsetStack.Clear();
+
+            // Underline
+            bool beginUnderline = false;
+            Vector3 underline_start = Vector3.zero; // Used to track where underline starts & ends.
+            Vector3 underline_end = Vector3.zero;
+
+            // Strike-through
+            bool beginStrikethrough = false;
+            Vector3 strikethrough_start = Vector3.zero;
+            Vector3 strikethrough_end = Vector3.zero;
+
+            // Text Highlight
+            bool beginHighlight = false;
+            Vector3 highlight_start = Vector3.zero;
+            Vector3 highlight_end = Vector3.zero;
+
+            m_fontColor32 = m_fontColor;
+            Color32 vertexColor;
+            m_htmlColor = m_fontColor32;
+            m_underlineColor = m_htmlColor;
+            m_strikethroughColor = m_htmlColor;
+
+            m_colorStack.SetDefault(m_htmlColor);
+            m_underlineColorStack.SetDefault(m_htmlColor);
+            m_strikethroughColorStack.SetDefault(m_htmlColor);
+            m_highlightColorStack.SetDefault(m_htmlColor);
+
+            m_colorGradientPreset = null;
+            m_colorGradientStack.SetDefault(null);
+
+            // Clear the Style stack.
+            //m_styleStack.Clear();
+
+            // Clear the Action stack.
+            m_actionStack.Clear();
+
+            m_isFXMatrixSet = false;
+
+            m_lineOffset = 0; // Amount of space between lines (font line spacing + m_linespacing).
+            m_lineHeight = TMP_Math.FLOAT_UNSET;
+            float lineGap = m_currentFontAsset.faceInfo.lineHeight - (m_currentFontAsset.faceInfo.ascentLine - m_currentFontAsset.faceInfo.descentLine);
+
+            m_cSpacing = 0; // Amount of space added between characters as a result of the use of the <cspace> tag.
+            m_monoSpacing = 0;
+            float lineOffsetDelta = 0;
+            m_xAdvance = 0; // Used to track the position of each character.
+
+            tag_LineIndent = 0; // Used for indentation of text.
+            tag_Indent = 0;
+            m_indentStack.SetDefault(0);
+            tag_NoParsing = false;
+            //m_isIgnoringAlignment = false;
+
+            m_characterCount = 0; // Total characters in the char[]
+
+            // Tracking of line information
+            m_firstCharacterOfLine = 0;
+            m_lastCharacterOfLine = 0;
+            m_firstVisibleCharacterOfLine = 0;
+            m_lastVisibleCharacterOfLine = 0;
+            m_maxLineAscender = k_LargeNegativeFloat;
+            m_maxLineDescender = k_LargePositiveFloat;
+            m_lineNumber = 0;
+            m_lineVisibleCharacterCount = 0;
+            bool isStartOfNewLine = true;
+            m_firstOverflowCharacterIndex = -1;
+
+            m_pageNumber = 0;
+            int pageToDisplay = Mathf.Clamp(m_pageToDisplay - 1, 0, m_textInfo.pageInfo.Length - 1);
+            int previousPageOverflowChar = 0;
+
+            int ellipsisIndex = 0;
+
+            Vector4 margins = m_margin;
+            float marginWidth = m_marginWidth;
+            float marginHeight = m_marginHeight;
+            m_marginLeft = 0;
+            m_marginRight = 0;
+            m_width = -1;
+            float width = marginWidth + 0.0001f - m_marginLeft - m_marginRight;
+
+            // Need to initialize these Extents structures
+            m_meshExtents.min = k_LargePositiveVector2;
+            m_meshExtents.max = k_LargeNegativeVector2;
+
+            // Initialize lineInfo
+            m_textInfo.ClearLineInfo();
+
+            // Tracking of the highest Ascender
+            m_maxCapHeight = 0;
+            m_maxAscender = 0;
+            m_maxDescender = 0;
+            float pageAscender = 0;
+            float maxVisibleDescender = 0;
+            bool isMaxVisibleDescenderSet = false;
+            m_isNewPage = false;
+
+            // Initialize struct to track states of word wrapping
+            bool isFirstWord = true;
+            m_isNonBreakingSpace = false;
+            bool ignoreNonBreakingSpace = false;
+            bool isLastBreakingChar = false;
+            float linebreakingWidth = 0;
+            int wrappingIndex = 0;
+
+            // Save character and line state before we begin layout.
+            SaveWordWrappingState(ref m_SavedWordWrapState, -1, -1);
+            SaveWordWrappingState(ref m_SavedLineState, -1, -1);
+
+            loopCountA += 1;
+
+            // Parse through Character buffer to read HTML tags and begin creating mesh.
+            for (int i = 0; i < m_TextParsingBuffer.Length && m_TextParsingBuffer[i].unicode != 0; i++)
+            {
+                charCode = m_TextParsingBuffer[i].unicode;
+
+                // Parse Rich Text Tag
+                #region Parse Rich Text Tag
+                if (m_isRichText && charCode == 60)  // '<'
+                {
+                    m_isParsingText = true;
+                    m_textElementType = TMP_TextElementType.Character;
+                    int endTagIndex;
+
+                    // Check if Tag is valid. If valid, skip to the end of the validated tag.
+                    if (ValidateHtmlTag(m_TextParsingBuffer, i + 1, out endTagIndex))
+                    {
+                        i = endTagIndex;
+
+                        // Continue to next character or handle the sprite element
+                        if (m_textElementType == TMP_TextElementType.Character)
+                            continue;
+                    }
+                }
+                else
+                {
+                    m_textElementType = m_textInfo.characterInfo[m_characterCount].elementType;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+                    m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                }
+                #endregion End Parse Rich Text Tag
+
+                int prev_MaterialIndex = m_currentMaterialIndex;
+                bool isUsingAltTypeface = m_textInfo.characterInfo[m_characterCount].isUsingAlternateTypeface;
+
+                m_isParsingText = false;
+
+                // When using Linked text, mark character as ignored and skip to next character.
+                if (m_characterCount < m_firstVisibleCharacter)
+                {
+                    m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                    m_textInfo.characterInfo[m_characterCount].character = (char)0x200B;
+                    m_characterCount += 1;
+                    continue;
+                }
+
+                // Handle Font Styles like LowerCase, UpperCase and SmallCaps.
+                #region Handling of LowerCase, UpperCase and SmallCaps Font Styles
+
+                float smallCapsMultiplier = 1.0f;
+
+                if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    if ((m_FontStyleInternal & FontStyles.UpperCase) == FontStyles.UpperCase)
+                    {
+                        // If this character is lowercase, switch to uppercase.
+                        if (char.IsLower((char)charCode))
+                            charCode = char.ToUpper((char)charCode);
+
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.LowerCase) == FontStyles.LowerCase)
+                    {
+                        // If this character is uppercase, switch to lowercase.
+                        if (char.IsUpper((char)charCode))
+                            charCode = char.ToLower((char)charCode);
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.SmallCaps) == FontStyles.SmallCaps)
+                    {
+                        if (char.IsLower((char)charCode))
+                        {
+                            smallCapsMultiplier = 0.8f;
+                            charCode = char.ToUpper((char)charCode);
+                        }
+                    }
+                }
+                #endregion
+
+
+                // Look up Character Data from Dictionary and cache it.
+                #region Look up Character Data
+                if (m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    // If a sprite is used as a fallback then get a reference to it and set the color to white.
+                    m_currentSpriteAsset = m_textInfo.characterInfo[m_characterCount].spriteAsset;
+                    m_spriteIndex = m_textInfo.characterInfo[m_characterCount].spriteIndex;
+
+                    TMP_SpriteCharacter sprite = m_currentSpriteAsset.spriteCharacterTable[m_spriteIndex];
+                    if (sprite == null) continue;
+
+                    // Sprites are assigned in the E000 Private Area + sprite Index
+                    if (charCode == 60)
+                        charCode = 57344 + m_spriteIndex;
+                    else
+                        m_spriteColor = s_colorWhite;
+
+                    // The sprite scale calculations are based on the font asset assigned to the text object.
+                    float spriteScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f));
+                    currentElementScale = m_currentFontAsset.faceInfo.ascentLine / sprite.glyph.metrics.height * sprite.scale * sprite.glyph.scale * spriteScale;
+
+                    m_cached_TextElement = sprite;
+
+                    m_textInfo.characterInfo[m_characterCount].elementType = TMP_TextElementType.Sprite;
+                    m_textInfo.characterInfo[m_characterCount].scale = spriteScale;
+                    m_textInfo.characterInfo[m_characterCount].spriteAsset = m_currentSpriteAsset;
+                    m_textInfo.characterInfo[m_characterCount].fontAsset = m_currentFontAsset;
+                    m_textInfo.characterInfo[m_characterCount].materialReferenceIndex = m_currentMaterialIndex;
+
+                    m_currentMaterialIndex = prev_MaterialIndex;
+
+                    padding = 0;
+                }
+                else if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    m_cached_TextElement = m_textInfo.characterInfo[m_characterCount].textElement;
+                    if (m_cached_TextElement == null) continue;
+
+                    m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                    m_currentMaterial = m_textInfo.characterInfo[m_characterCount].material;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+
+                    // Re-calculate font scale as the font asset may have changed.
+                    m_fontScale = m_currentFontSize * smallCapsMultiplier / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale * (m_isOrthographic ? 1 : 0.1f);
+
+                    currentElementScale = m_fontScale * m_fontScaleMultiplier * m_cached_TextElement.scale * m_cached_TextElement.glyph.scale;
+
+                    m_textInfo.characterInfo[m_characterCount].elementType = TMP_TextElementType.Character;
+                    m_textInfo.characterInfo[m_characterCount].scale = currentElementScale;
+
+                    padding = m_currentMaterialIndex == 0 ? m_padding : m_subTextObjects[m_currentMaterialIndex].padding;
+                }
+                #endregion
+
+
+                // Handle Soft Hyphen
+                #region Handle Soft Hyphen
+                float old_scale = currentElementScale;
+                if (charCode == 0xAD)
+                {
+                    currentElementScale = 0;
+                }
+                #endregion
+
+
+                // Store some of the text object's information
+                m_textInfo.characterInfo[m_characterCount].character = (char)charCode;
+                m_textInfo.characterInfo[m_characterCount].pointSize = m_currentFontSize;
+                m_textInfo.characterInfo[m_characterCount].color = m_htmlColor;
+                m_textInfo.characterInfo[m_characterCount].underlineColor = m_underlineColor;
+                m_textInfo.characterInfo[m_characterCount].strikethroughColor = m_strikethroughColor;
+                m_textInfo.characterInfo[m_characterCount].highlightColor = m_highlightColor;
+                m_textInfo.characterInfo[m_characterCount].style = m_FontStyleInternal;
+                //m_textInfo.characterInfo[m_characterCount].index = m_TextParsingBuffer[i].stringIndex;
+                //m_textInfo.characterInfo[m_characterCount].isIgnoringAlignment = m_isIgnoringAlignment;
+
+
+                // Handle Kerning if Enabled.
+                #region Handle Kerning
+                TMP_GlyphValueRecord glyphAdjustments = new TMP_GlyphValueRecord();
+                float characterSpacingAdjustment = m_characterSpacing;
+                if (m_enableKerning)
+                {
+                    TMP_GlyphPairAdjustmentRecord adjustmentPair;
+
+                    if (m_characterCount < totalCharacterCount - 1)
+                    {
+                        uint firstGlyphIndex = m_cached_TextElement.glyphIndex;
+                        uint secondGlyphIndex = m_textInfo.characterInfo[m_characterCount + 1].textElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments = adjustmentPair.firstAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+
+                    if (m_characterCount >= 1)
+                    {
+                        uint firstGlyphIndex = m_textInfo.characterInfo[m_characterCount - 1].textElement.glyphIndex;
+                        uint secondGlyphIndex = m_cached_TextElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments += adjustmentPair.secondAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+                }
+                #endregion
+
+
+                // Initial Implementation for RTL support.
+                #region Handle Right-to-Left
+                if (m_isRightToLeft)
+                {
+                    m_xAdvance -= ((m_cached_TextElement.glyph.metrics.horizontalAdvance * bold_xAdvance_multiplier + characterSpacingAdjustment + m_wordSpacing + m_currentFontAsset.normalSpacingOffset) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance -= m_wordSpacing * currentElementScale;
+                }
+                #endregion
+
+
+                // Handle Mono Spacing
+                #region Handle Mono Spacing
+                float monoAdvance = 0;
+                if (m_monoSpacing != 0)
+                {
+                    monoAdvance = (m_monoSpacing / 2 - (m_cached_TextElement.glyph.metrics.width / 2 + m_cached_TextElement.glyph.metrics.horizontalBearingX) * currentElementScale) * (1 - m_charWidthAdjDelta);
+                    m_xAdvance += monoAdvance;
+                }
+                #endregion
+
+
+                // Set Padding based on selected font style
+                #region Handle Style Padding
+                if (m_textElementType == TMP_TextElementType.Character && !isUsingAltTypeface && (/*(m_fontStyle & FontStyles.Bold) == FontStyles.Bold ||*/ (m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold)) // Checks for any combination of Bold Style.
+                {
+                    if (m_currentMaterial.HasProperty(ShaderUtilities.ID_GradientScale))
+                    {
+                        float gradientScale = m_currentMaterial.GetFloat(ShaderUtilities.ID_GradientScale);
+                        style_padding = m_currentFontAsset.boldStyle / 4.0f * gradientScale * m_currentMaterial.GetFloat(ShaderUtilities.ID_ScaleRatio_A);
+
+                        // Clamp overall padding to Gradient Scale size.
+                        if (style_padding + padding > gradientScale)
+                            padding = gradientScale - style_padding;
+                    }
+                    else
+                        style_padding = 0;
+
+                    bold_xAdvance_multiplier = 1 + m_currentFontAsset.boldSpacing * 0.01f;
+                }
+                else
+                {
+                    if (m_currentMaterial.HasProperty(ShaderUtilities.ID_GradientScale))
+                    {
+                        float gradientScale = m_currentMaterial.GetFloat(ShaderUtilities.ID_GradientScale);
+                        style_padding = m_currentFontAsset.normalStyle / 4.0f * gradientScale * m_currentMaterial.GetFloat(ShaderUtilities.ID_ScaleRatio_A);
+
+                        // Clamp overall padding to Gradient Scale size.
+                        if (style_padding + padding > gradientScale)
+                            padding = gradientScale - style_padding;
+                    }
+                    else
+                        style_padding = 0;
+
+                    bold_xAdvance_multiplier = 1.0f;
+                }
+                #endregion Handle Style Padding
+
+
+                // Determine the position of the vertices of the Character or Sprite.
+                #region Calculate Vertices Position
+                float fontBaseLineOffset = m_currentFontAsset.faceInfo.baseline * m_fontScale * m_fontScaleMultiplier * m_currentFontAsset.faceInfo.scale;
+                Vector3 top_left;
+                top_left.x = m_xAdvance + ((m_cached_TextElement.glyph.metrics.horizontalBearingX - padding - style_padding + glyphAdjustments.xPlacement) * currentElementScale * (1 - m_charWidthAdjDelta));
+                top_left.y = fontBaseLineOffset + (m_cached_TextElement.glyph.metrics.horizontalBearingY + padding + glyphAdjustments.yPlacement) * currentElementScale - m_lineOffset + m_baselineOffset;
+                top_left.z = 0;
+
+                Vector3 bottom_left;
+                bottom_left.x = top_left.x;
+                bottom_left.y = top_left.y - ((m_cached_TextElement.glyph.metrics.height + padding * 2) * currentElementScale);
+                bottom_left.z = 0;
+
+                Vector3 top_right;
+                top_right.x = bottom_left.x + ((m_cached_TextElement.glyph.metrics.width + padding * 2 + style_padding * 2) * currentElementScale * (1 - m_charWidthAdjDelta));
+                top_right.y = top_left.y;
+                top_right.z = 0;
+
+                Vector3 bottom_right;
+                bottom_right.x = top_right.x;
+                bottom_right.y = bottom_left.y;
+                bottom_right.z = 0;
+                #endregion
+
+
+                // Check if we need to Shear the rectangles for Italic styles
+                #region Handle Italic & Shearing
+                if (m_textElementType == TMP_TextElementType.Character && !isUsingAltTypeface && (/*(m_fontStyle & FontStyles.Italic) == FontStyles.Italic ||*/ (m_FontStyleInternal & FontStyles.Italic) == FontStyles.Italic))
+                {
+                    // Shift Top vertices forward by half (Shear Value * height of character) and Bottom vertices back by same amount. 
+                    float shear_value = m_currentFontAsset.italicStyle * 0.01f;
+                    Vector3 topShear = new Vector3(shear_value * ((m_cached_TextElement.glyph.metrics.horizontalBearingY + padding + style_padding) * currentElementScale), 0, 0);
+                    Vector3 bottomShear = new Vector3(shear_value * (((m_cached_TextElement.glyph.metrics.horizontalBearingY - m_cached_TextElement.glyph.metrics.height - padding - style_padding)) * currentElementScale), 0, 0);
+
+                    top_left = top_left + topShear;
+                    bottom_left = bottom_left + bottomShear;
+                    top_right = top_right + topShear;
+                    bottom_right = bottom_right + bottomShear;
+                }
+                #endregion Handle Italics & Shearing
+
+
+                // Handle Character Rotation
+                #region Handle Character Rotation
+                if (m_isFXMatrixSet)
+                {
+                    // Apply scale matrix when simulating Condensed text.
+                    if (m_FXMatrix.lossyScale.x != 1)
+                    {
+                        //top_left = m_FXMatrix.MultiplyPoint3x4(top_left);
+                        //bottom_left = m_FXMatrix.MultiplyPoint3x4(bottom_left);
+                        //top_right = m_FXMatrix.MultiplyPoint3x4(top_right);
+                        //bottom_right = m_FXMatrix.MultiplyPoint3x4(bottom_right);
+                    }
+
+                    Vector3 positionOffset = (top_right + bottom_left) / 2;
+
+                    top_left = m_FXMatrix.MultiplyPoint3x4(top_left - positionOffset) + positionOffset;
+                    bottom_left = m_FXMatrix.MultiplyPoint3x4(bottom_left - positionOffset) + positionOffset;
+                    top_right = m_FXMatrix.MultiplyPoint3x4(top_right - positionOffset) + positionOffset;
+                    bottom_right = m_FXMatrix.MultiplyPoint3x4(bottom_right - positionOffset) + positionOffset;
+                }
+                #endregion
+
+
+                // Store vertex information for the character or sprite.
+                m_textInfo.characterInfo[m_characterCount].bottomLeft = bottom_left;
+                m_textInfo.characterInfo[m_characterCount].topLeft = top_left;
+                m_textInfo.characterInfo[m_characterCount].topRight = top_right;
+                m_textInfo.characterInfo[m_characterCount].bottomRight = bottom_right;
+
+                m_textInfo.characterInfo[m_characterCount].origin = m_xAdvance;
+                m_textInfo.characterInfo[m_characterCount].baseLine = fontBaseLineOffset - m_lineOffset + m_baselineOffset;
+                m_textInfo.characterInfo[m_characterCount].aspectRatio = (top_right.x - bottom_left.x) / (top_left.y - bottom_left.y);
+
+
+                // Compute and save text element Ascender and maximum line Ascender.
+                float elementAscender = m_currentFontAsset.faceInfo.ascentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier : m_textInfo.characterInfo[m_characterCount].scale) + m_baselineOffset;
+                m_textInfo.characterInfo[m_characterCount].ascender = elementAscender - m_lineOffset;
+                m_maxLineAscender = elementAscender > m_maxLineAscender ? elementAscender : m_maxLineAscender;
+
+                // Compute and save text element Descender and maximum line Descender.
+                float elementDescender = m_currentFontAsset.faceInfo.descentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier : m_textInfo.characterInfo[m_characterCount].scale) + m_baselineOffset;
+                float elementDescenderII = m_textInfo.characterInfo[m_characterCount].descender = elementDescender - m_lineOffset;
+                m_maxLineDescender = elementDescender < m_maxLineDescender ? elementDescender : m_maxLineDescender;
+
+                // Adjust maxLineAscender and maxLineDescender if style is superscript or subscript
+                if ((m_FontStyleInternal & FontStyles.Subscript) == FontStyles.Subscript || (m_FontStyleInternal & FontStyles.Superscript) == FontStyles.Superscript)
+                {
+                    float baseAscender = (elementAscender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementAscender = m_maxLineAscender;
+                    m_maxLineAscender = baseAscender > m_maxLineAscender ? baseAscender : m_maxLineAscender;
+
+                    float baseDescender = (elementDescender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementDescender = m_maxLineDescender;
+                    m_maxLineDescender = baseDescender < m_maxLineDescender ? baseDescender : m_maxLineDescender;
+                }
+
+                if (m_lineNumber == 0 || m_isNewPage)
+                {
+                    m_maxAscender = m_maxAscender > elementAscender ? m_maxAscender : elementAscender;
+                    m_maxCapHeight = Mathf.Max(m_maxCapHeight, m_currentFontAsset.faceInfo.capLine * currentElementScale / smallCapsMultiplier);
+                }
+                if (m_lineOffset == 0) pageAscender = pageAscender > elementAscender ? pageAscender : elementAscender;
+
+
+                // Set Characters to not visible by default.
+                m_textInfo.characterInfo[m_characterCount].isVisible = false;
+
+                // Setup Mesh for visible text elements. ie. not a SPACE / LINEFEED / CARRIAGE RETURN.
+                #region Handle Visible Characters
+                if (charCode == 9 || charCode == 0xA0 || charCode == 0x2007 || (!char.IsWhiteSpace((char)charCode) && charCode != 0x200B) || m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    m_textInfo.characterInfo[m_characterCount].isVisible = true;
+
+                    #region Experimental Margin Shaper
+                    //Vector2 shapedMargins;
+                    //if (marginShaper)
+                    //{
+                    //    shapedMargins = m_marginShaper.GetShapedMargins(m_textInfo.characterInfo[m_characterCount].baseLine);
+                    //    if (shapedMargins.x < margins.x)
+                    //    {
+                    //        shapedMargins.x = m_marginLeft;
+                    //    }
+                    //    else
+                    //    {
+                    //        shapedMargins.x += m_marginLeft - margins.x;
+                    //    }
+                    //    if (shapedMargins.y < margins.z)
+                    //    {
+                    //        shapedMargins.y = m_marginRight;
+                    //    }
+                    //    else
+                    //    {
+                    //        shapedMargins.y += m_marginRight - margins.z;
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    shapedMargins.x = m_marginLeft;
+                    //    shapedMargins.y = m_marginRight;
+                    //}
+                    //width = marginWidth + 0.0001f - shapedMargins.x - shapedMargins.y;
+                    //if (m_width != -1 && m_width < width)
+                    //{
+                    //    width = m_width;
+                    //}
+                    //m_textInfo.lineInfo[m_lineNumber].marginLeft = shapedMargins.x;
+                    #endregion
+
+                    width = m_width != -1 ? Mathf.Min(marginWidth + 0.0001f - m_marginLeft - m_marginRight, m_width) : marginWidth + 0.0001f - m_marginLeft - m_marginRight;
+                    m_textInfo.lineInfo[m_lineNumber].marginLeft = m_marginLeft;
+
+                    bool isJustifiedOrFlush = ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush || ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Justified) == _HorizontalAlignmentOptions.Justified;
+
+                    // Calculate the line breaking width of the text.
+                    linebreakingWidth = Mathf.Abs(m_xAdvance) + (!m_isRightToLeft ? m_cached_TextElement.glyph.metrics.horizontalAdvance : 0) * (1 - m_charWidthAdjDelta) * (charCode != 0xAD ? currentElementScale : old_scale);
+
+                    // Check if Character exceeds the width of the Text Container
+                    #region Handle Line Breaking, Text Auto-Sizing and Horizontal Overflow
+                    if (linebreakingWidth > width * (isJustifiedOrFlush ? 1.05f : 1.0f))
+                    {
+                        ellipsisIndex = m_characterCount - 1; // Last safely rendered character
+
+                        // Word Wrapping
+                        #region Handle Word Wrapping
+                        if (enableWordWrapping && m_characterCount != m_firstCharacterOfLine)
+                        {
+                            // Check if word wrapping is still possible
+                            #region Line Breaking Check
+                            if (wrappingIndex == m_SavedWordWrapState.previous_WordBreak || isFirstWord)
+                            {
+                                // Word wrapping is no longer possible. Shrink size of text if auto-sizing is enabled.
+                                if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                                {
+                                    // Handle Character Width Adjustments
+                                    #region Character Width Adjustments
+                                    if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                                    {
+                                        loopCountA = 0;
+                                        m_charWidthAdjDelta += 0.01f;
+                                        GenerateTextMesh();
+                                        return;
+                                    }
+                                    #endregion
+
+                                    // Adjust Point Size
+                                    m_maxFontSize = m_fontSize;
+
+                                    m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                                    m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                                    if (loopCountA > 20) return; // Added to debug
+                                    GenerateTextMesh();
+                                    return;
+                                }
+
+                                // Word wrapping is no longer possible, now breaking up individual words.
+                                if (m_isCharacterWrappingEnabled == false)
+                                {
+                                    if (ignoreNonBreakingSpace == false)
+                                        ignoreNonBreakingSpace = true;
+                                    else
+                                        m_isCharacterWrappingEnabled = true;
+                                }
+                                else
+                                    isLastBreakingChar = true;
+
+                                //m_recursiveCount += 1;
+                                //if (m_recursiveCount > 20)
+                                //{
+                                //    Debug.Log("Recursive count exceeded!");
+                                //    continue;
+                                //}
+                            }
+                            #endregion
+
+                            // Restore to previously stored state of last valid (space character or linefeed)
+                            i = RestoreWordWrappingState(ref m_SavedWordWrapState);
+                            wrappingIndex = i;  // Used to detect when line length can no longer be reduced.
+
+                            // Handling for Soft Hyphen
+                            if (m_TextParsingBuffer[i].unicode == 0xAD) // && !m_isCharacterWrappingEnabled) // && ellipsisIndex != i && !m_isCharacterWrappingEnabled)
+                            {
+                                m_isTextTruncated = true;
+                                m_TextParsingBuffer[i].unicode = 0x2D;
+                                GenerateTextMesh();
+                                return;
+                            }
+
+                            //Debug.Log("Last Visible Character of line # " + m_lineNumber + " is [" + m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].character + " Character Count: " + m_characterCount + " Last visible: " + m_lastVisibleCharacterOfLine);
+
+                            // Check if Line Spacing of previous line needs to be adjusted.
+                            if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                            {
+                                //Debug.Log("(Line Break - Adjusting Line Spacing on line #" + m_lineNumber);
+                                float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                                AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                                m_lineOffset += offsetDelta;
+                                m_SavedWordWrapState.lineOffset = m_lineOffset;
+                                m_SavedWordWrapState.previousLineAscender = m_maxLineAscender;
+
+                                // TODO - Add check for character exceeding vertical bounds
+                            }
+                            m_isNewPage = false;
+
+                            // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                            float lineAscender = m_maxLineAscender - m_lineOffset;
+                            float lineDescender = m_maxLineDescender - m_lineOffset;
+
+
+                            // Update maxDescender and maxVisibleDescender
+                            m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+                            if (!isMaxVisibleDescenderSet)
+                                maxVisibleDescender = m_maxDescender;
+
+                            if (m_useMaxVisibleDescender && (m_characterCount >= m_maxVisibleCharacters || m_lineNumber >= m_maxVisibleLines))
+                                isMaxVisibleDescenderSet = true;
+
+                            // Track & Store lineInfo for the new line
+                            m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex = m_firstCharacterOfLine;
+                            m_textInfo.lineInfo[m_lineNumber].firstVisibleCharacterIndex = m_firstVisibleCharacterOfLine = m_firstCharacterOfLine > m_firstVisibleCharacterOfLine ? m_firstCharacterOfLine : m_firstVisibleCharacterOfLine;
+                            m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex = m_lastCharacterOfLine = m_characterCount - 1 > 0 ? m_characterCount - 1 : 0;
+                            m_textInfo.lineInfo[m_lineNumber].lastVisibleCharacterIndex = m_lastVisibleCharacterOfLine = m_lastVisibleCharacterOfLine < m_firstVisibleCharacterOfLine ? m_firstVisibleCharacterOfLine : m_lastVisibleCharacterOfLine;
+
+                            m_textInfo.lineInfo[m_lineNumber].characterCount = m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex - m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex + 1;
+                            m_textInfo.lineInfo[m_lineNumber].visibleCharacterCount = m_lineVisibleCharacterCount;
+                            m_textInfo.lineInfo[m_lineNumber].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_firstVisibleCharacterOfLine].bottomLeft.x, lineDescender);
+                            m_textInfo.lineInfo[m_lineNumber].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].topRight.x, lineAscender);
+                            m_textInfo.lineInfo[m_lineNumber].length = m_textInfo.lineInfo[m_lineNumber].lineExtents.max.x;
+                            m_textInfo.lineInfo[m_lineNumber].width = width;
+
+                            //m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+
+                            m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+
+                            m_textInfo.lineInfo[m_lineNumber].baseline = 0 - m_lineOffset;
+                            m_textInfo.lineInfo[m_lineNumber].ascender = lineAscender;
+                            m_textInfo.lineInfo[m_lineNumber].descender = lineDescender;
+                            m_textInfo.lineInfo[m_lineNumber].lineHeight = lineAscender - lineDescender + lineGap * baseScale;
+
+                            m_firstCharacterOfLine = m_characterCount; // Store first character of the next line.
+                            m_lineVisibleCharacterCount = 0;
+
+                            // Store the state of the line before starting on the new line.
+                            SaveWordWrappingState(ref m_SavedLineState, i, m_characterCount - 1);
+
+                            m_lineNumber += 1;
+                            isStartOfNewLine = true;
+                            isFirstWord = true;
+
+                            // Check to make sure Array is large enough to hold a new line.
+                            if (m_lineNumber >= m_textInfo.lineInfo.Length)
+                                ResizeLineExtents(m_lineNumber);
+
+                            // Apply Line Spacing based on scale of the last character of the line.
+                            if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                            {
+                                float ascender = m_textInfo.characterInfo[m_characterCount].ascender - m_textInfo.characterInfo[m_characterCount].baseLine;
+                                lineOffsetDelta = 0 - m_maxLineDescender + ascender + (lineGap + m_lineSpacing + m_lineSpacingDelta) * baseScale;
+                                m_lineOffset += lineOffsetDelta;
+
+                                m_startOfLineAscender = ascender;
+                            }
+                            else
+                                m_lineOffset += m_lineHeight + m_lineSpacing * baseScale;
+
+                            m_maxLineAscender = k_LargeNegativeFloat;
+                            m_maxLineDescender = k_LargePositiveFloat;
+
+                            m_xAdvance = 0 + tag_Indent;
+
+                            continue;
+                        }
+                        #endregion End Word Wrapping
+
+
+                        // Text Auto-Sizing (text exceeding Width of container. 
+                        #region Handle Text Auto-Sizing
+                        if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                        {
+                            // Handle Character Width Adjustments
+                            #region Character Width Adjustments
+                            if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                            {
+                                loopCountA = 0;
+                                m_charWidthAdjDelta += 0.01f;
+                                GenerateTextMesh();
+                                return;
+                            }
+                            #endregion
+
+                            // Adjust Point Size
+                            m_maxFontSize = m_fontSize;
+
+                            m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                            m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                            //m_recursiveCount = 0;
+                            if (loopCountA > 20) return; // Added to debug 
+                            GenerateTextMesh();
+                            return;
+                        }
+                        #endregion End Text Auto-Sizing
+
+
+                        // Handle Text Overflow
+                        #region Handle Text Overflow
+                        switch (m_overflowMode)
+                        {
+                            case TextOverflowModes.Overflow:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                break;
+                            case TextOverflowModes.Ellipsis:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                m_isTextTruncated = true;
+
+                                if (m_characterCount < 1)
+                                {
+                                    m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                                    //m_visibleCharacterCount = 0;
+                                    break;
+                                }
+
+                                m_TextParsingBuffer[i - 1].unicode = 8230;
+                                m_TextParsingBuffer[i].unicode = (char)0;
+
+                                if (m_cached_Ellipsis_Character != null)
+                                {
+                                    m_textInfo.characterInfo[ellipsisIndex].character = (char)8230;
+                                    m_textInfo.characterInfo[ellipsisIndex].textElement = m_cached_Ellipsis_Character;
+                                    m_textInfo.characterInfo[ellipsisIndex].fontAsset = m_materialReferences[0].fontAsset;
+                                    m_textInfo.characterInfo[ellipsisIndex].material = m_materialReferences[0].material;
+                                    m_textInfo.characterInfo[ellipsisIndex].materialReferenceIndex = 0;
+                                }
+                                else
+                                {
+                                    Debug.LogWarning("Unable to use Ellipsis character since it wasn't found in the current Font Asset [" + m_fontAsset.name + "]. Consider regenerating this font asset to include the Ellipsis character (u+2026).\nNote: Warnings can be disabled in the TMP Settings file.", this);
+                                }
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                return;
+                            //case TextOverflowModes.Masking:
+                            //    if (!m_isMaskingEnabled)
+                            //        EnableMasking();
+                            //    break;
+                            //case TextOverflowModes.ScrollRect:
+                            //    if (!m_isMaskingEnabled)
+                            //        EnableMasking();
+                            //    break;
+                            case TextOverflowModes.Truncate:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                                break;
+                            case TextOverflowModes.Linked:
+                                //m_textInfo.characterInfo[m_characterCount].isVisible = false;
+
+                                //if (m_linkedTextComponent != null)
+                                //{
+                                //    m_linkedTextComponent.text = text;
+                                //    m_linkedTextComponent.firstVisibleCharacter = m_characterCount;
+                                //    m_linkedTextComponent.ForceMeshUpdate();
+                                //}
+                                break;
+                        }
+                        #endregion End Text Overflow
+
+                    }
+                    #endregion End Check for Characters Exceeding Width of Text Container
+
+
+                    // Special handling of characters that are not ignored at the end of a line.
+                    if (charCode == 9 || charCode == 0xA0 || charCode == 0x2007)
+                    {
+                        m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                        m_lastVisibleCharacterOfLine = m_characterCount;
+                        m_textInfo.lineInfo[m_lineNumber].spaceCount += 1;
+                        m_textInfo.spaceCount += 1;
+
+                        if (charCode == 0xA0)
+                            m_textInfo.lineInfo[m_lineNumber].controlCharacterCount += 1;
+                    }
+                    else
+                    {
+                        // Determine Vertex Color
+                        if (m_overrideHtmlColors)
+                            vertexColor = m_fontColor32;
+                        else
+                            vertexColor = m_htmlColor;
+
+                        // Store Character & Sprite Vertex Information
+                        if (m_textElementType == TMP_TextElementType.Character)
+                        {
+                            // Save Character Vertex Data
+                            SaveGlyphVertexInfo(padding, style_padding, vertexColor);
+                        }
+                        else if (m_textElementType == TMP_TextElementType.Sprite)
+                        {
+                            SaveSpriteVertexInfo(vertexColor);
+                        }
+                    }
+
+
+                    // Increase visible count for Characters.
+                    if (m_textInfo.characterInfo[m_characterCount].isVisible && charCode != 0xAD)
+                    {
+                        if (isStartOfNewLine) { isStartOfNewLine = false; m_firstVisibleCharacterOfLine = m_characterCount; }
+
+                        m_lineVisibleCharacterCount += 1;
+                        m_lastVisibleCharacterOfLine = m_characterCount;
+                    }
+                }
+                else
+                {   // This is a Space, Tab, LineFeed or Carriage Return
+
+                    // Track # of spaces per line which is used for line justification.
+                    if ((charCode == 10 || char.IsSeparator((char)charCode)) && charCode != 0xAD && charCode != 0x200B && charCode != 0x2060)
+                    {
+                        m_textInfo.lineInfo[m_lineNumber].spaceCount += 1;
+                        m_textInfo.spaceCount += 1;
+                    }
+                }
+                #endregion Handle Visible Characters
+
+
+                // Check if Line Spacing of previous line needs to be adjusted.
+                #region Adjust Line Spacing
+                if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                {
+                    //Debug.Log("Inline - Adjusting Line Spacing on line #" + m_lineNumber);
+                    //float gap = 0; // Compute gap.
+
+                    float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                    AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                    elementDescenderII -= offsetDelta;
+                    m_lineOffset += offsetDelta;
+
+                    m_startOfLineAscender += offsetDelta;
+                    m_SavedWordWrapState.lineOffset = m_lineOffset;
+                    m_SavedWordWrapState.previousLineAscender = m_startOfLineAscender;
+                }
+                #endregion
+
+
+                // Store Rectangle positions for each Character.
+                #region Store Character Data
+                m_textInfo.characterInfo[m_characterCount].lineNumber = m_lineNumber;
+                m_textInfo.characterInfo[m_characterCount].pageNumber = m_pageNumber;
+
+                if (charCode != 10 && charCode != 13 && charCode != 8230 || m_textInfo.lineInfo[m_lineNumber].characterCount == 1)
+                    m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+                #endregion Store Character Data
+
+
+                // Check if text Exceeds the vertical bounds of the margin area.
+                #region Check Vertical Bounds & Auto-Sizing
+                if (m_maxAscender - elementDescenderII > marginHeight + 0.0001f)
+                {
+                    // Handle Line spacing adjustments
+                    #region Line Spacing Adjustments
+                    if (m_enableAutoSizing && m_lineSpacingDelta > m_lineSpacingMax && m_lineNumber > 0)
+                    {
+                        loopCountA = 0;
+
+                        m_lineSpacingDelta -= 1;
+                        GenerateTextMesh();
+                        return;
+                    }
+                    #endregion
+
+
+                    // Handle Text Auto-sizing resulting from text exceeding vertical bounds.
+                    #region Text Auto-Sizing (Text greater than vertical bounds)
+                    if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                    {
+                        m_maxFontSize = m_fontSize;
+
+                        m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                        m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                        //m_recursiveCount = 0;
+                        if (loopCountA > 20) return; // Added to debug 
+                        GenerateTextMesh();
+                        return;
+                    }
+                    #endregion Text Auto-Sizing
+
+                    // Set isTextOverflowing and firstOverflowCharacterIndex
+                    if (m_firstOverflowCharacterIndex == -1)
+                        m_firstOverflowCharacterIndex = m_characterCount;
+
+                    // Handle Text Overflow
+                    #region Text Overflow
+                    switch (m_overflowMode)
+                    {
+                        case TextOverflowModes.Overflow:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            break;
+                        case TextOverflowModes.Ellipsis:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index].unicode = 8230;
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index + 1].unicode = (char)0;
+
+                                if (m_cached_Ellipsis_Character != null)
+                                {
+                                    m_textInfo.characterInfo[ellipsisIndex].character = (char)8230;
+                                    m_textInfo.characterInfo[ellipsisIndex].textElement = m_cached_Ellipsis_Character;
+                                    m_textInfo.characterInfo[ellipsisIndex].fontAsset = m_materialReferences[0].fontAsset;
+                                    m_textInfo.characterInfo[ellipsisIndex].material = m_materialReferences[0].material;
+                                    m_textInfo.characterInfo[ellipsisIndex].materialReferenceIndex = 0;
+                                }
+                                else
+                                {
+                                    Debug.LogWarning("Unable to use Ellipsis character since it wasn't found in the current Font Asset [" + m_fontAsset.name + "]. Consider regenerating this font asset to include the Ellipsis character (u+2026).\nNote: Warnings can be disabled in the TMP Settings file.", this);
+                                }
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh(false);
+                                return;
+                            }
+                        //case TextOverflowModes.Masking:
+                        //    if (!m_isMaskingEnabled)
+                        //        EnableMasking();
+                        //    break;
+                        //case TextOverflowModes.ScrollRect:
+                        //    if (!m_isMaskingEnabled)
+                        //        EnableMasking();
+                        //    break;
+                        case TextOverflowModes.Truncate:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            // TODO : Optimize 
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index + 1].unicode = (char)0;
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh(false);
+                                return;
+                            }
+                        case TextOverflowModes.Page:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            // Ignore Page Break, Linefeed or carriage return
+                            if (charCode == 13 || charCode == 10)
+                                break;
+
+                            // Return if the first character doesn't fit.
+                            if (i == 0)
+                            {
+                                ClearMesh();
+                                return;
+                            }
+                            else if (previousPageOverflowChar == i)
+                            {
+                                m_TextParsingBuffer[i].unicode = 0;
+                                m_isTextTruncated = true;
+                            }
+
+                            previousPageOverflowChar = i;
+
+                            // Go back to previous line and re-layout 
+                            i = RestoreWordWrappingState(ref m_SavedLineState);
+
+                            m_isNewPage = true;
+                            m_xAdvance = 0 + tag_Indent;
+                            m_lineOffset = 0;
+                            m_maxAscender = 0;
+                            pageAscender = 0;
+                            m_lineNumber += 1;
+                            m_pageNumber += 1;
+                            continue;
+                        case TextOverflowModes.Linked:
+                            if (m_linkedTextComponent != null)
+                            {
+                                m_linkedTextComponent.text = text;
+                                m_linkedTextComponent.firstVisibleCharacter = m_characterCount;
+                                m_linkedTextComponent.ForceMeshUpdate();
+                            }
+
+                            // Truncate remaining text
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[i].unicode = (char)0;
+
+                                m_totalCharacterCount = m_characterCount;
+
+                                // TODO : Optimize as we should be able to end the layout phase here without having to do another pass.
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh(true);
+                                return;
+                            }
+                    }
+                    #endregion End Text Overflow
+
+                }
+                #endregion Check Vertical Bounds
+
+
+                // Handle xAdvance & Tabulation Stops. Tab stops at every 25% of Font Size.
+                #region XAdvance, Tabulation & Stops
+                if (charCode == 9)
+                {
+                    float tabSize = m_currentFontAsset.faceInfo.tabWidth * m_currentFontAsset.tabSize * currentElementScale;
+                    float tabs = Mathf.Ceil(m_xAdvance / tabSize) * tabSize;
+                    m_xAdvance = tabs > m_xAdvance ? tabs : m_xAdvance + tabSize;
+                }
+                else if (m_monoSpacing != 0)
+                {
+                    m_xAdvance += (m_monoSpacing - monoAdvance + ((characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale) + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+                else if (!m_isRightToLeft)
+                {
+                    float scaleFXMultiplier = 1;
+                    if (m_isFXMatrixSet) scaleFXMultiplier = m_FXMatrix.lossyScale.x;
+
+                    m_xAdvance += ((m_cached_TextElement.glyph.metrics.horizontalAdvance * scaleFXMultiplier * bold_xAdvance_multiplier + characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset + glyphAdjustments.xAdvance) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+                else
+                {
+                    m_xAdvance -= glyphAdjustments.xAdvance * currentElementScale;
+                }
+
+
+                // Store xAdvance information
+                m_textInfo.characterInfo[m_characterCount].xAdvance = m_xAdvance;
+
+                #endregion Tabulation & Stops
+
+
+                // Handle Carriage Return
+                #region Carriage Return
+                if (charCode == 13)
+                {
+                    m_xAdvance = 0 + tag_Indent;
+                }
+                #endregion Carriage Return
+
+
+                // Handle Line Spacing Adjustments + Word Wrapping & special case for last line.
+                #region Check for Line Feed and Last Character
+                if (charCode == 10 || m_characterCount == totalCharacterCount - 1)
+                {
+                    // Check if Line Spacing of previous line needs to be adjusted.
+                    if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                    {
+                        //Debug.Log("Line Feed - Adjusting Line Spacing on line #" + m_lineNumber);
+                        float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                        AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                        elementDescenderII -= offsetDelta;
+                        m_lineOffset += offsetDelta;
+                    }
+                    m_isNewPage = false;
+
+                    // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                    float lineAscender = m_maxLineAscender - m_lineOffset;
+                    float lineDescender = m_maxLineDescender - m_lineOffset;
+
+                    // Update maxDescender and maxVisibleDescender
+                    m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+                    if (!isMaxVisibleDescenderSet)
+                        maxVisibleDescender = m_maxDescender;
+
+                    if (m_useMaxVisibleDescender && (m_characterCount >= m_maxVisibleCharacters || m_lineNumber >= m_maxVisibleLines))
+                        isMaxVisibleDescenderSet = true;
+
+                    // Save Line Information
+                    m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex = m_firstCharacterOfLine;
+                    m_textInfo.lineInfo[m_lineNumber].firstVisibleCharacterIndex = m_firstVisibleCharacterOfLine = m_firstCharacterOfLine > m_firstVisibleCharacterOfLine ? m_firstCharacterOfLine : m_firstVisibleCharacterOfLine;
+                    m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex = m_lastCharacterOfLine = m_characterCount;
+                    m_textInfo.lineInfo[m_lineNumber].lastVisibleCharacterIndex = m_lastVisibleCharacterOfLine = m_lastVisibleCharacterOfLine < m_firstVisibleCharacterOfLine ? m_firstVisibleCharacterOfLine : m_lastVisibleCharacterOfLine;
+
+                    m_textInfo.lineInfo[m_lineNumber].characterCount = m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex - m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex + 1;
+                    m_textInfo.lineInfo[m_lineNumber].visibleCharacterCount = m_lineVisibleCharacterCount;
+                    m_textInfo.lineInfo[m_lineNumber].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_firstVisibleCharacterOfLine].bottomLeft.x, lineDescender);
+                    m_textInfo.lineInfo[m_lineNumber].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].topRight.x, lineAscender);
+                    m_textInfo.lineInfo[m_lineNumber].length = m_textInfo.lineInfo[m_lineNumber].lineExtents.max.x - (padding * currentElementScale);
+                    m_textInfo.lineInfo[m_lineNumber].width = width;
+
+                    if (m_textInfo.lineInfo[m_lineNumber].characterCount == 1)
+                        m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+
+                    if (m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].isVisible)
+                        m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+                    else
+                        m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+
+                    m_textInfo.lineInfo[m_lineNumber].baseline = 0 - m_lineOffset;
+                    m_textInfo.lineInfo[m_lineNumber].ascender = lineAscender;
+                    m_textInfo.lineInfo[m_lineNumber].descender = lineDescender;
+                    m_textInfo.lineInfo[m_lineNumber].lineHeight = lineAscender - lineDescender + lineGap * baseScale;
+
+                    m_firstCharacterOfLine = m_characterCount + 1;
+                    m_lineVisibleCharacterCount = 0;
+
+                    // Add new line if not last line or character.
+                    if (charCode == 10)
+                    {
+                        // Store the state of the line before starting on the new line.
+                        SaveWordWrappingState(ref m_SavedLineState, i, m_characterCount);
+                        // Store the state of the last Character before the new line.
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+
+                        m_lineNumber += 1;
+                        isStartOfNewLine = true;
+                        ignoreNonBreakingSpace = false;
+                        isFirstWord = true;
+
+                        // Check to make sure Array is large enough to hold a new line.
+                        if (m_lineNumber >= m_textInfo.lineInfo.Length)
+                            ResizeLineExtents(m_lineNumber);
+
+                        // Apply Line Spacing
+                        if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                        {
+                            lineOffsetDelta = 0 - m_maxLineDescender + elementAscender + (lineGap + m_lineSpacing + m_paragraphSpacing + m_lineSpacingDelta) * baseScale;
+                            m_lineOffset += lineOffsetDelta;
+                        }
+                        else
+                            m_lineOffset += m_lineHeight + (m_lineSpacing + m_paragraphSpacing) * baseScale;
+
+                        m_maxLineAscender = k_LargeNegativeFloat;
+                        m_maxLineDescender = k_LargePositiveFloat;
+                        m_startOfLineAscender = elementAscender;
+
+                        m_xAdvance = 0 + tag_LineIndent + tag_Indent;
+
+                        ellipsisIndex = m_characterCount - 1;
+
+                        m_characterCount += 1;
+                        continue;
+                    }
+                }
+                #endregion Check for Linefeed or Last Character
+
+
+                // Store Rectangle positions for each Character.
+                #region Save CharacterInfo for the current character.
+                // Determine the bounds of the Mesh.
+                if (m_textInfo.characterInfo[m_characterCount].isVisible)
+                {
+                    m_meshExtents.min.x = Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[m_characterCount].bottomLeft.x);
+                    m_meshExtents.min.y = Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[m_characterCount].bottomLeft.y);
+
+                    m_meshExtents.max.x = Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[m_characterCount].topRight.x);
+                    m_meshExtents.max.y = Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[m_characterCount].topRight.y);
+
+                    //m_meshExtents.min = new Vector2(Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[m_characterCount].bottomLeft.x), Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[m_characterCount].bottomLeft.y));
+                    //m_meshExtents.max = new Vector2(Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[m_characterCount].topRight.x), Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[m_characterCount].topRight.y));
+                }
+
+
+                // Save pageInfo Data
+                if (m_overflowMode == TextOverflowModes.Page && charCode != 13 && charCode != 10) // && m_pageNumber < 16)
+                {
+                    // Check if we need to increase allocations for the pageInfo array.
+                    if (m_pageNumber + 1 > m_textInfo.pageInfo.Length)
+                        TMP_TextInfo.Resize(ref m_textInfo.pageInfo, m_pageNumber + 1, true);
+
+                    m_textInfo.pageInfo[m_pageNumber].ascender = pageAscender;
+                    m_textInfo.pageInfo[m_pageNumber].descender = elementDescender < m_textInfo.pageInfo[m_pageNumber].descender ? elementDescender : m_textInfo.pageInfo[m_pageNumber].descender;
+
+                    if (m_pageNumber == 0 && m_characterCount == 0)
+                        m_textInfo.pageInfo[m_pageNumber].firstCharacterIndex = m_characterCount;
+                    else if (m_characterCount > 0 && m_pageNumber != m_textInfo.characterInfo[m_characterCount - 1].pageNumber)
+                    {
+                        m_textInfo.pageInfo[m_pageNumber - 1].lastCharacterIndex = m_characterCount - 1;
+                        m_textInfo.pageInfo[m_pageNumber].firstCharacterIndex = m_characterCount;
+                    }
+                    else if (m_characterCount == totalCharacterCount - 1)
+                        m_textInfo.pageInfo[m_pageNumber].lastCharacterIndex = m_characterCount;
+                }
+                #endregion Saving CharacterInfo
+
+
+                // Save State of Mesh Creation for handling of Word Wrapping
+                #region Save Word Wrapping State
+                if (m_enableWordWrapping || m_overflowMode == TextOverflowModes.Truncate || m_overflowMode == TextOverflowModes.Ellipsis)
+                {
+                    if ((char.IsWhiteSpace((char)charCode) || charCode == 0x200B || charCode == 0x2D || charCode == 0xAD) && (!m_isNonBreakingSpace || ignoreNonBreakingSpace) && charCode != 0xA0 && charCode != 0x2007 && charCode != 0x2011 && charCode != 0x202F && charCode != 0x2060)
+                    {
+                        // We store the state of numerous variables for the most recent Space, LineFeed or Carriage Return to enable them to be restored 
+                        // for Word Wrapping.
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+                        m_isCharacterWrappingEnabled = false;
+                        isFirstWord = false;
+                    }
+                    // Handling for East Asian languages
+                    else if ((  charCode > 0x1100 && charCode < 0x11ff || /* Hangul Jamo */
+                                charCode > 0x2E80 && charCode < 0x9FFF || /* CJK */
+                                charCode > 0xA960 && charCode < 0xA97F || /* Hangul Jame Extended-A */
+                                charCode > 0xAC00 && charCode < 0xD7FF || /* Hangul Syllables */
+                                charCode > 0xF900 && charCode < 0xFAFF || /* CJK Compatibility Ideographs */
+                                charCode > 0xFE30 && charCode < 0xFE4F || /* CJK Compatibility Forms */
+                                charCode > 0xFF00 && charCode < 0xFFEF)   /* CJK Halfwidth */
+                                && !m_isNonBreakingSpace)
+                    {
+                        if (isFirstWord || isLastBreakingChar || TMP_Settings.linebreakingRules.leadingCharacters.ContainsKey(charCode) == false &&
+                            (m_characterCount < totalCharacterCount - 1 &&
+                            TMP_Settings.linebreakingRules.followingCharacters.ContainsKey(m_textInfo.characterInfo[m_characterCount + 1].character) == false))
+                        {
+                            SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+                            m_isCharacterWrappingEnabled = false;
+                            isFirstWord = false;
+                        }
+                    }
+                    else if ((isFirstWord || m_isCharacterWrappingEnabled == true || isLastBreakingChar))
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+                }
+                #endregion Save Word Wrapping State
+
+                m_characterCount += 1;
+            }
+
+            // Check Auto Sizing and increase font size to fill text container.
+            #region Check Auto-Sizing (Upper Font Size Bounds)
+            fontSizeDelta = m_maxFontSize - m_minFontSize;
+            if (!m_isCharacterWrappingEnabled && m_enableAutoSizing && fontSizeDelta > 0.051f && m_fontSize < m_fontSizeMax)
+            {
+                m_minFontSize = m_fontSize;
+                m_fontSize += Mathf.Max((m_maxFontSize - m_fontSize) / 2, 0.05f);
+                m_fontSize = (int)(Mathf.Min(m_fontSize, m_fontSizeMax) * 20 + 0.5f) / 20f;
+
+                //Debug.Log(m_fontSize);
+
+                if (loopCountA > 20) return; // Added to debug
+                GenerateTextMesh();
+                return;
+            }
+            #endregion End Auto-sizing Check
+
+
+            m_isCharacterWrappingEnabled = false;
+
+
+            //Debug.Log("Iteration Count: " + loopCountA + ". Final Point Size: " + m_fontSize); // + "  B: " + loopCountB + "  C: " + loopCountC + "  D: " + loopCountD);
+
+
+
+            // If there are no visible characters... no need to continue
+            if (m_characterCount == 0) // && m_visibleSpriteCount == 0)
+            {
+                ClearMesh(true);
+
+                // Event indicating the text has been regenerated.
+                TMPro_EventManager.ON_TEXT_CHANGED(this);
+                return;
+            }
+
+
+            // *** PHASE II of Text Generation ***
+            int last_vert_index = m_materialReferences[0].referenceCount * (!m_isVolumetricText ? 4 : 8);
+
+            // Partial clear of the vertices array to mark unused vertices as degenerate.
+            m_textInfo.meshInfo[0].Clear(false);
+
+            // Handle Text Alignment
+            #region Text Vertical Alignment
+            Vector3 anchorOffset = Vector3.zero;
+            Vector3[] corners = m_RectTransformCorners; // GetTextContainerLocalCorners();
+
+            // Handle Vertical Text Alignment
+            switch (m_textAlignment)
+            {
+                // Top Vertically
+                case TextAlignmentOptions.Top:
+                case TextAlignmentOptions.TopLeft:
+                case TextAlignmentOptions.TopRight:
+                case TextAlignmentOptions.TopJustified:
+                case TextAlignmentOptions.TopFlush:
+                case TextAlignmentOptions.TopGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = corners[1] + new Vector3(0 + margins.x, 0 - m_maxAscender - margins.y, 0);
+                    else
+                        anchorOffset = corners[1] + new Vector3(0 + margins.x, 0 - m_textInfo.pageInfo[pageToDisplay].ascender - margins.y, 0);
+                    break;
+
+                // Middle Vertically
+                case TextAlignmentOptions.Left:
+                case TextAlignmentOptions.Right:
+                case TextAlignmentOptions.Center:
+                case TextAlignmentOptions.Justified:
+                case TextAlignmentOptions.Flush:
+                case TextAlignmentOptions.CenterGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_maxAscender + margins.y + maxVisibleDescender - margins.w) / 2, 0);
+                    else
+                        anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_textInfo.pageInfo[pageToDisplay].ascender + margins.y + m_textInfo.pageInfo[pageToDisplay].descender - margins.w) / 2, 0);
+                    break;
+
+                // Bottom Vertically
+                case TextAlignmentOptions.Bottom:
+                case TextAlignmentOptions.BottomLeft:
+                case TextAlignmentOptions.BottomRight:
+                case TextAlignmentOptions.BottomJustified:
+                case TextAlignmentOptions.BottomFlush:
+                case TextAlignmentOptions.BottomGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = corners[0] + new Vector3(0 + margins.x, 0 - maxVisibleDescender + margins.w, 0);
+                    else
+                        anchorOffset = corners[0] + new Vector3(0 + margins.x, 0 - m_textInfo.pageInfo[pageToDisplay].descender + margins.w, 0);
+                    break;
+
+                // Baseline Vertically
+                case TextAlignmentOptions.Baseline:
+                case TextAlignmentOptions.BaselineLeft:
+                case TextAlignmentOptions.BaselineRight:
+                case TextAlignmentOptions.BaselineJustified:
+                case TextAlignmentOptions.BaselineFlush:
+                case TextAlignmentOptions.BaselineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0, 0);
+                    break;
+
+                // Midline Vertically 
+                case TextAlignmentOptions.MidlineLeft:
+                case TextAlignmentOptions.Midline:
+                case TextAlignmentOptions.MidlineRight:
+                case TextAlignmentOptions.MidlineJustified:
+                case TextAlignmentOptions.MidlineFlush:
+                case TextAlignmentOptions.MidlineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_meshExtents.max.y + margins.y + m_meshExtents.min.y - margins.w) / 2, 0);
+                    break;
+
+                // Capline Vertically 
+                case TextAlignmentOptions.CaplineLeft:
+                case TextAlignmentOptions.Capline:
+                case TextAlignmentOptions.CaplineRight:
+                case TextAlignmentOptions.CaplineJustified:
+                case TextAlignmentOptions.CaplineFlush:
+                case TextAlignmentOptions.CaplineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_maxCapHeight - margins.y - margins.w) / 2, 0);
+                    break;
+            }
+            #endregion
+
+
+            // Initialization for Second Pass
+            Vector3 justificationOffset = Vector3.zero;
+            Vector3 offset = Vector3.zero;
+            int vert_index_X4 = 0;
+            int sprite_index_X4 = 0;
+
+            int wordCount = 0;
+            int lineCount = 0;
+            int lastLine = 0;
+            bool isFirstSeperator = false;
+
+            bool isStartOfWord = false;
+            int wordFirstChar = 0;
+            int wordLastChar = 0;
+
+            // Second Pass : Line Justification, UV Mapping, Character & Line Visibility & more.
+            float lossyScale = m_previousLossyScaleY = this.transform.lossyScale.y;
+
+            Color32 underlineColor = Color.white;
+            Color32 strikethroughColor = Color.white;
+            Color32 highlightColor = new Color32(255, 255, 0, 64);
+            float xScale = 0;
+            float xScaleMax = 0;
+            float underlineStartScale = 0;
+            float underlineEndScale = 0;
+            float underlineMaxScale = 0;
+            float underlineBaseLine = k_LargePositiveFloat;
+            int lastPage = 0;
+
+            float strikethroughPointSize = 0;
+            float strikethroughScale = 0;
+            float strikethroughBaseline = 0;
+
+            TMP_CharacterInfo[] characterInfos = m_textInfo.characterInfo;
+            #region Handle Line Justification & UV Mapping & Character Visibility & More
+            for (int i = 0; i < m_characterCount; i++)
+            {
+                TMP_FontAsset currentFontAsset = characterInfos[i].fontAsset;
+
+                char currentCharacter = characterInfos[i].character;
+
+                int currentLine = characterInfos[i].lineNumber;
+                TMP_LineInfo lineInfo = m_textInfo.lineInfo[currentLine];
+                lineCount = currentLine + 1;
+
+                TextAlignmentOptions lineAlignment = lineInfo.alignment;
+
+                // Process Line Justification
+                #region Handle Line Justification
+                switch (lineAlignment)
+                {
+                    case TextAlignmentOptions.TopLeft:
+                    case TextAlignmentOptions.Left:
+                    case TextAlignmentOptions.BottomLeft:
+                    case TextAlignmentOptions.BaselineLeft:
+                    case TextAlignmentOptions.MidlineLeft:
+                    case TextAlignmentOptions.CaplineLeft:
+                            if (!m_isRightToLeft)
+                                justificationOffset = new Vector3(0 + lineInfo.marginLeft, 0, 0);
+                            else
+                                justificationOffset = new Vector3(0 - lineInfo.maxAdvance, 0, 0);
+                            break;
+
+                    case TextAlignmentOptions.Top:
+                    case TextAlignmentOptions.Center:
+                    case TextAlignmentOptions.Bottom:
+                    case TextAlignmentOptions.Baseline:
+                    case TextAlignmentOptions.Midline:
+                    case TextAlignmentOptions.Capline:
+                        justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width / 2 - lineInfo.maxAdvance / 2, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopGeoAligned:
+                    case TextAlignmentOptions.CenterGeoAligned:
+                    case TextAlignmentOptions.BottomGeoAligned:
+                    case TextAlignmentOptions.BaselineGeoAligned:
+                    case TextAlignmentOptions.MidlineGeoAligned:
+                    case TextAlignmentOptions.CaplineGeoAligned:
+                        justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width / 2 - (lineInfo.lineExtents.min.x + lineInfo.lineExtents.max.x) / 2, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopRight:
+                    case TextAlignmentOptions.Right:
+                    case TextAlignmentOptions.BottomRight:
+                    case TextAlignmentOptions.BaselineRight:
+                    case TextAlignmentOptions.MidlineRight:
+                    case TextAlignmentOptions.CaplineRight:
+                        if (!m_isRightToLeft)
+                            justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width - lineInfo.maxAdvance, 0, 0);
+                        else
+                            justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopJustified:
+                    case TextAlignmentOptions.Justified:
+                    case TextAlignmentOptions.BottomJustified:
+                    case TextAlignmentOptions.BaselineJustified:
+                    case TextAlignmentOptions.MidlineJustified:
+                    case TextAlignmentOptions.CaplineJustified:
+                    case TextAlignmentOptions.TopFlush:
+                    case TextAlignmentOptions.Flush:
+                    case TextAlignmentOptions.BottomFlush:
+                    case TextAlignmentOptions.BaselineFlush:
+                    case TextAlignmentOptions.MidlineFlush:
+                    case TextAlignmentOptions.CaplineFlush:
+                        // Skip Zero Width Characters
+                        if (currentCharacter == 0xAD || currentCharacter == 0x200B || currentCharacter == 0x2060) break;
+
+                        char lastCharOfCurrentLine = characterInfos[lineInfo.lastCharacterIndex].character;
+                        bool isFlush = ((_HorizontalAlignmentOptions)lineAlignment & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush;
+
+                        // In Justified mode, all lines are justified except the last one.
+                        // In Flush mode, all lines are justified.
+                        if (char.IsControl(lastCharOfCurrentLine) == false && currentLine < m_lineNumber || isFlush || lineInfo.maxAdvance > lineInfo.width)
+                        {
+                            // First character of each line.
+                            if (currentLine != lastLine || i == 0 || i == m_firstVisibleCharacter)
+                            {
+                                if (!m_isRightToLeft)
+                                    justificationOffset = new Vector3(lineInfo.marginLeft, 0, 0);
+                                else
+                                    justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0);
+
+                                if (char.IsSeparator(currentCharacter))
+                                    isFirstSeperator = true;
+                                else
+                                    isFirstSeperator = false;
+                            }
+                            else
+                            {
+                                float gap = !m_isRightToLeft ? lineInfo.width - lineInfo.maxAdvance : lineInfo.width + lineInfo.maxAdvance;
+
+                                int visibleCount = lineInfo.visibleCharacterCount - 1 + lineInfo.controlCharacterCount;
+
+                                // Get the number of spaces for each line ignoring the last character if it is not visible (ie. a space or linefeed).
+                                int spaces = (characterInfos[lineInfo.lastCharacterIndex].isVisible ? lineInfo.spaceCount : lineInfo.spaceCount - 1) - lineInfo.controlCharacterCount;
+
+                                if (isFirstSeperator) { spaces -= 1; visibleCount += 1; }
+
+                                float ratio = spaces > 0 ? m_wordWrappingRatios : 1;
+
+                                if (spaces < 1) spaces = 1;
+
+                                if (currentCharacter != 0xA0 && (currentCharacter == 9 || char.IsSeparator((char)currentCharacter)))
+                                {
+                                    if (!m_isRightToLeft)
+                                        justificationOffset += new Vector3(gap * (1 - ratio) / spaces, 0, 0);
+                                    else
+                                        justificationOffset -= new Vector3(gap * (1 - ratio) / spaces, 0, 0);
+                                }
+                                else
+                                {
+                                    if (!m_isRightToLeft)
+                                        justificationOffset += new Vector3(gap * ratio / visibleCount, 0, 0);
+                                    else
+                                        justificationOffset -= new Vector3(gap * ratio / visibleCount, 0, 0);
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (!m_isRightToLeft)
+                                justificationOffset = new Vector3(lineInfo.marginLeft, 0, 0); // Keep last line left justified.
+                            else
+                                justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0); // Keep last line right justified.
+                        }
+                        //Debug.Log("Char [" + (char)charCode + "] Code:" + charCode + "  Line # " + currentLine + "  Offset:" + justificationOffset + "  # Spaces:" + lineInfo.spaceCount + "  # Characters:" + lineInfo.characterCount);
+                        break;
+                }
+                #endregion End Text Justification
+
+                offset = anchorOffset + justificationOffset;
+
+                // Handle UV2 mapping options and packing of scale information into UV2.
+                #region Handling of UV2 mapping & Scale packing
+                bool isCharacterVisible = characterInfos[i].isVisible;
+                if (isCharacterVisible)
+                {
+                    TMP_TextElementType elementType = characterInfos[i].elementType;
+                    switch (elementType)
+                    {
+                        // CHARACTERS
+                        case TMP_TextElementType.Character:
+                            Extents lineExtents = lineInfo.lineExtents;
+                            float uvOffset = (m_uvLineOffset * currentLine) % 1; // + m_uvOffset.x;
+
+                            // Setup UV2 based on Character Mapping Options Selected
+                            #region Handle UV Mapping Options
+                            switch (m_horizontalMapping)
+                            {
+                                case TextureMappingOptions.Character:
+                                    characterInfos[i].vertex_BL.uv2.x = 0; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_TL.uv2.x = 0; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_TR.uv2.x = 1; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_BR.uv2.x = 1; //+ m_uvOffset.x;
+                                    break;
+
+                                case TextureMappingOptions.Line:
+                                    if (m_textAlignment != TextAlignmentOptions.Justified)
+                                    {
+                                        characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        break;
+                                    }
+                                    else // Special Case if Justified is used in Line Mode.
+                                    {
+                                        characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        break;
+                                    }
+
+                                case TextureMappingOptions.Paragraph:
+                                    characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    break;
+
+                                case TextureMappingOptions.MatchAspect:
+
+                                    switch (m_verticalMapping)
+                                    {
+                                        case TextureMappingOptions.Character:
+                                            characterInfos[i].vertex_BL.uv2.y = 0; //+ m_uvOffset.y;
+                                            characterInfos[i].vertex_TL.uv2.y = 1; //+ m_uvOffset.y;
+                                            characterInfos[i].vertex_TR.uv2.y = 0; //+ m_uvOffset.y;
+                                            characterInfos[i].vertex_BR.uv2.y = 1; //+ m_uvOffset.y;
+                                            break;
+
+                                        case TextureMappingOptions.Line:
+                                            characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - lineExtents.min.y) / (lineExtents.max.y - lineExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - lineExtents.min.y) / (lineExtents.max.y - lineExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                            characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                            break;
+
+                                        case TextureMappingOptions.Paragraph:
+                                            characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                            characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                            break;
+
+                                        case TextureMappingOptions.MatchAspect:
+                                            Debug.Log("ERROR: Cannot Match both Vertical & Horizontal.");
+                                            break;
+                                    }
+
+                                    //float xDelta = 1 - (_uv2s[vert_index + 0].y * textMeshCharacterInfo[i].AspectRatio); // Left aligned
+                                    float xDelta = (1 - ((characterInfos[i].vertex_BL.uv2.y + characterInfos[i].vertex_TL.uv2.y) * characterInfos[i].aspectRatio)) / 2; // Center of Rectangle
+
+                                    characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.uv2.y * characterInfos[i].aspectRatio) + xDelta + uvOffset;
+                                    characterInfos[i].vertex_TL.uv2.x = characterInfos[i].vertex_BL.uv2.x;
+                                    characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TL.uv2.y * characterInfos[i].aspectRatio) + xDelta + uvOffset;
+                                    characterInfos[i].vertex_BR.uv2.x = characterInfos[i].vertex_TR.uv2.x;
+                                    break;
+                            }
+
+                            switch (m_verticalMapping)
+                            {
+                                case TextureMappingOptions.Character:
+                                    characterInfos[i].vertex_BL.uv2.y = 0; //+ m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = 1; //+ m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = 1; //+ m_uvOffset.y;
+                                    characterInfos[i].vertex_BR.uv2.y = 0; //+ m_uvOffset.y;
+                                    break;
+
+                                case TextureMappingOptions.Line:
+                                    characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - lineInfo.descender) / (lineInfo.ascender - lineInfo.descender); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - lineInfo.descender) / (lineInfo.ascender - lineInfo.descender); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    break;
+
+                                case TextureMappingOptions.Paragraph:
+                                    characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    break;
+
+                                case TextureMappingOptions.MatchAspect:
+                                    float yDelta = (1 - ((characterInfos[i].vertex_BL.uv2.x + characterInfos[i].vertex_TR.uv2.x) / characterInfos[i].aspectRatio)) / 2; // Center of Rectangle
+
+                                    characterInfos[i].vertex_BL.uv2.y = yDelta + (characterInfos[i].vertex_BL.uv2.x / characterInfos[i].aspectRatio); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = yDelta + (characterInfos[i].vertex_TR.uv2.x / characterInfos[i].aspectRatio); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    break;
+                            }
+                            #endregion
+
+                            // Pack UV's so that we can pass Xscale needed for Shader to maintain 1:1 ratio.
+                            #region Pack Scale into UV2
+                            xScale = characterInfos[i].scale * Mathf.Abs(lossyScale) * (1 - m_charWidthAdjDelta);
+                            if (!characterInfos[i].isUsingAlternateTypeface && (characterInfos[i].style & FontStyles.Bold) == FontStyles.Bold) xScale *= -1;
+
+                            //int isBold = (m_textInfo.characterInfo[i].style & FontStyles.Bold) == FontStyles.Bold ? 1 : 0;
+                            //Vector2 vertexData = new Vector2(isBold, xScale);
+                            //characterInfos[i].vertex_BL.uv4 = vertexData;
+                            //characterInfos[i].vertex_TL.uv4 = vertexData;
+                            //characterInfos[i].vertex_TR.uv4 = vertexData;
+                            //characterInfos[i].vertex_BR.uv4 = vertexData;
+
+                            float x0 = characterInfos[i].vertex_BL.uv2.x;
+                            float y0 = characterInfos[i].vertex_BL.uv2.y;
+                            float x1 = characterInfos[i].vertex_TR.uv2.x;
+                            float y1 = characterInfos[i].vertex_TR.uv2.y;
+
+                            float dx = (int)x0;
+                            float dy = (int)y0;
+
+                            x0 = x0 - dx;
+                            x1 = x1 - dx;
+                            y0 = y0 - dy;
+                            y1 = y1 - dy;
+
+                            // Optimization to avoid having a vector2 returned from the Pack UV function.
+                            characterInfos[i].vertex_BL.uv2.x = PackUV(x0, y0); characterInfos[i].vertex_BL.uv2.y = xScale;
+                            characterInfos[i].vertex_TL.uv2.x = PackUV(x0, y1); characterInfos[i].vertex_TL.uv2.y = xScale;
+                            characterInfos[i].vertex_TR.uv2.x = PackUV(x1, y1); characterInfos[i].vertex_TR.uv2.y = xScale;
+                            characterInfos[i].vertex_BR.uv2.x = PackUV(x1, y0); characterInfos[i].vertex_BR.uv2.y = xScale;
+                            #endregion
+                            break;
+                        
+                        // SPRITES
+                        case TMP_TextElementType.Sprite:
+                            // Nothing right now
+                            break;
+                    }
+
+                    // Handle maxVisibleCharacters, maxVisibleLines and Overflow Page Mode.
+                    #region Handle maxVisibleCharacters / maxVisibleLines / Page Mode
+                    if (i < m_maxVisibleCharacters && wordCount < m_maxVisibleWords && currentLine < m_maxVisibleLines && m_overflowMode != TextOverflowModes.Page)
+                    {
+                        characterInfos[i].vertex_BL.position += offset;
+                        characterInfos[i].vertex_TL.position += offset;
+                        characterInfos[i].vertex_TR.position += offset;
+                        characterInfos[i].vertex_BR.position += offset;
+                    }
+                    else if (i < m_maxVisibleCharacters && wordCount < m_maxVisibleWords && currentLine < m_maxVisibleLines && m_overflowMode == TextOverflowModes.Page && characterInfos[i].pageNumber == pageToDisplay)
+                    {
+                        characterInfos[i].vertex_BL.position += offset;
+                        characterInfos[i].vertex_TL.position += offset;
+                        characterInfos[i].vertex_TR.position += offset;
+                        characterInfos[i].vertex_BR.position += offset;
+                    }
+                    else
+                    {
+                        characterInfos[i].vertex_BL.position = Vector3.zero;
+                        characterInfos[i].vertex_TL.position = Vector3.zero;
+                        characterInfos[i].vertex_TR.position = Vector3.zero;
+                        characterInfos[i].vertex_BR.position = Vector3.zero;
+                        characterInfos[i].isVisible = false;
+                    }
+                    #endregion
+
+
+                    // Fill Vertex Buffers for the various types of element
+                    if (elementType == TMP_TextElementType.Character)
+                    {
+                        FillCharacterVertexBuffers(i, vert_index_X4, m_isVolumetricText);
+                    }
+                    else if (elementType == TMP_TextElementType.Sprite)
+                    {
+                        FillSpriteVertexBuffers(i, sprite_index_X4);
+                    }
+                }
+                #endregion
+
+                // Apply Alignment and Justification Offset
+                m_textInfo.characterInfo[i].bottomLeft += offset;
+                m_textInfo.characterInfo[i].topLeft += offset;
+                m_textInfo.characterInfo[i].topRight += offset;
+                m_textInfo.characterInfo[i].bottomRight += offset;
+
+                m_textInfo.characterInfo[i].origin += offset.x;
+                m_textInfo.characterInfo[i].xAdvance += offset.x;
+
+                m_textInfo.characterInfo[i].ascender += offset.y;
+                m_textInfo.characterInfo[i].descender += offset.y;
+                m_textInfo.characterInfo[i].baseLine += offset.y;
+
+                // Update MeshExtents
+                if (isCharacterVisible)
+                {
+                    //m_meshExtents.min = new Vector2(Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[i].bottomLeft.x), Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[i].bottomLeft.y));
+                    //m_meshExtents.max = new Vector2(Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[i].topRight.x), Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[i].topLeft.y));
+                }
+
+                // Need to recompute lineExtent to account for the offset from justification.
+                #region Adjust lineExtents resulting from alignment offset
+                if (currentLine != lastLine || i == m_characterCount - 1)
+                {
+                    // Update the previous line's extents
+                    if (currentLine != lastLine)
+                    {
+                        m_textInfo.lineInfo[lastLine].baseline += offset.y;
+                        m_textInfo.lineInfo[lastLine].ascender += offset.y;
+                        m_textInfo.lineInfo[lastLine].descender += offset.y;
+
+                        m_textInfo.lineInfo[lastLine].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[lastLine].firstCharacterIndex].bottomLeft.x, m_textInfo.lineInfo[lastLine].descender);
+                        m_textInfo.lineInfo[lastLine].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[lastLine].lastVisibleCharacterIndex].topRight.x, m_textInfo.lineInfo[lastLine].ascender);
+                    }
+
+                    // Update the current line's extents
+                    if (i == m_characterCount - 1)
+                    {
+                        m_textInfo.lineInfo[currentLine].baseline += offset.y;
+                        m_textInfo.lineInfo[currentLine].ascender += offset.y;
+                        m_textInfo.lineInfo[currentLine].descender += offset.y;
+
+                        m_textInfo.lineInfo[currentLine].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[currentLine].firstCharacterIndex].bottomLeft.x, m_textInfo.lineInfo[currentLine].descender);
+                        m_textInfo.lineInfo[currentLine].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[currentLine].lastVisibleCharacterIndex].topRight.x, m_textInfo.lineInfo[currentLine].ascender);
+                    }
+                }
+                #endregion
+
+
+                // Track Word Count per line and for the object
+                #region Track Word Count
+                if (char.IsLetterOrDigit(currentCharacter) || currentCharacter == 0x2D || currentCharacter == 0xAD || currentCharacter == 0x2010 || currentCharacter == 0x2011)
+                {
+                    if (isStartOfWord == false)
+                    {
+                        isStartOfWord = true;
+                        wordFirstChar = i;
+                    }
+
+                    // If last character is a word
+                    if (isStartOfWord && i == m_characterCount - 1)
+                    {
+                        int size = m_textInfo.wordInfo.Length;
+                        int index = m_textInfo.wordCount;
+
+                        if (m_textInfo.wordCount + 1 > size)
+                            TMP_TextInfo.Resize(ref m_textInfo.wordInfo, size + 1);
+
+                        wordLastChar = i;
+
+                        m_textInfo.wordInfo[index].firstCharacterIndex = wordFirstChar;
+                        m_textInfo.wordInfo[index].lastCharacterIndex = wordLastChar;
+                        m_textInfo.wordInfo[index].characterCount = wordLastChar - wordFirstChar + 1;
+                        m_textInfo.wordInfo[index].textComponent = this;
+
+                        wordCount += 1;
+                        m_textInfo.wordCount += 1;
+                        m_textInfo.lineInfo[currentLine].wordCount += 1;
+                    }
+                }
+                else if (isStartOfWord || i == 0 && (!char.IsPunctuation(currentCharacter) || char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B || i == m_characterCount - 1))
+                {
+                    if (i > 0 && i < characterInfos.Length - 1 && i < m_characterCount && (currentCharacter == 39 || currentCharacter == 8217) && char.IsLetterOrDigit(characterInfos[i - 1].character) && char.IsLetterOrDigit(characterInfos[i + 1].character))
+                    {
+
+                    }
+                    else
+                    {
+                        wordLastChar = i == m_characterCount - 1 && char.IsLetterOrDigit(currentCharacter) ? i : i - 1;
+                        isStartOfWord = false;
+
+                        int size = m_textInfo.wordInfo.Length;
+                        int index = m_textInfo.wordCount;
+
+                        if (m_textInfo.wordCount + 1 > size)
+                            TMP_TextInfo.Resize(ref m_textInfo.wordInfo, size + 1);
+
+                        m_textInfo.wordInfo[index].firstCharacterIndex = wordFirstChar;
+                        m_textInfo.wordInfo[index].lastCharacterIndex = wordLastChar;
+                        m_textInfo.wordInfo[index].characterCount = wordLastChar - wordFirstChar + 1;
+                        m_textInfo.wordInfo[index].textComponent = this;
+
+                        wordCount += 1;
+                        m_textInfo.wordCount += 1;
+                        m_textInfo.lineInfo[currentLine].wordCount += 1;
+                    }
+                }
+                #endregion
+
+
+                // Setup & Handle Underline
+                #region Underline
+                // NOTE: Need to figure out how underline will be handled with multiple fonts and which font will be used for the underline.
+                bool isUnderline = (m_textInfo.characterInfo[i].style & FontStyles.Underline) == FontStyles.Underline;
+                if (isUnderline)
+                {
+                    bool isUnderlineVisible = true;
+                    int currentPage = m_textInfo.characterInfo[i].pageNumber;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && currentPage + 1 != m_pageToDisplay))
+                        isUnderlineVisible = false;
+
+                    // We only use the scale of visible characters.
+                    if (!char.IsWhiteSpace(currentCharacter) && currentCharacter != 0x200B)
+                    {
+                        underlineMaxScale = Mathf.Max(underlineMaxScale, m_textInfo.characterInfo[i].scale);
+                        xScaleMax = Mathf.Max(xScaleMax, Mathf.Abs(xScale));
+                        underlineBaseLine = Mathf.Min(currentPage == lastPage ? underlineBaseLine : k_LargePositiveFloat, m_textInfo.characterInfo[i].baseLine + font.faceInfo.underlineOffset * underlineMaxScale);
+                        lastPage = currentPage; // Need to track pages to ensure we reset baseline for the new pages.
+                    }
+
+                    if (beginUnderline == false && isUnderlineVisible == true && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginUnderline = true;
+                            underlineStartScale = m_textInfo.characterInfo[i].scale;
+                            if (underlineMaxScale == 0)
+                            {
+                                underlineMaxScale = underlineStartScale;
+                                xScaleMax = xScale;
+                            }
+                            underline_start = new Vector3(m_textInfo.characterInfo[i].bottomLeft.x, underlineBaseLine, 0);
+                            underlineColor = m_textInfo.characterInfo[i].underlineColor;
+                        }
+                    }
+
+                    // End Underline if text only contains one character.
+                    if (beginUnderline && m_characterCount == 1)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && (i == lineInfo.lastCharacterIndex || i >= lineInfo.lastVisibleCharacterIndex))
+                    {
+                        // Terminate underline at previous visible character if space or carriage return.
+                        if (char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B)
+                        {
+                            int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                            underline_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, underlineBaseLine, 0);
+                            underlineEndScale = m_textInfo.characterInfo[lastVisibleCharacterIndex].scale;
+                        }
+                        else
+                        {   // End underline if last character of the line.
+                            underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                            underlineEndScale = m_textInfo.characterInfo[i].scale;
+                        }
+
+                        beginUnderline = false;
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && !isUnderlineVisible)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i - 1].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && i < m_characterCount - 1 && !underlineColor.Compare(m_textInfo.characterInfo[i + 1].underlineColor))
+                    {
+                        // End underline if underline color has changed.
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                }
+                else
+                {
+                    // End Underline
+                    if (beginUnderline == true)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i - 1].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                }
+                #endregion
+
+
+                // Setup & Handle Strikethrough
+                #region Strikethrough
+                // NOTE: Need to figure out how underline will be handled with multiple fonts and which font will be used for the underline.
+                bool isStrikethrough = (m_textInfo.characterInfo[i].style & FontStyles.Strikethrough) == FontStyles.Strikethrough;
+                float strikethroughOffset = currentFontAsset.faceInfo.strikethroughOffset;
+
+                if (isStrikethrough)
+                {
+                    bool isStrikeThroughVisible = true;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && m_textInfo.characterInfo[i].pageNumber + 1 != m_pageToDisplay))
+                        isStrikeThroughVisible = false;
+
+                    if (beginStrikethrough == false && isStrikeThroughVisible && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginStrikethrough = true;
+                            strikethroughPointSize = m_textInfo.characterInfo[i].pointSize;
+                            strikethroughScale = m_textInfo.characterInfo[i].scale;
+                            strikethrough_start = new Vector3(m_textInfo.characterInfo[i].bottomLeft.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+                            strikethroughColor = m_textInfo.characterInfo[i].strikethroughColor;
+                            strikethroughBaseline = m_textInfo.characterInfo[i].baseLine;
+                            //Debug.Log("Char [" + currentCharacter + "] Start Strikethrough POS: " + strikethrough_start);
+                        }
+                    }
+
+                    // End Strikethrough if text only contains one character.
+                    if (beginStrikethrough && m_characterCount == 1)
+                    {
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && i == lineInfo.lastCharacterIndex)
+                    {
+                        // Terminate Strikethrough at previous visible character if space or carriage return.
+                        if (char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B)
+                        {
+                            int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, m_textInfo.characterInfo[lastVisibleCharacterIndex].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        }
+                        else
+                        {
+                            // Terminate Strikethrough at last character of line.
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        }
+
+                        beginStrikethrough = false;
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && i < m_characterCount && (m_textInfo.characterInfo[i + 1].pointSize != strikethroughPointSize || !TMP_Math.Approximately(m_textInfo.characterInfo[i + 1].baseLine + offset.y, strikethroughBaseline)))
+                    {
+                        // Terminate Strikethrough if scale changes.
+                        beginStrikethrough = false;
+
+                        int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                        if (i > lastVisibleCharacterIndex)
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, m_textInfo.characterInfo[lastVisibleCharacterIndex].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        else
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                        //Debug.Log("Char [" + currentCharacter + "] at Index: " + i + "  End Strikethrough POS: " + strikethrough_end + "  Baseline: " + m_textInfo.characterInfo[i].baseLine.ToString("f3"));
+                    }
+                    else if (beginStrikethrough && i < m_characterCount && currentFontAsset.GetInstanceID() != characterInfos[i + 1].fontAsset.GetInstanceID())
+                    {
+                        // Terminate Strikethrough if font asset changes.
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && !isStrikeThroughVisible)
+                    {
+                        // Terminate Strikethrough if character is not visible.
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, m_textInfo.characterInfo[i - 1].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                }
+                else
+                {
+                    // End Strikethrough
+                    if (beginStrikethrough == true)
+                    {
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, m_textInfo.characterInfo[i - 1].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                }
+                #endregion
+
+
+                // HANDLE TEXT HIGHLIGHTING
+                #region Text Highlighting
+                bool isHighlight = (m_textInfo.characterInfo[i].style & FontStyles.Highlight) == FontStyles.Highlight;
+                if (isHighlight)
+                {
+                    bool isHighlightVisible = true;
+                    int currentPage = m_textInfo.characterInfo[i].pageNumber;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && currentPage + 1 != m_pageToDisplay))
+                        isHighlightVisible = false;
+
+                    if (beginHighlight == false && isHighlightVisible == true && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginHighlight = true;
+                            highlight_start = k_LargePositiveVector2;
+                            highlight_end = k_LargeNegativeVector2;
+                            highlightColor = m_textInfo.characterInfo[i].highlightColor;
+                        }
+                    }
+
+                    if (beginHighlight)
+                    {
+                        Color32 currentHighlightColor = m_textInfo.characterInfo[i].highlightColor;
+                        bool isColorTransition = false;
+
+                        // Handle Highlight color changes
+                        if (!highlightColor.Compare(currentHighlightColor))
+                        {
+                            // End drawing at the start of new highlight color to prevent a gap between highlight sections.
+                            highlight_end.x = (highlight_end.x + m_textInfo.characterInfo[i].bottomLeft.x) / 2;
+
+                            highlight_start.y = Mathf.Min(highlight_start.y, m_textInfo.characterInfo[i].descender);
+                            highlight_end.y = Mathf.Max(highlight_end.y, m_textInfo.characterInfo[i].ascender);
+
+                            DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+
+                            beginHighlight = true;
+                            highlight_start = highlight_end;
+
+                            highlight_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].descender, 0);
+                            highlightColor = m_textInfo.characterInfo[i].highlightColor;
+
+                            isColorTransition = true;
+                        }
+
+                        if (!isColorTransition)
+                        {
+                            // Use the Min / Max Extents of the Highlight area to handle different character sizes and fonts.
+                            highlight_start.x = Mathf.Min(highlight_start.x, m_textInfo.characterInfo[i].bottomLeft.x);
+                            highlight_start.y = Mathf.Min(highlight_start.y, m_textInfo.characterInfo[i].descender);
+
+                            highlight_end.x = Mathf.Max(highlight_end.x, m_textInfo.characterInfo[i].topRight.x);
+                            highlight_end.y = Mathf.Max(highlight_end.y, m_textInfo.characterInfo[i].ascender); 
+                        }
+                    }
+
+                    // End Highlight if text only contains one character.
+                    if (beginHighlight && m_characterCount == 1)
+                    {
+                        beginHighlight = false;
+
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                    else if (beginHighlight && (i == lineInfo.lastCharacterIndex || i >= lineInfo.lastVisibleCharacterIndex))
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                    else if (beginHighlight && !isHighlightVisible)
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                }
+                else
+                {
+                    // End Highlight
+                    if (beginHighlight == true)
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                }
+                #endregion
+
+
+                lastLine = currentLine;
+            }
+            #endregion
+
+
+            // METRICS ABOUT THE TEXT OBJECT
+            m_textInfo.characterCount = m_characterCount;
+            m_textInfo.spriteCount = m_spriteCount;
+            m_textInfo.lineCount = lineCount;
+            m_textInfo.wordCount = wordCount != 0 && m_characterCount > 0 ? wordCount : 1;
+            m_textInfo.pageCount = m_pageNumber + 1;
+
+
+            ////Profiler.BeginSample("TMP Generate Text - Phase III");
+            // Update Mesh Vertex Data
+            if (m_renderMode == TextRenderFlags.Render && IsActive())
+            {
+                // Clear unused vertices
+                //m_textInfo.meshInfo[0].ClearUnusedVertices();
+
+                // Sort the geometry of the text object if needed.
+                if (m_geometrySortingOrder != VertexSortingOrder.Normal)
+                    m_textInfo.meshInfo[0].SortGeometry(VertexSortingOrder.Reverse);
+
+                // Upload Mesh Data
+                m_mesh.MarkDynamic();
+                m_mesh.vertices = m_textInfo.meshInfo[0].vertices;
+                m_mesh.uv = m_textInfo.meshInfo[0].uvs0;
+                m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+                //m_mesh.uv4 = m_textInfo.meshInfo[0].uvs4;
+                m_mesh.colors32 = m_textInfo.meshInfo[0].colors32;
+
+                // Compute Bounds for the mesh. Manual computation is more efficient then using Mesh.recalcualteBounds.
+                m_mesh.RecalculateBounds();
+                //m_mesh.bounds = new Bounds(new Vector3((m_meshExtents.max.x + m_meshExtents.min.x) / 2, (m_meshExtents.max.y + m_meshExtents.min.y) / 2, 0) + offset, new Vector3(m_meshExtents.max.x - m_meshExtents.min.x, m_meshExtents.max.y - m_meshExtents.min.y, 0));
+
+                for (int i = 1; i < m_textInfo.materialCount; i++)
+                {
+                    // Clear unused vertices
+                    m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    if (m_subTextObjects[i] == null) continue;
+
+                    // Sort the geometry of the sub-text objects if needed.
+                    if (m_geometrySortingOrder != VertexSortingOrder.Normal)
+                        m_textInfo.meshInfo[i].SortGeometry(VertexSortingOrder.Reverse);
+
+                    m_subTextObjects[i].mesh.vertices = m_textInfo.meshInfo[i].vertices;
+                    m_subTextObjects[i].mesh.uv = m_textInfo.meshInfo[i].uvs0;
+                    m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+                    //m_subTextObjects[i].mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+                    m_subTextObjects[i].mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                    m_subTextObjects[i].mesh.RecalculateBounds();
+
+                    // Update the collider on the sub text object
+                    //m_subTextObjects[i].UpdateColliders(m_textInfo.meshInfo[i].vertexCount);
+                }
+            }
+
+            // Event indicating the text has been regenerated.
+            TMPro_EventManager.ON_TEXT_CHANGED(this);
+
+            ////Profiler.EndSample();
+            //Debug.Log("Done Rendering Text.");
+        }
+
+
+        /// <summary>
+        /// Method to return the local corners of the Text Container or RectTransform.
+        /// </summary>
+        /// <returns></returns>
+        protected override Vector3[] GetTextContainerLocalCorners()
+        {
+            if (m_rectTransform == null) m_rectTransform = this.rectTransform;
+
+            m_rectTransform.GetLocalCorners(m_RectTransformCorners);
+
+            return m_RectTransformCorners;
+        }
+
+
+        /// <summary>
+        /// Method to disable the renderers.
+        /// </summary>
+        void SetMeshFilters(bool state)
+        {
+            // Parent text object
+            if (m_meshFilter != null)
+            {
+                if (state)
+                    m_meshFilter.sharedMesh = m_mesh;
+                else
+                    m_meshFilter.sharedMesh = null;
+            }
+
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                if (m_subTextObjects[i].meshFilter != null)
+                {
+                    if (state)
+                        m_subTextObjects[i].meshFilter.sharedMesh = m_subTextObjects[i].mesh;
+                    else
+                        m_subTextObjects[i].meshFilter.sharedMesh = null;
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// Method to Enable or Disable child SubMesh objects.
+        /// </summary>
+        /// <param name="state"></param>
+        protected override void SetActiveSubMeshes(bool state)
+        {
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                if (m_subTextObjects[i].enabled != state)
+                    m_subTextObjects[i].enabled = state;
+            }
+        }
+
+
+        /// <summary>
+        /// Destroy Sub Mesh Objects
+        /// </summary>
+        protected override void ClearSubMeshObjects()
+        {
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                Debug.Log("Destroying Sub Text object[" + i + "].");
+                DestroyImmediate(m_subTextObjects[i]);
+            }
+        }
+
+
+        /// <summary>
+        ///  Method returning the compound bounds of the text object and child sub objects.
+        /// </summary>
+        /// <returns></returns>
+        protected override Bounds GetCompoundBounds()
+        {
+            Bounds mainBounds = m_mesh.bounds;
+            Vector3 min = mainBounds.min;
+            Vector3 max = mainBounds.max;
+
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                Bounds subBounds = m_subTextObjects[i].mesh.bounds;
+                min.x = min.x < subBounds.min.x ? min.x : subBounds.min.x;
+                min.y = min.y < subBounds.min.y ? min.y : subBounds.min.y;
+
+                max.x = max.x > subBounds.max.x ? max.x : subBounds.max.x;
+                max.y = max.y > subBounds.max.y ? max.y : subBounds.max.y;
+            }
+
+            Vector3 center = (min + max) / 2;
+            Vector2 size = max - min;
+            return new Bounds(center, size);
+        }
+
+
+        /// <summary>
+        /// Method to Update Scale in UV2
+        /// </summary>
+        //void UpdateSDFScale(float lossyScale)
+        //{
+        //    // TODO: Resolve - Underline / Strikethrough segments not getting their SDF Scale adjusted.
+
+        //    //Debug.Log("*** UpdateSDFScale() ***");
+
+        //    // Iterate through each of the characters.
+        //    for (int i = 0; i < m_textInfo.characterCount; i++)
+        //    {
+        //        // Only update scale for visible characters.
+        //        if (m_textInfo.characterInfo[i].isVisible && m_textInfo.characterInfo[i].elementType == TMP_TextElementType.Character)
+        //        {
+        //            float scale = lossyScale * m_textInfo.characterInfo[i].scale * (1 - m_charWidthAdjDelta);
+        //            if (!m_textInfo.characterInfo[i].isUsingAlternateTypeface && (m_textInfo.characterInfo[i].style & FontStyles.Bold) == FontStyles.Bold) scale *= -1;
+
+        //            int index = m_textInfo.characterInfo[i].materialReferenceIndex;
+        //            int vertexIndex = m_textInfo.characterInfo[i].vertexIndex;
+
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 0].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 1].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 2].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 3].y = scale;
+        //        }
+        //    }
+
+        //    // Push the updated uv2 scale information to the meshes.
+        //    for (int i = 0; i < m_textInfo.meshInfo.Length; i++)
+        //    {
+        //        if (i == 0)
+        //            m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+        //        else
+        //            m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+        //    }
+        //}
+
+        /// <summary>
+        /// Method to update the SDF Scale in UV2.
+        /// </summary>
+        /// <param name="scaleDelta"></param>
+        void UpdateSDFScale(float scaleDelta)
+        {
+            if (scaleDelta == 0 || scaleDelta == float.PositiveInfinity)
+            {
+                m_havePropertiesChanged = true;
+                OnPreRenderObject();
+                return;
+            }
+
+            for (int materialIndex = 0; materialIndex < m_textInfo.materialCount; materialIndex++)
+            {
+                TMP_MeshInfo meshInfo = m_textInfo.meshInfo[materialIndex];
+
+                for (int i = 0; i < meshInfo.uvs2.Length; i++)
+                {
+                    meshInfo.uvs2[i].y *= Mathf.Abs(scaleDelta);
+                }
+            }
+
+            // Push the updated uv2 scale information to the meshes.
+            for (int i = 0; i < m_textInfo.meshInfo.Length; i++)
+            {
+                if (i == 0)
+                    m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+                else
+                    m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+            }
+        }
+
+
+        // Function to offset vertices position to account for line spacing changes.
+        protected override void AdjustLineOffset(int startIndex, int endIndex, float offset)
+        {
+            Vector3 vertexOffset = new Vector3(0, offset, 0);
+
+            for (int i = startIndex; i <= endIndex; i++)
+            {
+                m_textInfo.characterInfo[i].bottomLeft -= vertexOffset;
+                m_textInfo.characterInfo[i].topLeft -= vertexOffset;
+                m_textInfo.characterInfo[i].topRight -= vertexOffset;
+                m_textInfo.characterInfo[i].bottomRight -= vertexOffset;
+
+                m_textInfo.characterInfo[i].ascender -= vertexOffset.y;
+                m_textInfo.characterInfo[i].baseLine -= vertexOffset.y;
+                m_textInfo.characterInfo[i].descender -= vertexOffset.y;
+
+                if (m_textInfo.characterInfo[i].isVisible)
+                {
+                    m_textInfo.characterInfo[i].vertex_BL.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_TL.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_TR.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_BR.position -= vertexOffset;
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..922dae217c8c0ca6ca38e036e38acdfa62224585
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_Private.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8f8b248abe6b4dcebd6cdd0d754717f4
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: 8e098d8d28c5182419f7a1c8b91ca722, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2c25e343738eb56325abec7ae0ddc75c0372fed6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs
@@ -0,0 +1,4318 @@
+//#define TMP_PROFILE_ON
+//#define TMP_PROFILE_PHASES_ON
+
+
+using UnityEngine;
+using UnityEngine.TextCore;
+using System;
+using System.Collections.Generic;
+using UnityEngine.UI;
+
+#pragma warning disable 0414 // Disabled a few warnings related to serialized variables not used in this script but used in the editor.
+#pragma warning disable 0618 // Disabled warning due to SetVertices being deprecated until new release with SetMesh() is available.
+
+namespace TMPro
+{
+
+    public partial class TextMeshProUGUI
+    {
+        [SerializeField]
+        private bool m_hasFontAssetChanged = false; // Used to track when font properties have changed.
+
+        [SerializeField]
+        protected TMP_SubMeshUI[] m_subTextObjects = new TMP_SubMeshUI[8];
+
+        private float m_previousLossyScaleY = -1; // Used for Tracking lossy scale changes in the transform;
+
+        private Vector3[] m_RectTransformCorners = new Vector3[4];
+        private CanvasRenderer m_canvasRenderer;
+        private Canvas m_canvas;
+
+
+        private bool m_isFirstAllocation; // Flag to determine if this is the first allocation of the buffers.
+        private int m_max_characters = 8; // Determines the initial allocation and size of the character array / buffer.
+        //private int m_max_numberOfLines = 4; // Determines the initial allocation and maximum number of lines of text. 
+
+        // MASKING RELATED PROPERTIES
+        private bool m_isMaskingEnabled;
+        // This property is now obsolete and used for compatibility with previous releases (prior to release 0.1.54).
+        [SerializeField]
+        private Material m_baseMaterial;
+
+
+        private bool m_isScrollRegionSet;
+        //private Mask m_mask;
+        private int m_stencilID = 0;
+      
+        [SerializeField]
+        private Vector4 m_maskOffset;
+
+        // Matrix used to animated Env Map
+        private Matrix4x4 m_EnvMapMatrix = new Matrix4x4();
+
+
+        //private bool m_isEnabled;
+        [NonSerialized]
+        private bool m_isRegisteredForEvents;
+
+        // DEBUG Variables
+        //private System.Diagnostics.Stopwatch m_StopWatch;
+        //private int frame = 0;
+        //private int m_recursiveCount = 0;
+        private int m_recursiveCountA = 0;
+        private int loopCountA = 0;
+        //private int loopCountB = 0;
+        //private int loopCountC = 0;
+        //private int loopCountD = 0;
+        //private int loopCountE = 0;
+
+        //[SerializeField]
+        //private new Material m_MaskMaterial;
+
+
+        protected override void Awake()
+        {
+            //Debug.Log("***** Awake() called on object ID " + GetInstanceID() + ". *****");
+
+            #if UNITY_EDITOR
+            // Special handling for TMP Settings and importing Essential Resources
+            if (TMP_Settings.instance == null)
+            {
+                if (m_isWaitingOnResourceLoad == false)
+                    TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED);
+
+                m_isWaitingOnResourceLoad = true;
+                return;
+            }
+            #endif
+
+            // Cache Reference to the Canvas
+            m_canvas = this.canvas;
+
+            m_isOrthographic = true;
+
+            // Cache Reference to RectTransform.
+            m_rectTransform = gameObject.GetComponent<RectTransform>();
+            if (m_rectTransform == null)  
+                m_rectTransform = gameObject.AddComponent<RectTransform>();
+
+            // Cache a reference to the CanvasRenderer.
+            m_canvasRenderer = GetComponent<CanvasRenderer>();
+            if (m_canvasRenderer == null) 
+                m_canvasRenderer = gameObject.AddComponent<CanvasRenderer> ();
+
+            if (m_mesh == null)
+            {
+                m_mesh = new Mesh();
+                m_mesh.hideFlags = HideFlags.HideAndDontSave;
+
+                // Create new TextInfo for the text object.
+                m_textInfo = new TMP_TextInfo(this);
+            }
+
+            // Load TMP Settings for new text object instances.
+            LoadDefaultSettings();
+
+            // Load the font asset and assign material to renderer.
+            LoadFontAsset();
+
+            // Load Default TMP StyleSheet
+            TMP_StyleSheet.LoadDefaultStyleSheet();
+
+            // Allocate our initial buffers.
+            if (m_TextParsingBuffer == null)
+                m_TextParsingBuffer = new UnicodeChar[m_max_characters];
+
+            m_cached_TextElement = new TMP_Character();
+            m_isFirstAllocation = true;
+
+            // Check if we have a font asset assigned. Return if we don't because no one likes to see purple squares on screen.
+            if (m_fontAsset == null)
+            {
+                Debug.LogWarning("Please assign a Font Asset to this " + transform.name + " gameobject.", this);
+                return;
+            }
+
+            // Check to make sure Sub Text Objects are tracked correctly in the event a Prefab is used.
+            TMP_SubMeshUI[] subTextObjects = GetComponentsInChildren<TMP_SubMeshUI>();
+            if (subTextObjects.Length > 0)
+            {
+                for (int i = 0; i < subTextObjects.Length; i++)
+                    m_subTextObjects[i + 1] = subTextObjects[i];
+            }
+
+            // Set flags to ensure our text is parsed and redrawn.
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+
+            m_isAwake = true;
+        }
+
+
+        protected override void OnEnable()
+        {
+            //Debug.Log("***** OnEnable() called on object ID " + GetInstanceID() + ". *****");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            if (!m_isRegisteredForEvents)
+            {
+                //Debug.Log("Registering for Events.");
+                
+                #if UNITY_EDITOR
+                // Register Callbacks for various events.
+                TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Add(ON_MATERIAL_PROPERTY_CHANGED);
+                TMPro_EventManager.FONT_PROPERTY_EVENT.Add(ON_FONT_PROPERTY_CHANGED);
+                TMPro_EventManager.TEXTMESHPRO_UGUI_PROPERTY_EVENT.Add(ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED);
+                TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Add(ON_DRAG_AND_DROP_MATERIAL);
+                TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED);
+                TMPro_EventManager.COLOR_GRADIENT_PROPERTY_EVENT.Add(ON_COLOR_GRADIENT_CHANGED);
+                TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Add(ON_TMP_SETTINGS_CHANGED);
+                #endif
+                m_isRegisteredForEvents = true;
+            }
+
+            // Cache Reference to the Canvas
+            m_canvas = GetCanvas();
+
+            SetActiveSubMeshes(true);
+
+            // Register Graphic Component to receive event triggers
+            GraphicRegistry.RegisterGraphicForCanvas(m_canvas, this);
+
+            // Register text object for updates
+            TMP_UpdateManager.RegisterTextObjectForUpdate(this);
+
+            ComputeMarginSize();
+
+            m_verticesAlreadyDirty = false;
+            m_layoutAlreadyDirty = false;
+            m_ShouldRecalculateStencil = true;
+            m_isInputParsingRequired = true;
+            SetAllDirty();
+
+            RecalculateClipping();
+        }
+
+
+        protected override void OnDisable()
+        {
+            //Debug.Log("***** OnDisable() called on object ID " + GetInstanceID() + ". *****");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            if (m_MaskMaterial != null)
+            { 
+                TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+                m_MaskMaterial = null;
+            }
+
+            // UnRegister Graphic Component
+            GraphicRegistry.UnregisterGraphicForCanvas(m_canvas, this);
+            CanvasUpdateRegistry.UnRegisterCanvasElementForRebuild((ICanvasElement)this);
+
+            TMP_UpdateManager.UnRegisterTextObjectForUpdate(this);
+
+            if (m_canvasRenderer != null)
+                m_canvasRenderer.Clear();
+
+            SetActiveSubMeshes(false);
+
+            LayoutRebuilder.MarkLayoutForRebuild(m_rectTransform);
+            RecalculateClipping();
+        }
+
+
+        protected override void OnDestroy()
+        {
+            //Debug.Log("***** OnDestroy() called on object ID " + GetInstanceID() + ". *****");
+
+            // UnRegister Graphic Component
+            GraphicRegistry.UnregisterGraphicForCanvas(m_canvas, this);
+
+            TMP_UpdateManager.UnRegisterTextObjectForUpdate(this);
+
+            // Clean up remaining mesh
+            if (m_mesh != null)
+                DestroyImmediate(m_mesh);
+
+            // Clean up mask material
+            if (m_MaskMaterial != null)
+            {
+                TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+                m_MaskMaterial = null;
+            }
+
+            #if UNITY_EDITOR
+            // Unregister the event this object was listening to
+            TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Remove(ON_MATERIAL_PROPERTY_CHANGED);
+            TMPro_EventManager.FONT_PROPERTY_EVENT.Remove(ON_FONT_PROPERTY_CHANGED);
+            TMPro_EventManager.TEXTMESHPRO_UGUI_PROPERTY_EVENT.Remove(ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED);
+            TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Remove(ON_DRAG_AND_DROP_MATERIAL);
+            TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED);
+            TMPro_EventManager.COLOR_GRADIENT_PROPERTY_EVENT.Remove(ON_COLOR_GRADIENT_CHANGED);
+            TMPro_EventManager.TMP_SETTINGS_PROPERTY_EVENT.Remove(ON_TMP_SETTINGS_CHANGED);
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+            #endif
+            m_isRegisteredForEvents = false;
+        }
+
+
+        #if UNITY_EDITOR
+        protected override void Reset()
+        {
+            //Debug.Log("***** Reset() *****"); //has been called.");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            LoadDefaultSettings();
+            LoadFontAsset();
+
+            m_isInputParsingRequired = true;
+            m_havePropertiesChanged = true;
+        }
+
+
+        protected override void OnValidate()
+        {
+            //Debug.Log("***** OnValidate() ***** Frame:" + Time.frameCount); // ID " + GetInstanceID()); // New Material [" + m_sharedMaterial.name + "] with ID " + m_sharedMaterial.GetInstanceID() + ". Base Material is [" + m_baseMaterial.name + "] with ID " + m_baseMaterial.GetInstanceID() + ". Previous Base Material is [" + (m_lastBaseMaterial == null ? "Null" : m_lastBaseMaterial.name) + "].");
+
+            // Return if Awake() has not been called on the text object.
+            if (m_isAwake == false)
+                return;
+
+            // Handle Font Asset changes in the inspector.
+            if (m_fontAsset == null || m_hasFontAssetChanged)
+            {
+                LoadFontAsset();
+                m_isCalculateSizeRequired = true;
+                m_hasFontAssetChanged = false;
+            }
+
+
+            if (m_canvasRenderer == null || m_canvasRenderer.GetMaterial() == null || m_canvasRenderer.GetMaterial().GetTexture(ShaderUtilities.ID_MainTex) == null || m_fontAsset == null || m_fontAsset.atlasTexture.GetInstanceID() != m_canvasRenderer.GetMaterial().GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+            {
+                LoadFontAsset();
+                m_isCalculateSizeRequired = true;
+                m_hasFontAssetChanged = false;
+            }
+
+            m_padding = GetPaddingForMaterial();
+            ComputeMarginSize();
+
+            m_isInputParsingRequired = true;
+            m_inputSource = TextInputSources.Text;
+            m_havePropertiesChanged = true;
+            m_isCalculateSizeRequired = true;
+            m_isPreferredWidthDirty = true;
+            m_isPreferredHeightDirty = true;
+
+            SetAllDirty();
+        }
+
+
+        // Event received when TMP resources have been loaded.
+        void ON_RESOURCES_LOADED()
+        {
+            TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED);
+
+            if (this == null)
+                return;
+
+            Awake();
+            OnEnable();
+        }
+
+
+        // Event received when custom material editor properties are changed.
+        void ON_MATERIAL_PROPERTY_CHANGED(bool isChanged, Material mat)
+        {
+            //Debug.Log("ON_MATERIAL_PROPERTY_CHANGED event received."); // Targeted Material is: " + mat.name + "  m_sharedMaterial: " + m_sharedMaterial.name + " with ID:" + m_sharedMaterial.GetInstanceID() + "  m_renderer.sharedMaterial: " + m_canvasRenderer.GetMaterial() + "  Masking Material:" + m_MaskMaterial.GetInstanceID());
+
+            ShaderUtilities.GetShaderPropertyIDs(); // Initialize ShaderUtilities and get shader property IDs.
+
+            int materialID = mat.GetInstanceID();
+            int sharedMaterialID = m_sharedMaterial.GetInstanceID();
+            int maskingMaterialID = m_MaskMaterial == null ? 0 : m_MaskMaterial.GetInstanceID();
+
+            if (m_canvasRenderer == null || m_canvasRenderer.GetMaterial() == null)
+            {
+                if (m_canvasRenderer == null) return;
+
+                if (m_fontAsset != null)
+                {
+                    m_canvasRenderer.SetMaterial(m_fontAsset.material, m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+                    //Debug.LogWarning("No Material was assigned to " + name + ". " + m_fontAsset.material.name + " was assigned.");
+                }
+                else
+                    Debug.LogWarning("No Font Asset assigned to " + name + ". Please assign a Font Asset.", this);
+            }
+
+
+            if (m_canvasRenderer.GetMaterial() != m_sharedMaterial && m_fontAsset == null) //    || m_renderer.sharedMaterials.Contains(mat))
+            {
+                //Debug.Log("ON_MATERIAL_PROPERTY_CHANGED Called on Target ID: " + GetInstanceID() + ". Previous Material:" + m_sharedMaterial + "  New Material:" + m_uiRenderer.GetMaterial()); // on Object ID:" + GetInstanceID() + ". m_sharedMaterial: " + m_sharedMaterial.name + "  m_renderer.sharedMaterial: " + m_renderer.sharedMaterial.name);         
+                m_sharedMaterial = m_canvasRenderer.GetMaterial();
+            }
+
+
+            // Make sure material properties are synchronized between the assigned material and masking material.
+            if (m_MaskMaterial != null)
+            {
+                UnityEditor.Undo.RecordObject(m_MaskMaterial, "Material Property Changes");
+                UnityEditor.Undo.RecordObject(m_sharedMaterial, "Material Property Changes");
+
+                if (materialID == sharedMaterialID)
+                {
+                    //Debug.Log("Copy base material properties to masking material if not null.");
+                    float stencilID = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilID);
+                    float stencilComp = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilComp);
+                    //float stencilOp = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilOp);
+                    //float stencilRead = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilReadMask);
+                    //float stencilWrite = m_MaskMaterial.GetFloat(ShaderUtilities.ID_StencilWriteMask);
+
+                    m_MaskMaterial.CopyPropertiesFromMaterial(mat);
+                    m_MaskMaterial.shaderKeywords = mat.shaderKeywords;
+
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilID, stencilID);
+                    m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp);
+                    //m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilOp, stencilOp);
+                    //m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilReadMask, stencilID);
+                    //m_MaskMaterial.SetFloat(ShaderUtilities.ID_StencilWriteMask, 0);
+                }
+                else if (materialID == maskingMaterialID)
+                {
+                    // Update the padding 
+                    GetPaddingForMaterial(mat);
+
+                    m_sharedMaterial.CopyPropertiesFromMaterial(mat);
+                    m_sharedMaterial.shaderKeywords = mat.shaderKeywords;
+                    m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilID, 0);
+                    m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilComp, 8);
+                    //m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilOp, 0);
+                    //m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilReadMask, 255);
+                    //m_sharedMaterial.SetFloat(ShaderUtilities.ID_StencilWriteMask, 255);
+                }
+
+            }
+
+            m_padding = GetPaddingForMaterial();
+            m_havePropertiesChanged = true;
+            SetVerticesDirty();
+            //SetMaterialDirty();
+        }
+
+
+        // Event received when font asset properties are changed in Font Inspector
+        void ON_FONT_PROPERTY_CHANGED(bool isChanged, TMP_FontAsset font)
+        {
+            if (MaterialReference.Contains(m_materialReferences, font))
+            {
+                //Debug.Log("ON_FONT_PROPERTY_CHANGED event received.");
+                m_isInputParsingRequired = true;
+                m_havePropertiesChanged = true;
+
+                UpdateMeshPadding();
+
+                SetLayoutDirty();
+                SetVerticesDirty();
+            }
+        }
+
+
+        // Event received when UNDO / REDO Event alters the properties of the object.
+        void ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(bool isChanged, TextMeshProUGUI obj)
+        {
+            //Debug.Log("Event Received by " + obj);
+            
+            if (obj == this)
+            {
+                //Debug.Log("Undo / Redo Event Received by Object ID:" + GetInstanceID());
+                m_havePropertiesChanged = true;
+                m_isInputParsingRequired = true;
+
+                ComputeMarginSize(); // Review this change
+                SetVerticesDirty();
+            }
+        }
+
+
+        // Event to Track Material Changed resulting from Drag-n-drop.
+        void ON_DRAG_AND_DROP_MATERIAL(GameObject obj, Material currentMaterial, Material newMaterial)
+        {
+            //Debug.Log("Drag-n-Drop Event - Receiving Object ID " + GetInstanceID() + ". Sender ID " + obj.GetInstanceID()); // +  ". Prefab Parent is " + UnityEditor.PrefabUtility.GetPrefabParent(gameObject).GetInstanceID()); // + ". New Material is " + newMaterial.name + " with ID " + newMaterial.GetInstanceID() + ". Base Material is " + m_baseMaterial.name + " with ID " + m_baseMaterial.GetInstanceID());
+
+            // Check if event applies to this current object
+            #if UNITY_2018_2_OR_NEWER
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject) == obj)
+            #else
+            if (obj == gameObject || UnityEditor.PrefabUtility.GetPrefabParent(gameObject) == obj)
+            #endif
+            {
+                UnityEditor.Undo.RecordObject(this, "Material Assignment");
+                UnityEditor.Undo.RecordObject(m_canvasRenderer, "Material Assignment");
+
+                m_sharedMaterial = newMaterial;
+
+                m_padding = GetPaddingForMaterial();
+
+                m_havePropertiesChanged = true;
+                SetVerticesDirty();
+                SetMaterialDirty();
+            }
+        }
+
+
+        // Event received when Text Styles are changed.
+        void ON_TEXT_STYLE_CHANGED(bool isChanged)
+        {
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            SetVerticesDirty();
+        }
+
+
+        /// <summary>
+        /// Event received when a Color Gradient Preset is modified.
+        /// </summary>
+        /// <param name="textObject"></param>
+        void ON_COLOR_GRADIENT_CHANGED(TMP_ColorGradient gradient)
+        {
+            if (m_fontColorGradientPreset != null && gradient.GetInstanceID() == m_fontColorGradientPreset.GetInstanceID())
+            {
+                m_havePropertiesChanged = true;
+                SetVerticesDirty();
+            }
+        }
+
+
+        /// <summary>
+        /// Event received when the TMP Settings are changed.
+        /// </summary>
+        void ON_TMP_SETTINGS_CHANGED()
+        {
+            m_defaultSpriteAsset = null;
+            m_havePropertiesChanged = true;
+            m_isInputParsingRequired = true;
+            SetAllDirty();
+        }
+        #endif
+
+
+        // Function which loads either the default font or a newly assigned font asset. This function also assigned the appropriate material to the renderer.
+        protected override void LoadFontAsset()
+        {
+            //Debug.Log("***** LoadFontAsset() *****"); //TextMeshPro LoadFontAsset() has been called."); // Current Font Asset is " + (font != null ? font.name: "Null") );
+            
+            ShaderUtilities.GetShaderPropertyIDs(); // Initialize & Get shader property IDs.
+
+            if (m_fontAsset == null)
+            {
+                if (TMP_Settings.defaultFontAsset != null)
+                    m_fontAsset = TMP_Settings.defaultFontAsset;
+                else
+                    m_fontAsset = Resources.Load<TMP_FontAsset>("Fonts & Materials/LiberationSans SDF");
+
+                if (m_fontAsset == null)
+                {
+                    Debug.LogWarning("The LiberationSans SDF Font Asset was not found. There is no Font Asset assigned to " + gameObject.name + ".", this);
+                    return;
+                }
+
+                if (m_fontAsset.characterLookupTable == null)
+                {
+                    Debug.Log("Dictionary is Null!");
+                }
+
+                m_sharedMaterial = m_fontAsset.material;
+            }
+            else
+            {
+                // Read font definition if needed.
+                if (m_fontAsset.characterLookupTable == null)
+                    m_fontAsset.ReadFontAssetDefinition();
+
+                // Added for compatibility with previous releases.
+                if (m_sharedMaterial == null && m_baseMaterial != null)
+                {
+                    m_sharedMaterial = m_baseMaterial;
+                    m_baseMaterial = null;
+                }
+
+                // If font atlas texture doesn't match the assigned material font atlas, switch back to default material specified in the Font Asset.
+                if (m_sharedMaterial == null || m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex) == null || m_fontAsset.atlasTexture.GetInstanceID() != m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                {
+                    if (m_fontAsset.material == null)
+                        Debug.LogWarning("The Font Atlas Texture of the Font Asset " + m_fontAsset.name + " assigned to " + gameObject.name + " is missing.", this);
+                    else
+                        m_sharedMaterial = m_fontAsset.material;
+                }
+            }
+
+
+            // Find and cache Underline & Ellipsis characters.
+            GetSpecialCharacters(m_fontAsset);
+
+            m_padding = GetPaddingForMaterial();
+
+            SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// Method to retrieve the parent Canvas.
+        /// </summary>
+        private Canvas GetCanvas()
+        {
+            Canvas canvas = null;
+            var list = TMP_ListPool<Canvas>.Get();
+
+            gameObject.GetComponentsInParent(false, list);
+            if (list.Count > 0)
+            {
+                // Find the first active and enabled canvas.
+                for (int i = 0; i < list.Count; ++i)
+                {
+                    if (list[i].isActiveAndEnabled)
+                    {
+                        canvas = list[i];
+                        break;
+                    }
+                }
+            }
+
+            TMP_ListPool<Canvas>.Release(list);
+
+            return canvas;
+        }
+
+
+        /// <summary>
+        /// Method used when animating the Env Map on the material.
+        /// </summary>
+        void UpdateEnvMapMatrix()
+        {
+            if (!m_sharedMaterial.HasProperty(ShaderUtilities.ID_EnvMap) || m_sharedMaterial.GetTexture(ShaderUtilities.ID_EnvMap) == null)
+                return;
+
+            //Debug.Log("Updating Env Matrix...");
+            Vector3 rotation = m_sharedMaterial.GetVector(ShaderUtilities.ID_EnvMatrixRotation);
+            m_EnvMapMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(rotation), Vector3.one);
+
+            m_sharedMaterial.SetMatrix(ShaderUtilities.ID_EnvMatrix, m_EnvMapMatrix);
+        }
+
+
+        // Enable Masking in the Shader
+        void EnableMasking()
+        {
+            if (m_fontMaterial == null)
+            {
+                m_fontMaterial = CreateMaterialInstance(m_sharedMaterial);
+                m_canvasRenderer.SetMaterial(m_fontMaterial, m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+            }
+
+            m_sharedMaterial = m_fontMaterial;
+            if (m_sharedMaterial.HasProperty(ShaderUtilities.ID_ClipRect))
+            {
+                m_sharedMaterial.EnableKeyword(ShaderUtilities.Keyword_MASK_SOFT);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_HARD);
+                m_sharedMaterial.DisableKeyword(ShaderUtilities.Keyword_MASK_TEX);
+
+                UpdateMask(); // Update Masking Coordinates
+            }
+
+            m_isMaskingEnabled = true;
+
+            //m_uiRenderer.SetMaterial(m_sharedMaterial, null);
+
+            //m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_enableExtraPadding, m_isUsingBold);
+            //m_alignmentPadding = ShaderUtilities.GetFontExtent(m_sharedMaterial);
+
+            /*
+            Material mat = m_uiRenderer.GetMaterial();
+            if (mat.HasProperty(ShaderUtilities.ID_MaskCoord))
+            {
+                mat.EnableKeyword("MASK_SOFT");
+                mat.DisableKeyword("MASK_HARD");
+                mat.DisableKeyword("MASK_OFF");
+
+                m_isMaskingEnabled = true;
+                UpdateMask();
+            }
+            */
+        }
+
+
+        // Enable Masking in the Shader
+        void DisableMasking()
+        {
+            if (m_fontMaterial != null)
+            {
+                if (m_stencilID > 0)
+                    m_sharedMaterial = m_MaskMaterial;
+                else
+                    m_sharedMaterial = m_baseMaterial;
+                           
+                m_canvasRenderer.SetMaterial(m_sharedMaterial, m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+
+                DestroyImmediate(m_fontMaterial);
+            }
+              
+            m_isMaskingEnabled = false;
+            
+            /*
+            if (m_maskingMaterial != null && m_stencilID == 0)
+            {
+                m_sharedMaterial = m_baseMaterial;
+                m_uiRenderer.SetMaterial(m_sharedMaterial, null);
+            }
+            else if (m_stencilID > 0)
+            {
+                m_sharedMaterial.EnableKeyword("MASK_OFF");
+                m_sharedMaterial.DisableKeyword("MASK_HARD");
+                m_sharedMaterial.DisableKeyword("MASK_SOFT");
+            }
+            */
+             
+          
+            /*
+            Material mat = m_uiRenderer.GetMaterial();
+            if (mat.HasProperty(ShaderUtilities.ID_MaskCoord))
+            {
+                mat.EnableKeyword("MASK_OFF");
+                mat.DisableKeyword("MASK_HARD");
+                mat.DisableKeyword("MASK_SOFT");
+
+                m_isMaskingEnabled = false;
+                UpdateMask();
+            }
+            */
+        }
+
+
+        // Update & recompute Mask offset
+        void UpdateMask()
+        {
+            //Debug.Log("Updating Mask...");
+
+            if (m_rectTransform != null)
+            {
+                //Material mat = m_uiRenderer.GetMaterial();
+                //if (mat == null || (m_overflowMode == TextOverflowModes.ScrollRect && m_isScrollRegionSet))
+                //    return;
+
+                if (!ShaderUtilities.isInitialized)
+                    ShaderUtilities.GetShaderPropertyIDs();
+                
+                //Debug.Log("Setting Mask for the first time.");
+
+                m_isScrollRegionSet = true;
+
+                float softnessX = Mathf.Min(Mathf.Min(m_margin.x, m_margin.z), m_sharedMaterial.GetFloat(ShaderUtilities.ID_MaskSoftnessX));
+                float softnessY = Mathf.Min(Mathf.Min(m_margin.y, m_margin.w), m_sharedMaterial.GetFloat(ShaderUtilities.ID_MaskSoftnessY));
+
+                softnessX = softnessX > 0 ? softnessX : 0;
+                softnessY = softnessY > 0 ? softnessY : 0;
+
+                float width = (m_rectTransform.rect.width - Mathf.Max(m_margin.x, 0) - Mathf.Max(m_margin.z, 0)) / 2 + softnessX;
+                float height = (m_rectTransform.rect.height - Mathf.Max(m_margin.y, 0) - Mathf.Max(m_margin.w, 0)) / 2 + softnessY;
+
+                
+                Vector2 center = m_rectTransform.localPosition + new Vector3((0.5f - m_rectTransform.pivot.x) * m_rectTransform.rect.width + (Mathf.Max(m_margin.x, 0) - Mathf.Max(m_margin.z, 0)) / 2, (0.5f - m_rectTransform.pivot.y) * m_rectTransform.rect.height + (-Mathf.Max(m_margin.y, 0) + Mathf.Max(m_margin.w, 0)) / 2);
+        
+                //Vector2 center = m_rectTransform.localPosition + new Vector3((0.5f - m_rectTransform.pivot.x) * m_rectTransform.rect.width + (margin.x - margin.z) / 2, (0.5f - m_rectTransform.pivot.y) * m_rectTransform.rect.height + (-margin.y + margin.w) / 2);
+                Vector4 mask = new Vector4(center.x, center.y, width, height);
+                //Debug.Log(mask);
+
+
+
+                //Rect rect = new Rect(0, 0, m_rectTransform.rect.width + margin.x + margin.z, m_rectTransform.rect.height + margin.y + margin.w);
+                //int softness = (int)m_sharedMaterial.GetFloat(ShaderUtilities.ID_MaskSoftnessX) / 2;
+                m_sharedMaterial.SetVector(ShaderUtilities.ID_ClipRect, mask);
+            }
+        }
+
+
+        // Function called internally when a new material is assigned via the fontMaterial property.
+        protected override Material GetMaterial(Material mat)
+        {
+            // Get Shader PropertyIDs if they haven't been cached already.
+            ShaderUtilities.GetShaderPropertyIDs();
+            
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object.
+            //if (m_canvasRenderer == null)
+            //    m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+            // Create Instance Material only if the new material is not the same instance previously used.
+            if (m_fontMaterial == null || m_fontMaterial.GetInstanceID() != mat.GetInstanceID())
+                m_fontMaterial = CreateMaterialInstance(mat);
+
+            m_sharedMaterial = m_fontMaterial;
+
+            m_padding = GetPaddingForMaterial();
+
+            m_ShouldRecalculateStencil = true;
+            SetVerticesDirty();
+            SetMaterialDirty();
+
+            return m_sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Method returning instances of the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected override Material[] GetMaterials(Material[] mats)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            if (m_fontMaterials == null)
+                m_fontMaterials = new Material[materialCount];
+            else if (m_fontMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontMaterials, materialCount, false);
+
+            // Get instances of the materials
+            for (int i = 0; i < materialCount; i++)
+            {
+                if (i == 0)
+                    m_fontMaterials[i] = fontMaterial;
+                else
+                    m_fontMaterials[i] = m_subTextObjects[i].material;
+            }
+
+            m_fontSharedMaterials = m_fontMaterials;
+
+            return m_fontMaterials;
+        }
+
+
+        // Function called internally when a new shared material is assigned via the fontSharedMaterial property.
+        protected override void SetSharedMaterial(Material mat) 
+        {
+            // Check in case Object is disabled. If so, we don't have a valid reference to the Renderer.
+            // This can occur when the Duplicate Material Context menu is used on an inactive object. 
+            //if (m_canvasRenderer == null)
+            //    m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+            m_sharedMaterial = mat;
+
+            m_padding = GetPaddingForMaterial();
+
+            SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// Method returning an array containing the materials used by the text object.
+        /// </summary>
+        /// <returns></returns>
+        protected override Material[] GetSharedMaterials()
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            if (m_fontSharedMaterials == null)
+                m_fontSharedMaterials = new Material[materialCount];
+            else if (m_fontSharedMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontSharedMaterials, materialCount, false);
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                if (i == 0)
+                    m_fontSharedMaterials[i] = m_sharedMaterial;
+                else
+                    m_fontSharedMaterials[i] = m_subTextObjects[i].sharedMaterial;
+            }
+
+            return m_fontSharedMaterials;
+        }
+
+
+        /// <summary>
+        /// Method used to assign new materials to the text and sub text objects.
+        /// </summary>
+        protected override void SetSharedMaterials(Material[] materials)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            // Check allocation of the fontSharedMaterials array.
+            if (m_fontSharedMaterials == null)
+                m_fontSharedMaterials = new Material[materialCount];
+            else if (m_fontSharedMaterials.Length != materialCount)
+                TMP_TextInfo.Resize(ref m_fontSharedMaterials, materialCount, false);
+
+            // Only assign as many materials as the text object contains.
+            for (int i = 0; i < materialCount; i++)
+            {
+                if (i == 0)
+                {
+                    // Only assign new material if the font atlas textures match.
+                    if (materials[i].GetTexture(ShaderUtilities.ID_MainTex) == null || materials[i].GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() != m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        continue;
+
+                    m_sharedMaterial = m_fontSharedMaterials[i] = materials[i];
+                    m_padding = GetPaddingForMaterial(m_sharedMaterial);
+                }
+                else
+                {
+                    // Only assign new material if the font atlas textures match.
+                    if (materials[i].GetTexture(ShaderUtilities.ID_MainTex) == null || materials[i].GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() != m_subTextObjects[i].sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        continue;
+
+                    // Only assign a new material if none were specified in the text input.
+                    if (m_subTextObjects[i].isDefaultMaterial)
+                        m_subTextObjects[i].sharedMaterial = m_fontSharedMaterials[i] = materials[i];
+                }
+            }
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetOutlineThickness(float thickness)
+        {
+            // Use material instance if one exists. Otherwise, create a new instance of the shared material.
+            if (m_fontMaterial != null && m_sharedMaterial.GetInstanceID() != m_fontMaterial.GetInstanceID())
+            {
+                m_sharedMaterial = m_fontMaterial;
+                m_canvasRenderer.SetMaterial(m_sharedMaterial, m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+            }
+            else if(m_fontMaterial == null)
+            {
+                m_fontMaterial = CreateMaterialInstance(m_sharedMaterial);
+                m_sharedMaterial = m_fontMaterial;
+                m_canvasRenderer.SetMaterial(m_sharedMaterial, m_sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex));
+            }
+
+            thickness = Mathf.Clamp01(thickness);
+            m_sharedMaterial.SetFloat(ShaderUtilities.ID_OutlineWidth, thickness);
+            m_padding = GetPaddingForMaterial();
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetFaceColor(Color32 color)
+        {
+            // Use material instance if one exists. Otherwise, create a new instance of the shared material.
+            if (m_fontMaterial == null)
+                m_fontMaterial = CreateMaterialInstance(m_sharedMaterial);
+
+            m_sharedMaterial = m_fontMaterial;
+            m_padding = GetPaddingForMaterial();
+
+            m_sharedMaterial.SetColor(ShaderUtilities.ID_FaceColor, color);
+        }
+
+
+        // This function will create an instance of the Font Material.
+        protected override void SetOutlineColor(Color32 color)
+        {
+            // Use material instance if one exists. Otherwise, create a new instance of the shared material.
+            if (m_fontMaterial == null)
+                m_fontMaterial = CreateMaterialInstance(m_sharedMaterial);
+
+            m_sharedMaterial = m_fontMaterial;
+            m_padding = GetPaddingForMaterial();
+
+            m_sharedMaterial.SetColor(ShaderUtilities.ID_OutlineColor, color);
+        }
+
+
+        // Sets the Render Queue and Ztest mode 
+        protected override void SetShaderDepth()
+        {
+            if (m_canvas == null || m_sharedMaterial == null)
+                return;
+
+            if (m_canvas.renderMode == RenderMode.ScreenSpaceOverlay || m_isOverlay)
+            {
+                // Should this use an instanced material?
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 0);
+            }
+            else
+            {   // TODO: This section needs to be tested.
+                m_sharedMaterial.SetFloat(ShaderUtilities.ShaderTag_ZTestMode, 4);
+            }
+        }
+
+
+        // Sets the Culling mode of the material
+        protected override void SetCulling()
+        {
+            if (m_isCullingEnabled)
+            {
+                Material mat = materialForRendering;
+
+                if (mat != null)
+                    mat.SetFloat("_CullMode", 2);
+
+                for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+                {
+                    mat = m_subTextObjects[i].materialForRendering;
+
+                    if (mat != null)
+                    {
+                        mat.SetFloat(ShaderUtilities.ShaderTag_CullMode, 2);
+                    }
+                }
+            }
+            else
+            {
+                Material mat = materialForRendering;
+
+                if (mat != null)
+                    mat.SetFloat("_CullMode", 0);
+
+                for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+                {
+                    mat = m_subTextObjects[i].materialForRendering;
+
+                    if (mat != null)
+                    {
+                        mat.SetFloat(ShaderUtilities.ShaderTag_CullMode, 0);
+                    }
+                }
+            }
+        }
+
+
+        // Set Perspective Correction Mode based on whether Camera is Orthographic or Perspective
+        void SetPerspectiveCorrection()
+        {
+            if (m_isOrthographic)
+                m_sharedMaterial.SetFloat(ShaderUtilities.ID_PerspectiveFilter, 0.0f);
+            else
+                m_sharedMaterial.SetFloat(ShaderUtilities.ID_PerspectiveFilter, 0.875f);
+        }
+
+
+        /// <summary>
+        /// Get the padding value for the currently assigned material.
+        /// </summary>
+        /// <returns></returns>
+        protected override float GetPaddingForMaterial(Material mat)
+        {
+            m_padding = ShaderUtilities.GetPadding(mat, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_isSDFShader = mat.HasProperty(ShaderUtilities.ID_WeightNormal);
+
+            return m_padding;
+        }
+
+
+        /// <summary>
+        /// Get the padding value for the currently assigned material.
+        /// </summary>
+        /// <returns></returns>
+        protected override float GetPaddingForMaterial()
+        {
+            ShaderUtilities.GetShaderPropertyIDs();
+
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_isSDFShader = m_sharedMaterial.HasProperty(ShaderUtilities.ID_WeightNormal);
+
+            return m_padding;
+        }
+
+        // Function to allocate the necessary buffers to render the text. This function is called whenever the buffer size needs to be increased.
+        void SetMeshArrays(int size)
+        {
+            m_textInfo.meshInfo[0].ResizeMeshInfo(size);
+
+            m_canvasRenderer.SetMesh(m_textInfo.meshInfo[0].mesh);
+        }
+
+
+        // This function parses through the Char[] to determine how many characters will be visible. It then makes sure the arrays are large enough for all those characters.
+        protected override int SetArraySizes(UnicodeChar[] chars)
+        {
+            //Debug.Log("*** SetArraySizes() on Instance ID (" + GetInstanceID() + ") ***");
+            #if TMP_PROFILE_ON
+            Profiler.BeginSample("SetArraySizes");
+            #endif
+
+            int spriteCount = 0;
+
+            m_totalCharacterCount = 0;
+            m_isUsingBold = false;
+            m_isParsingText = false;
+            tag_NoParsing = false;
+            m_FontStyleInternal = m_fontStyle;
+
+            m_FontWeightInternal = (m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold ? FontWeight.Bold : m_fontWeight;
+            m_FontWeightStack.SetDefault(m_FontWeightInternal);
+
+            m_currentFontAsset = m_fontAsset;
+            m_currentMaterial = m_sharedMaterial;
+            m_currentMaterialIndex = 0;
+
+            m_materialReferenceStack.SetDefault(new MaterialReference(m_currentMaterialIndex, m_currentFontAsset, null, m_currentMaterial, m_padding));
+
+            m_materialReferenceIndexLookup.Clear();
+            MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+
+            if (m_textInfo == null) m_textInfo = new TMP_TextInfo();
+            m_textElementType = TMP_TextElementType.Character;
+
+            // Clear Linked Text object if we have one.
+            if (m_linkedTextComponent != null)
+            {
+                m_linkedTextComponent.text = string.Empty;
+                m_linkedTextComponent.ForceMeshUpdate();
+            }
+
+            // Parsing XML tags in the text
+            for (int i = 0; i < chars.Length && chars[i].unicode != 0; i++)
+            {
+                //Make sure the characterInfo array can hold the next text element.
+                if (m_textInfo.characterInfo == null || m_totalCharacterCount >= m_textInfo.characterInfo.Length)
+                    TMP_TextInfo.Resize(ref m_textInfo.characterInfo, m_totalCharacterCount + 1, true);
+
+                int unicode = chars[i].unicode;
+
+                // PARSE XML TAGS
+                #region PARSE XML TAGS
+                if (m_isRichText && unicode == 60) // if Char '<'
+                {
+                    int prev_MaterialIndex = m_currentMaterialIndex;
+                    int tagEndIndex;
+
+                    // Check if Tag is Valid
+                    if (ValidateHtmlTag(chars, i + 1, out tagEndIndex))
+                    {
+                        int tagStartIndex = chars[i].stringIndex;
+                        i = tagEndIndex;
+
+                        if ((m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold) m_isUsingBold = true;
+
+                        if (m_textElementType == TMP_TextElementType.Sprite)
+                        {
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)(57344 + m_spriteIndex);
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = m_spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = m_currentSpriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = m_currentSpriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = tagStartIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].stringIndex - tagStartIndex + 1;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_MaterialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+                        }
+
+                        continue;
+                    }
+                }
+                #endregion
+
+                bool isUsingAlternativeTypeface = false;
+                bool isUsingFallbackOrAlternativeTypeface = false;
+
+                TMP_Character character;
+                TMP_FontAsset tempFontAsset;
+                TMP_FontAsset prev_fontAsset = m_currentFontAsset;
+                Material prev_material = m_currentMaterial;
+                int prev_materialIndex = m_currentMaterialIndex;
+
+
+                // Handle Font Styles like LowerCase, UpperCase and SmallCaps.
+                #region Handling of LowerCase, UpperCase and SmallCaps Font Styles
+                if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    if ((m_FontStyleInternal & FontStyles.UpperCase) == FontStyles.UpperCase)
+                    {
+                        // If this character is lowercase, switch to uppercase.
+                        if (char.IsLower((char)unicode))
+                            unicode = char.ToUpper((char)unicode);
+
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.LowerCase) == FontStyles.LowerCase)
+                    {
+                        // If this character is uppercase, switch to lowercase.
+                        if (char.IsUpper((char)unicode))
+                            unicode = char.ToLower((char)unicode);
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.SmallCaps) == FontStyles.SmallCaps)
+                    {
+                        // Only convert lowercase characters to uppercase.
+                        if (char.IsLower((char)unicode))
+                            unicode = char.ToUpper((char)unicode);
+                    }
+                }
+                #endregion
+
+
+                // Lookup the Glyph data for each character and cache it.
+                #region LOOKUP GLYPH
+                character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, false, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                // Search for the glyph in the list of fallback assigned to the primary font asset.
+                if (character == null)
+                {
+                    if (m_currentFontAsset.fallbackFontAssetTable != null && m_currentFontAsset.fallbackFontAssetTable.Count > 0)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, m_currentFontAsset.fallbackFontAssetTable, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // Search for the glyph in the Sprite Asset assigned to the text object.
+                if (character == null)
+                {
+                    TMP_SpriteAsset spriteAsset = this.spriteAsset;
+
+                    if (spriteAsset != null)
+                    {
+                        int spriteIndex = -1;
+
+                        // Check Default Sprite Asset and its Fallbacks
+                        spriteAsset = TMP_SpriteAsset.SearchForSpriteByUnicode(spriteAsset, (uint)unicode, true, out spriteIndex);
+
+                        if (spriteIndex != -1)
+                        {
+                            m_textElementType = TMP_TextElementType.Sprite;
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(spriteAsset.material, spriteAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = spriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = spriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_materialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+
+                            continue;
+                        }
+                    }
+                }
+
+                // Search for the glyph in the list of fallback assigned in the TMP Settings (General Fallbacks).
+                if (character == null)
+                {
+                    if (TMP_Settings.fallbackFontAssets != null && TMP_Settings.fallbackFontAssets.Count > 0)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, TMP_Settings.fallbackFontAssets, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // Search for the glyph in the Default Font Asset assigned in the TMP Settings file.
+                if (character == null)
+                {
+                    if (TMP_Settings.defaultFontAsset != null)
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, TMP_Settings.defaultFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                }
+
+                // TODO: Add support for using Sprite Assets like a special Emoji only Sprite Asset when UTF16 or UTF32 glyphs are requested.
+                // This would kind of mirror native Emoji support.
+                if (character == null)
+                {
+                    TMP_SpriteAsset spriteAsset = TMP_Settings.defaultSpriteAsset;
+
+                    if (spriteAsset != null)
+                    {
+                        int spriteIndex = -1;
+
+                        // Check Default Sprite Asset and its Fallbacks
+                        spriteAsset = TMP_SpriteAsset.SearchForSpriteByUnicode(spriteAsset, (uint)unicode, true, out spriteIndex);
+
+                        if (spriteIndex != -1)
+                        {
+                            m_textElementType = TMP_TextElementType.Sprite;
+                            m_textInfo.characterInfo[m_totalCharacterCount].elementType = m_textElementType;
+
+                            m_currentMaterialIndex = MaterialReference.AddMaterialReference(spriteAsset.material, spriteAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                            m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+
+                            m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteIndex = spriteIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].spriteAsset = spriteAsset;
+                            m_textInfo.characterInfo[m_totalCharacterCount].textElement = spriteAsset.spriteCharacterTable[m_spriteIndex];
+                            m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                            m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                            // Restore element type and material index to previous values.
+                            m_textElementType = TMP_TextElementType.Character;
+                            m_currentMaterialIndex = prev_materialIndex;
+
+                            spriteCount += 1;
+                            m_totalCharacterCount += 1;
+
+                            continue;
+                        }
+
+                    }
+                }
+
+                //Check if Lowercase or Uppercase variant of the character is available.
+                // Not sure this is necessary anyone as it is very unlikely with recursive search through fallback fonts.
+                //if (glyph == null)
+                //{
+                //    if (char.IsLower((char)c))
+                //    {
+                //        if (m_currentFontAsset.characterDictionary.TryGetValue(char.ToUpper((char)c), out glyph))
+                //            c = chars[i] = char.ToUpper((char)c);
+                //    }
+                //    else if (char.IsUpper((char)c))
+                //    {
+                //        if (m_currentFontAsset.characterDictionary.TryGetValue(char.ToLower((char)c), out glyph))
+                //            c = chars[i] = char.ToLower((char)c);
+                //    }
+                //}
+
+                // Replace missing glyph by the Square (9633) glyph or possibly the Space (32) glyph.
+                if (character == null)
+                {
+                    // Save the original unicode character
+                    int srcGlyph = unicode;
+
+                    // Try replacing the missing glyph character by TMP Settings Missing Glyph or Square (9633) character.
+                    unicode = chars[i].unicode = TMP_Settings.missingGlyphCharacter == 0 ? 9633 : TMP_Settings.missingGlyphCharacter;
+
+                    // Check for the missing glyph character in the currently assigned font asset and its fallbacks
+                    character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+
+                    if (character == null)
+                    {
+                        // Search for the missing glyph character in the TMP Settings Fallback list.
+                        if (TMP_Settings.fallbackFontAssets != null && TMP_Settings.fallbackFontAssets.Count > 0)
+                            character = TMP_FontAssetUtilities.GetCharacterFromFontAssets((uint)unicode, TMP_Settings.fallbackFontAssets, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                    }
+
+                    if (character == null)
+                    {
+                        // Search for the missing glyph in the TMP Settings Default Font Asset.
+                        if (TMP_Settings.defaultFontAsset != null)
+                            character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, TMP_Settings.defaultFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                    }
+
+                    if (character == null)
+                    {
+                        // Use Space (32) Glyph from the currently assigned font asset.
+                        unicode = chars[i].unicode = 32;
+                        character = TMP_FontAssetUtilities.GetCharacterFromFontAsset((uint)unicode, m_currentFontAsset, true, m_FontStyleInternal, m_FontWeightInternal, out isUsingAlternativeTypeface, out tempFontAsset);
+                        if (!TMP_Settings.warningsDisabled) Debug.LogWarning("Character with ASCII value of " + srcGlyph + " was not found in the Font Asset Glyph Table. It was replaced by a space.", this);
+                    }
+                }
+
+                // Determine if the font asset is still the current font asset or a fallback.
+                if (tempFontAsset != null)
+                {
+                    if (tempFontAsset.GetInstanceID() != m_currentFontAsset.GetInstanceID())
+                    {
+                        isUsingFallbackOrAlternativeTypeface = true;
+                        m_currentFontAsset = tempFontAsset;
+                    }
+                }
+                #endregion
+
+
+                m_textInfo.characterInfo[m_totalCharacterCount].elementType = TMP_TextElementType.Character;
+                m_textInfo.characterInfo[m_totalCharacterCount].textElement = character;
+                m_textInfo.characterInfo[m_totalCharacterCount].isUsingAlternateTypeface = isUsingAlternativeTypeface;
+                m_textInfo.characterInfo[m_totalCharacterCount].character = (char)unicode;
+                m_textInfo.characterInfo[m_totalCharacterCount].fontAsset = m_currentFontAsset;
+                m_textInfo.characterInfo[m_totalCharacterCount].index = chars[i].stringIndex;
+                m_textInfo.characterInfo[m_totalCharacterCount].stringLength = chars[i].length;
+
+                if (isUsingFallbackOrAlternativeTypeface)
+                {
+                    // Create Fallback material instance matching current material preset if necessary
+                    if (TMP_Settings.matchMaterialPreset)
+                        m_currentMaterial = TMP_MaterialManager.GetFallbackMaterial(m_currentMaterial, m_currentFontAsset.material);
+                    else
+                        m_currentMaterial = m_currentFontAsset.material;
+
+                    m_currentMaterialIndex = MaterialReference.AddMaterialReference(m_currentMaterial, m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                }
+
+                if (!char.IsWhiteSpace((char)unicode) && unicode != 0x200B)
+                {
+                    // Limit the mesh of the main text object to 65535 vertices and use sub objects for the overflow.
+                    if (m_materialReferences[m_currentMaterialIndex].referenceCount < 16383)
+                        m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+                    else
+                    {
+                        m_currentMaterialIndex = MaterialReference.AddMaterialReference(new Material(m_currentMaterial), m_currentFontAsset, m_materialReferences, m_materialReferenceIndexLookup);
+                        m_materialReferences[m_currentMaterialIndex].referenceCount += 1;
+                    }
+                }
+
+                m_textInfo.characterInfo[m_totalCharacterCount].material = m_currentMaterial;
+                m_textInfo.characterInfo[m_totalCharacterCount].materialReferenceIndex = m_currentMaterialIndex;
+                m_materialReferences[m_currentMaterialIndex].isFallbackMaterial = isUsingFallbackOrAlternativeTypeface;
+
+                // Restore previous font asset and material if fallback font was used.
+                if (isUsingFallbackOrAlternativeTypeface)
+                {
+                    m_materialReferences[m_currentMaterialIndex].fallbackMaterial = prev_material;
+                    m_currentFontAsset = prev_fontAsset;
+                    m_currentMaterial = prev_material;
+                    m_currentMaterialIndex = prev_materialIndex;
+                }
+
+                m_totalCharacterCount += 1;
+            }
+
+            // Early return if we are calculating the preferred values.
+            if (m_isCalculatingPreferredValues)
+            {
+                m_isCalculatingPreferredValues = false;
+                m_isInputParsingRequired = true;
+                return m_totalCharacterCount;
+            }
+
+            // Save material and sprite count.
+            m_textInfo.spriteCount = spriteCount;
+            int materialCount = m_textInfo.materialCount = m_materialReferenceIndexLookup.Count;
+
+            // Check if we need to resize the MeshInfo array for handling different materials.
+            if (materialCount > m_textInfo.meshInfo.Length)
+                TMP_TextInfo.Resize(ref m_textInfo.meshInfo, materialCount, false);
+
+            // Resize SubTextObject array if necessary
+            if (materialCount > m_subTextObjects.Length)
+                TMP_TextInfo.Resize(ref m_subTextObjects, Mathf.NextPowerOfTwo(materialCount + 1));
+
+            // Resize CharacterInfo[] if allocations are excessive
+            if (m_textInfo.characterInfo.Length - m_totalCharacterCount > 256)
+                TMP_TextInfo.Resize(ref m_textInfo.characterInfo, Mathf.Max(m_totalCharacterCount + 1, 256), true);
+
+
+            // Iterate through the material references to set the mesh buffer allocations
+            for (int i = 0; i < materialCount; i++)
+            {
+                // Add new sub text object for each material reference
+                if (i > 0)
+                {
+                    if (m_subTextObjects[i] == null)
+                    {
+                        m_subTextObjects[i] = TMP_SubMeshUI.AddSubTextObject(this, m_materialReferences[i]);
+
+                        // Not sure this is necessary
+                        m_textInfo.meshInfo[i].vertices = null;
+                    }
+                    //else if (m_subTextObjects[i].gameObject.activeInHierarchy == false)
+                    //    m_subTextObjects[i].gameObject.SetActive(true);
+
+                    // Make sure the pivots are synchronized
+                    if (m_rectTransform.pivot != m_subTextObjects[i].rectTransform.pivot)
+                        m_subTextObjects[i].rectTransform.pivot = m_rectTransform.pivot;
+
+                    // Check if the material has changed.
+                    if (m_subTextObjects[i].sharedMaterial == null || m_subTextObjects[i].sharedMaterial.GetInstanceID() != m_materialReferences[i].material.GetInstanceID())
+                    {
+                        bool isDefaultMaterial = m_materialReferences[i].isDefaultMaterial;
+
+                        m_subTextObjects[i].isDefaultMaterial = isDefaultMaterial;
+
+                        // Assign new material if we are not using the default material or if the font asset has changed.
+                        if (!isDefaultMaterial || m_subTextObjects[i].sharedMaterial == null || m_subTextObjects[i].sharedMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() != m_materialReferences[i].material.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID())
+                        {
+                            m_subTextObjects[i].sharedMaterial = m_materialReferences[i].material;
+                            m_subTextObjects[i].fontAsset = m_materialReferences[i].fontAsset;
+                            m_subTextObjects[i].spriteAsset = m_materialReferences[i].spriteAsset;
+                        }
+                    }
+
+                    // Check if we need to use a Fallback Material
+                    if (m_materialReferences[i].isFallbackMaterial)
+                    {
+                        m_subTextObjects[i].fallbackMaterial = m_materialReferences[i].material;
+                        m_subTextObjects[i].fallbackSourceMaterial = m_materialReferences[i].fallbackMaterial;
+                    }
+
+                }
+
+                int referenceCount = m_materialReferences[i].referenceCount;
+
+                // Check to make sure our buffers allocations can accommodate the required text elements.
+                if (m_textInfo.meshInfo[i].vertices == null || m_textInfo.meshInfo[i].vertices.Length < referenceCount * 4)
+                {
+                    if (m_textInfo.meshInfo[i].vertices == null)
+                    {
+                        if (i == 0)
+                            m_textInfo.meshInfo[i] = new TMP_MeshInfo(m_mesh, referenceCount + 1);
+                        else
+                            m_textInfo.meshInfo[i] = new TMP_MeshInfo(m_subTextObjects[i].mesh, referenceCount + 1);
+                    }
+                    else
+                        m_textInfo.meshInfo[i].ResizeMeshInfo(referenceCount > 1024 ? referenceCount + 256 : Mathf.NextPowerOfTwo(referenceCount + 1));
+                }
+                else if (m_VertexBufferAutoSizeReduction && referenceCount > 0 && m_textInfo.meshInfo[i].vertices.Length / 4 - referenceCount > 256)
+                {
+                    // Resize vertex buffers if allocations are excessive.
+                    //Debug.Log("Reducing the size of the vertex buffers.");
+                    m_textInfo.meshInfo[i].ResizeMeshInfo(referenceCount > 1024 ? referenceCount + 256 : Mathf.NextPowerOfTwo(referenceCount + 1));
+                }
+            }
+
+            //TMP_MaterialManager.CleanupFallbackMaterials();
+
+            // Clean up unused SubMeshes
+            for (int i = materialCount; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                if (i < m_textInfo.meshInfo.Length)
+                {
+                    m_subTextObjects[i].canvasRenderer.SetMesh(null);
+
+                    // TODO: Figure out a way to handle this without running into Unity's Rebuild loop issue.
+                    //m_subTextObjects[i].gameObject.SetActive(false);
+                }
+            }
+
+            #if TMP_PROFILE_ON
+            Profiler.EndSample();
+            #endif
+
+            return m_totalCharacterCount;
+        }
+
+
+        // Added to sort handle the potential issue with OnWillRenderObject() not getting called when objects are not visible by camera.
+        //void OnBecameInvisible()
+        //{
+        //    if (m_mesh != null)
+        //        m_mesh.bounds = new Bounds(transform.position, new Vector3(1000, 1000, 0));
+        //}
+
+
+        /// <summary>
+        /// Update the margin width and height
+        /// </summary>
+        public override void ComputeMarginSize()
+        {
+            if (this.rectTransform != null)
+            {
+                //Debug.Log("*** ComputeMarginSize() *** Current RectTransform's Width is " + m_rectTransform.rect.width + " and Height is " + m_rectTransform.rect.height); // + " and size delta is "  + m_rectTransform.sizeDelta);
+
+                m_marginWidth = m_rectTransform.rect.width - m_margin.x - m_margin.z;
+                m_marginHeight = m_rectTransform.rect.height - m_margin.y - m_margin.w;
+
+                // Update the corners of the RectTransform
+                m_RectTransformCorners = GetTextContainerLocalCorners();
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnDidApplyAnimationProperties()
+        {
+            m_havePropertiesChanged = true;
+            SetVerticesDirty();
+            SetLayoutDirty();
+            //Debug.Log("Animation Properties have changed.");
+        }
+
+
+        protected override void OnCanvasHierarchyChanged()
+        {
+            base.OnCanvasHierarchyChanged();
+            m_canvas = this.canvas;
+        }
+
+
+        protected override void OnTransformParentChanged()
+        {
+            //Debug.Log("***** OnTransformParentChanged *****");
+
+            base.OnTransformParentChanged();
+
+            m_canvas = this.canvas;
+
+            ComputeMarginSize();
+            m_havePropertiesChanged = true;
+        }
+
+
+        protected override void OnRectTransformDimensionsChange()
+        {
+            //Debug.Log("*** OnRectTransformDimensionsChange() *** ActiveInHierarchy: " + this.gameObject.activeInHierarchy + "  Frame: " + Time.frameCount); 
+
+            // Make sure object is active in Hierarchy
+            if (!this.gameObject.activeInHierarchy)
+                return;
+
+            ComputeMarginSize();
+
+            UpdateSubObjectPivot();
+
+            SetVerticesDirty();
+            SetLayoutDirty();
+        }
+
+
+        /// <summary>
+        /// Function used as a replacement for LateUpdate to check if the transform or scale of the text object has changed.
+        /// </summary>
+        internal override void InternalUpdate()
+        {
+            // We need to update the SDF scale or possibly regenerate the text object if lossy scale has changed.
+            if (m_havePropertiesChanged == false)
+            {
+                float lossyScaleY = m_rectTransform.lossyScale.y;
+                if (lossyScaleY != m_previousLossyScaleY && m_text != string.Empty && m_text != null)
+                {
+                    float scaleDelta = lossyScaleY / m_previousLossyScaleY;
+
+                    UpdateSDFScale(scaleDelta);
+
+                    m_previousLossyScaleY = lossyScaleY;
+                }
+            }
+
+            // Added to handle legacy animation mode.
+            if (m_isUsingLegacyAnimationComponent)
+            {
+                //if (m_havePropertiesChanged)
+                m_havePropertiesChanged = true;
+                OnPreRenderCanvas();
+            }
+        }
+
+
+
+        // Called just before the Canvas is rendered.
+        void OnPreRenderCanvas()
+        {
+            //Debug.Log("*** OnPreRenderCanvas() *** Frame: " + Time.frameCount); 
+
+            // Make sure object is active and that we have a valid Canvas.
+            if (!m_isAwake || (this.IsActive() == false && m_ignoreActiveState == false)) return;
+
+            if (m_canvas == null) { m_canvas = this.canvas; if (m_canvas == null) return; }
+
+
+            // Debug Variables
+            loopCountA = 0;
+            //loopCountB = 0;
+            //loopCountC = 0;
+            //loopCountD = 0;
+            //loopCountE = 0;
+
+            // Update Margins
+            //ComputeMarginSize();
+
+            // Update Mask
+            //    if (m_isMaskingEnabled)
+            //    {
+            //        UpdateMask();
+            //    }
+
+
+            if (m_havePropertiesChanged || m_isLayoutDirty)
+            {
+                //Debug.Log("Properties have changed!"); // Assigned Material is:" + m_sharedMaterial); // New Text is: " + m_text + ".");
+
+                // Update mesh padding if necessary.
+                if (checkPaddingRequired)
+                    UpdateMeshPadding();
+
+                // Reparse the text if the input has changed or text was truncated.
+                if (m_isInputParsingRequired || m_isTextTruncated)
+                    ParseInputText();
+
+                // Reset Font min / max used with Auto-sizing
+                if (m_enableAutoSizing)
+                    m_fontSize = Mathf.Clamp(m_fontSizeBase, m_fontSizeMin, m_fontSizeMax);
+
+                m_maxFontSize = m_fontSizeMax;
+                m_minFontSize = m_fontSizeMin;
+                m_lineSpacingDelta = 0;
+                m_charWidthAdjDelta = 0;
+                //m_recursiveCount = 0;
+
+                m_isCharacterWrappingEnabled = false;
+                m_isTextTruncated = false;
+
+                m_havePropertiesChanged = false;
+                m_isLayoutDirty = false;
+                m_ignoreActiveState = false;
+
+                GenerateTextMesh();
+            }
+        }
+
+
+
+        /// <summary>
+        /// This is the main function that is responsible for creating / displaying the text.
+        /// </summary>
+        protected override void GenerateTextMesh()
+        {
+            //Debug.Log("*** GenerateTextMesh() ***"); // ***** Frame: " + Time.frameCount); // + ". Point Size: " + m_fontSize + ". Margins are (W) " + m_marginWidth + "  (H) " + m_marginHeight); // ". Iteration Count: " + loopCountA + ".  Min: " + m_minFontSize + "  Max: " + m_maxFontSize + "  Delta: " + (m_maxFontSize - m_minFontSize) + "  Font size is " + m_fontSize); //called for Object with ID " + GetInstanceID()); // Assigned Material is " + m_uiRenderer.GetMaterial().name); // IncludeForMasking " + this.m_IncludeForMasking); // and text is " + m_text);
+            //Profiler.BeginSample("TMP Generate Text - Pre");
+
+            // Early exit if no font asset was assigned. This should not be needed since LiberationSans SDF will be assigned by default.
+            if (m_fontAsset == null || m_fontAsset.characterLookupTable == null)
+            {
+                Debug.LogWarning("Can't Generate Mesh! No Font Asset has been assigned to Object ID: " + this.GetInstanceID());
+                return;
+            }
+
+            // Clear TextInfo
+            if (m_textInfo != null)
+                m_textInfo.Clear();
+
+            // Early exit if we don't have any Text to generate.
+            if (m_TextParsingBuffer == null || m_TextParsingBuffer.Length == 0 || m_TextParsingBuffer[0].unicode == (char)0)
+            {
+                // Clear mesh and upload changes to the mesh.
+                ClearMesh();
+
+                m_preferredWidth = 0;
+                m_preferredHeight = 0;
+
+                // Event indicating the text has been regenerated.
+                TMPro_EventManager.ON_TEXT_CHANGED(this);
+
+                return;
+            }
+
+            m_currentFontAsset = m_fontAsset;
+            m_currentMaterial = m_sharedMaterial;
+            m_currentMaterialIndex = 0;
+            m_materialReferenceStack.SetDefault(new MaterialReference(m_currentMaterialIndex, m_currentFontAsset, null, m_currentMaterial, m_padding));
+
+            m_currentSpriteAsset = m_spriteAsset;
+
+            // Stop  all Sprite Animations
+            if (m_spriteAnimator != null)
+                m_spriteAnimator.StopAllAnimations();
+
+            // Total character count is computed when the text is parsed.
+            int totalCharacterCount = m_totalCharacterCount;
+
+            // Calculate the scale of the font based on selected font size and sampling point size.
+            // baseScale is calculated using the font asset assigned to the text object.
+            float baseScale = m_fontScale = (m_fontSize / m_fontAsset.faceInfo.pointSize * m_fontAsset.faceInfo.scale);
+            float currentElementScale = baseScale;
+            m_fontScaleMultiplier = 1;
+
+            m_currentFontSize = m_fontSize;
+            m_sizeStack.SetDefault(m_currentFontSize);
+            float fontSizeDelta = 0;
+
+            int charCode = 0; // Holds the character code of the currently being processed character.
+
+            m_FontStyleInternal = m_fontStyle; // Set the default style.
+            m_FontWeightInternal = (m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold ? FontWeight.Bold : m_fontWeight;
+            m_FontWeightStack.SetDefault(m_FontWeightInternal);
+            m_fontStyleStack.Clear();
+
+            m_lineJustification = m_textAlignment; // Sets the line justification mode to match editor alignment.
+            m_lineJustificationStack.SetDefault(m_lineJustification);
+
+            float padding = 0;
+            float style_padding = 0; // Extra padding required to accommodate Bold style.
+            float bold_xAdvance_multiplier = 1; // Used to increase spacing between character when style is bold.
+
+            m_baselineOffset = 0; // Used by subscript characters.
+            m_baselineOffsetStack.Clear();
+
+            // Underline
+            bool beginUnderline = false;
+            Vector3 underline_start = Vector3.zero; // Used to track where underline starts & ends.
+            Vector3 underline_end = Vector3.zero;
+
+            // Strike-through
+            bool beginStrikethrough = false;
+            Vector3 strikethrough_start = Vector3.zero;
+            Vector3 strikethrough_end = Vector3.zero;
+
+            // Text Highlight
+            bool beginHighlight = false;
+            Vector3 highlight_start = Vector3.zero;
+            Vector3 highlight_end = Vector3.zero;
+
+            m_fontColor32 = m_fontColor;
+            Color32 vertexColor;
+            m_htmlColor = m_fontColor32;
+            m_underlineColor = m_htmlColor;
+            m_strikethroughColor = m_htmlColor;
+
+            m_colorStack.SetDefault(m_htmlColor);
+            m_underlineColorStack.SetDefault(m_htmlColor);
+            m_strikethroughColorStack.SetDefault(m_htmlColor);
+            m_highlightColorStack.SetDefault(m_htmlColor);
+
+            m_colorGradientPreset = null;
+            m_colorGradientStack.SetDefault(null);
+
+            // Clear the Style stack.
+            //m_styleStack.Clear();
+
+            // Clear the Action stack.
+            m_actionStack.Clear();
+
+            m_isFXMatrixSet = false;
+
+            m_lineOffset = 0; // Amount of space between lines (font line spacing + m_linespacing).
+            m_lineHeight = TMP_Math.FLOAT_UNSET;
+            float lineGap = m_currentFontAsset.faceInfo.lineHeight - (m_currentFontAsset.faceInfo.ascentLine - m_currentFontAsset.faceInfo.descentLine);
+
+            m_cSpacing = 0; // Amount of space added between characters as a result of the use of the <cspace> tag.
+            m_monoSpacing = 0;
+            float lineOffsetDelta = 0;
+            m_xAdvance = 0; // Used to track the position of each character.
+
+            tag_LineIndent = 0; // Used for indentation of text.
+            tag_Indent = 0;
+            m_indentStack.SetDefault(0);
+            tag_NoParsing = false;
+            //m_isIgnoringAlignment = false;
+
+            m_characterCount = 0; // Total characters in the char[]
+
+            // Tracking of line information
+            m_firstCharacterOfLine = 0;
+            m_lastCharacterOfLine = 0;
+            m_firstVisibleCharacterOfLine = 0;
+            m_lastVisibleCharacterOfLine = 0;
+            m_maxLineAscender = k_LargeNegativeFloat;
+            m_maxLineDescender = k_LargePositiveFloat;
+            m_lineNumber = 0;
+            m_lineVisibleCharacterCount = 0;
+            bool isStartOfNewLine = true;
+            m_firstOverflowCharacterIndex = -1;
+
+            m_pageNumber = 0;
+            int pageToDisplay = Mathf.Clamp(m_pageToDisplay - 1, 0, m_textInfo.pageInfo.Length - 1);
+            int previousPageOverflowChar = 0;
+
+            int ellipsisIndex = 0;
+
+            Vector4 margins = m_margin;
+            float marginWidth = m_marginWidth;
+            float marginHeight = m_marginHeight;
+            m_marginLeft = 0;
+            m_marginRight = 0;
+            m_width = -1;
+            float width = marginWidth + 0.0001f - m_marginLeft - m_marginRight;
+
+            // Need to initialize these Extents structures
+            m_meshExtents.min = k_LargePositiveVector2;
+            m_meshExtents.max = k_LargeNegativeVector2;
+
+            // Initialize lineInfo
+            m_textInfo.ClearLineInfo();
+
+            // Tracking of the highest Ascender
+            m_maxCapHeight = 0;
+            m_maxAscender = 0;
+            m_maxDescender = 0;
+            float pageAscender = 0;
+            float maxVisibleDescender = 0;
+            bool isMaxVisibleDescenderSet = false;
+            m_isNewPage = false;
+
+            // Initialize struct to track states of word wrapping
+            bool isFirstWord = true;
+            m_isNonBreakingSpace = false;
+            bool ignoreNonBreakingSpace = false;
+            bool isLastBreakingChar = false;
+            float linebreakingWidth = 0;
+            int wrappingIndex = 0;
+
+            // Save character and line state before we begin layout.
+            SaveWordWrappingState(ref m_SavedWordWrapState, -1, -1);
+            SaveWordWrappingState(ref m_SavedLineState, -1, -1);
+
+            loopCountA += 1;
+            //Profiler.EndSample();
+
+            #if TMP_PROFILE_PHASES_ON
+            Profiler.BeginSample("TMP Generate Text - Phase I");
+            #endif
+
+            // Parse through Character buffer to read HTML tags and begin creating mesh.
+            for (int i = 0; i < m_TextParsingBuffer.Length && m_TextParsingBuffer[i].unicode != 0; i++)
+            {
+                charCode = m_TextParsingBuffer[i].unicode;
+                
+                // Parse Rich Text Tag
+                #region Parse Rich Text Tag
+                if (m_isRichText && charCode == 60)  // '<'
+                {
+                    m_isParsingText = true;
+                    m_textElementType = TMP_TextElementType.Character;
+                    int tagEndIndex;
+
+                    // Check if Tag is valid. If valid, skip to the end of the validated tag.
+                    if (ValidateHtmlTag(m_TextParsingBuffer, i + 1, out tagEndIndex))
+                    {
+                        i = tagEndIndex;
+
+                        // Continue to next character or handle the sprite element
+                        if (m_textElementType == TMP_TextElementType.Character)
+                            continue;
+                    }
+                }
+                else
+                {
+                    m_textElementType = m_textInfo.characterInfo[m_characterCount].elementType;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+                    m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                }
+                #endregion End Parse Rich Text Tag
+
+                int prev_MaterialIndex = m_currentMaterialIndex;
+                bool isUsingAltTypeface = m_textInfo.characterInfo[m_characterCount].isUsingAlternateTypeface;
+
+                m_isParsingText = false;
+
+                // When using Linked text, mark character as ignored and skip to next character.
+                if (m_characterCount < m_firstVisibleCharacter)
+                {
+                    m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                    m_textInfo.characterInfo[m_characterCount].character = (char)0x200B;
+                    m_characterCount += 1;
+                    continue;
+                }
+
+                // Handle Font Styles like LowerCase, UpperCase and SmallCaps.
+                #region Handling of LowerCase, UpperCase and SmallCaps Font Styles
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Handle Font Style");
+                #endif
+                float smallCapsMultiplier = 1.0f;
+
+                if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    if ((m_FontStyleInternal & FontStyles.UpperCase) == FontStyles.UpperCase)
+                    {
+                        // If this character is lowercase, switch to uppercase.
+                        if (char.IsLower((char)charCode))
+                            charCode = char.ToUpper((char)charCode);
+
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.LowerCase) == FontStyles.LowerCase)
+                    {
+                        // If this character is uppercase, switch to lowercase.
+                        if (char.IsUpper((char)charCode))
+                            charCode = char.ToLower((char)charCode);
+                    }
+                    else if ((m_FontStyleInternal & FontStyles.SmallCaps) == FontStyles.SmallCaps)
+                    {
+                        if (char.IsLower((char)charCode))
+                        {
+                            smallCapsMultiplier = 0.8f;
+                            charCode = char.ToUpper((char)charCode);
+                        }
+                    }
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Look up Character Data from Dictionary and cache it.
+                #region Look up Character Data
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Lookup Character Data");
+                #endif
+                if (m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    // If a sprite is used as a fallback then get a reference to it and set the color to white.
+                    m_currentSpriteAsset = m_textInfo.characterInfo[m_characterCount].spriteAsset;
+                    m_spriteIndex = m_textInfo.characterInfo[m_characterCount].spriteIndex;
+
+                    TMP_SpriteCharacter sprite = m_currentSpriteAsset.spriteCharacterTable[m_spriteIndex];
+                    if (sprite == null) continue;
+
+                    // Sprites are assigned in the E000 Private Area + sprite Index
+                    if (charCode == 60)
+                        charCode = 57344 + m_spriteIndex;
+                    else
+                        m_spriteColor = s_colorWhite;
+
+                    // The sprite scale calculations are based on the font asset assigned to the text object.
+                    float spriteScale = (m_currentFontSize / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale);
+                    currentElementScale = m_currentFontAsset.faceInfo.ascentLine / sprite.glyph.metrics.height * sprite.scale * sprite.glyph.scale * spriteScale;
+
+                    m_cached_TextElement = sprite;
+
+                    m_textInfo.characterInfo[m_characterCount].elementType = TMP_TextElementType.Sprite;
+                    m_textInfo.characterInfo[m_characterCount].scale = spriteScale;
+                    m_textInfo.characterInfo[m_characterCount].spriteAsset = m_currentSpriteAsset;
+                    m_textInfo.characterInfo[m_characterCount].fontAsset = m_currentFontAsset;
+                    m_textInfo.characterInfo[m_characterCount].materialReferenceIndex = m_currentMaterialIndex;
+
+                    m_currentMaterialIndex = prev_MaterialIndex;
+
+                    padding = 0;
+                }
+                else if (m_textElementType == TMP_TextElementType.Character)
+                {
+                    m_cached_TextElement = m_textInfo.characterInfo[m_characterCount].textElement;
+                    if (m_cached_TextElement == null) continue;
+
+                    m_currentFontAsset = m_textInfo.characterInfo[m_characterCount].fontAsset;
+                    m_currentMaterial = m_textInfo.characterInfo[m_characterCount].material;
+                    m_currentMaterialIndex = m_textInfo.characterInfo[m_characterCount].materialReferenceIndex;
+
+                    // Re-calculate font scale as the font asset may have changed.
+                    m_fontScale = m_currentFontSize * smallCapsMultiplier / m_currentFontAsset.faceInfo.pointSize * m_currentFontAsset.faceInfo.scale;
+
+                    currentElementScale = m_fontScale * m_fontScaleMultiplier * m_cached_TextElement.scale * m_cached_TextElement.glyph.scale;
+
+                    m_textInfo.characterInfo[m_characterCount].elementType = TMP_TextElementType.Character;
+                    m_textInfo.characterInfo[m_characterCount].scale = currentElementScale;
+
+                    padding = m_currentMaterialIndex == 0 ? m_padding : m_subTextObjects[m_currentMaterialIndex].padding;
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Handle Soft Hyphen
+                #region Handle Soft Hyphen
+                float old_scale = currentElementScale;
+                if (charCode == 0xAD)
+                {
+                    currentElementScale = 0;
+                }
+                #endregion
+
+
+                // Store some of the text object's information
+                m_textInfo.characterInfo[m_characterCount].character = (char)charCode;
+                m_textInfo.characterInfo[m_characterCount].pointSize = m_currentFontSize;
+                m_textInfo.characterInfo[m_characterCount].color = m_htmlColor;
+                m_textInfo.characterInfo[m_characterCount].underlineColor = m_underlineColor;
+                m_textInfo.characterInfo[m_characterCount].strikethroughColor = m_strikethroughColor;
+                m_textInfo.characterInfo[m_characterCount].highlightColor = m_highlightColor;
+                m_textInfo.characterInfo[m_characterCount].style = m_FontStyleInternal;
+                //m_textInfo.characterInfo[m_characterCount].index = m_TextParsingBuffer[i].stringIndex;
+                //m_textInfo.characterInfo[m_characterCount].isIgnoringAlignment = m_isIgnoringAlignment;
+
+
+                // Handle Kerning if Enabled.
+                #region Handle Kerning
+                TMP_GlyphValueRecord glyphAdjustments = new TMP_GlyphValueRecord();
+                float characterSpacingAdjustment = m_characterSpacing;
+                if (m_enableKerning)
+                {
+                    TMP_GlyphPairAdjustmentRecord adjustmentPair;
+
+                    if (m_characterCount < totalCharacterCount - 1)
+                    {
+                        uint firstGlyphIndex = m_cached_TextElement.glyphIndex;
+                        uint secondGlyphIndex = m_textInfo.characterInfo[m_characterCount + 1].textElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments = adjustmentPair.firstAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+
+                    if (m_characterCount >= 1)
+                    {
+                        uint firstGlyphIndex = m_textInfo.characterInfo[m_characterCount - 1].textElement.glyphIndex;
+                        uint secondGlyphIndex = m_cached_TextElement.glyphIndex;
+                        long key = new GlyphPairKey(firstGlyphIndex, secondGlyphIndex).key;
+
+                        if (m_currentFontAsset.fontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.TryGetValue(key, out adjustmentPair))
+                        {
+                            glyphAdjustments += adjustmentPair.secondAdjustmentRecord.glyphValueRecord;
+                            characterSpacingAdjustment = (adjustmentPair.featureLookupFlags & FontFeatureLookupFlags.IgnoreSpacingAdjustments) == FontFeatureLookupFlags.IgnoreSpacingAdjustments ? 0 : characterSpacingAdjustment;
+                        }
+                    }
+                }
+                #endregion
+
+
+                // Initial Implementation for RTL support.
+                #region Handle Right-to-Left
+                if (m_isRightToLeft)
+                {
+                    m_xAdvance -= ((m_cached_TextElement.glyph.metrics.horizontalAdvance * bold_xAdvance_multiplier + characterSpacingAdjustment + m_wordSpacing + m_currentFontAsset.normalSpacingOffset) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance -= m_wordSpacing * currentElementScale;
+                }
+                #endregion
+
+
+                // Handle Mono Spacing
+                #region Handle Mono Spacing
+                float monoAdvance = 0;
+                if (m_monoSpacing != 0)
+                {
+                    monoAdvance = (m_monoSpacing / 2 - (m_cached_TextElement.glyph.metrics.width / 2 + m_cached_TextElement.glyph.metrics.horizontalBearingX) * currentElementScale) * (1 - m_charWidthAdjDelta);
+                    m_xAdvance += monoAdvance;
+                }
+                #endregion
+
+
+                // Set Padding based on selected font style
+                #region Handle Style Padding
+                if (m_textElementType == TMP_TextElementType.Character && !isUsingAltTypeface && ((m_FontStyleInternal & FontStyles.Bold) == FontStyles.Bold)) // Checks for any combination of Bold Style.
+                {
+                    if (m_currentMaterial.HasProperty(ShaderUtilities.ID_GradientScale))
+                    {
+                        float gradientScale = m_currentMaterial.GetFloat(ShaderUtilities.ID_GradientScale);
+                        style_padding = m_currentFontAsset.boldStyle / 4.0f * gradientScale * m_currentMaterial.GetFloat(ShaderUtilities.ID_ScaleRatio_A);
+
+                        // Clamp overall padding to Gradient Scale size.
+                        if (style_padding + padding > gradientScale)
+                            padding = gradientScale - style_padding;
+                    }
+                    else
+                        style_padding = 0;
+
+                    bold_xAdvance_multiplier = 1 + m_currentFontAsset.boldSpacing * 0.01f;
+                }
+                else
+                {
+                    if (m_currentMaterial.HasProperty(ShaderUtilities.ID_GradientScale))
+                    {
+                        float gradientScale = m_currentMaterial.GetFloat(ShaderUtilities.ID_GradientScale);
+                        style_padding = m_currentFontAsset.normalStyle / 4.0f * gradientScale * m_currentMaterial.GetFloat(ShaderUtilities.ID_ScaleRatio_A);
+
+                        // Clamp overall padding to Gradient Scale size.
+                        if (style_padding + padding > gradientScale)
+                            padding = gradientScale - style_padding;
+                    }
+                    else
+                        style_padding = 0;
+
+                    bold_xAdvance_multiplier = 1.0f;
+                }
+                #endregion Handle Style Padding
+
+
+                // Determine the position of the vertices of the Character or Sprite.
+                #region Calculate Vertices Position
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Calculate Vertices Position");
+                #endif
+                float fontBaseLineOffset = m_currentFontAsset.faceInfo.baseline * m_fontScale * m_fontScaleMultiplier * m_currentFontAsset.faceInfo.scale;
+                Vector3 top_left;
+                top_left.x = m_xAdvance + ((m_cached_TextElement.glyph.metrics.horizontalBearingX - padding - style_padding + glyphAdjustments.xPlacement) * currentElementScale * (1 - m_charWidthAdjDelta));
+                top_left.y = fontBaseLineOffset + (m_cached_TextElement.glyph.metrics.horizontalBearingY + padding + glyphAdjustments.yPlacement) * currentElementScale - m_lineOffset + m_baselineOffset;
+                top_left.z = 0;
+
+                Vector3 bottom_left;
+                bottom_left.x = top_left.x;
+                bottom_left.y = top_left.y - ((m_cached_TextElement.glyph.metrics.height + padding * 2) * currentElementScale);
+                bottom_left.z = 0;
+
+                Vector3 top_right;
+                top_right.x = bottom_left.x + ((m_cached_TextElement.glyph.metrics.width + padding * 2 + style_padding * 2) * currentElementScale * (1 - m_charWidthAdjDelta));
+                top_right.y = top_left.y;
+                top_right.z = 0;
+
+                Vector3 bottom_right;
+                bottom_right.x = top_right.x;
+                bottom_right.y = bottom_left.y;
+                bottom_right.z = 0;
+
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Check if we need to Shear the rectangles for Italic styles
+                #region Handle Italic & Shearing
+                if (m_textElementType == TMP_TextElementType.Character && !isUsingAltTypeface && ((m_FontStyleInternal & FontStyles.Italic) == FontStyles.Italic))
+                {
+                    // Shift Top vertices forward by half (Shear Value * height of character) and Bottom vertices back by same amount. 
+                    float shear_value = m_currentFontAsset.italicStyle * 0.01f;
+                    Vector3 topShear = new Vector3(shear_value * ((m_cached_TextElement.glyph.metrics.horizontalBearingY + padding + style_padding) * currentElementScale), 0, 0);
+                    Vector3 bottomShear = new Vector3(shear_value * (((m_cached_TextElement.glyph.metrics.horizontalBearingY - m_cached_TextElement.glyph.metrics.height - padding - style_padding)) * currentElementScale), 0, 0);
+
+                    top_left = top_left + topShear;
+                    bottom_left = bottom_left + bottomShear;
+                    top_right = top_right + topShear;
+                    bottom_right = bottom_right + bottomShear;
+                }
+                #endregion Handle Italics & Shearing
+
+
+                // Handle Character Rotation
+                #region Handle Character Rotation
+                if (m_isFXMatrixSet)
+                {
+                    // Apply scale matrix when simulating Condensed text.
+                    if (m_FXMatrix.lossyScale.x != 1)
+                    {
+                        //top_left = m_FXMatrix.MultiplyPoint3x4(top_left);
+                        //bottom_left = m_FXMatrix.MultiplyPoint3x4(bottom_left);
+                        //top_right = m_FXMatrix.MultiplyPoint3x4(top_right);
+                        //bottom_right = m_FXMatrix.MultiplyPoint3x4(bottom_right);
+                    }
+
+                    Vector3 positionOffset = (top_right + bottom_left) / 2;
+
+                    top_left = m_FXMatrix.MultiplyPoint3x4(top_left - positionOffset) + positionOffset;
+                    bottom_left = m_FXMatrix.MultiplyPoint3x4(bottom_left - positionOffset) + positionOffset;
+                    top_right = m_FXMatrix.MultiplyPoint3x4(top_right - positionOffset) + positionOffset;
+                    bottom_right = m_FXMatrix.MultiplyPoint3x4(bottom_right - positionOffset) + positionOffset;
+                }
+                #endregion
+
+
+                // Store vertex information for the character or sprite.
+                m_textInfo.characterInfo[m_characterCount].bottomLeft = bottom_left;
+                m_textInfo.characterInfo[m_characterCount].topLeft = top_left;
+                m_textInfo.characterInfo[m_characterCount].topRight = top_right;
+                m_textInfo.characterInfo[m_characterCount].bottomRight = bottom_right;
+
+                m_textInfo.characterInfo[m_characterCount].origin = m_xAdvance;
+                m_textInfo.characterInfo[m_characterCount].baseLine = fontBaseLineOffset - m_lineOffset + m_baselineOffset;
+                m_textInfo.characterInfo[m_characterCount].aspectRatio = (top_right.x - bottom_left.x) / (top_left.y - bottom_left.y);
+
+
+                // Compute and save text element Ascender and maximum line Ascender.
+                float elementAscender = m_currentFontAsset.faceInfo.ascentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier : m_textInfo.characterInfo[m_characterCount].scale) + m_baselineOffset;
+                m_textInfo.characterInfo[m_characterCount].ascender = elementAscender - m_lineOffset;
+                m_maxLineAscender = elementAscender > m_maxLineAscender ? elementAscender : m_maxLineAscender;
+
+                // Compute and save text element Descender and maximum line Descender.
+                float elementDescender = m_currentFontAsset.faceInfo.descentLine * (m_textElementType == TMP_TextElementType.Character ? currentElementScale / smallCapsMultiplier : m_textInfo.characterInfo[m_characterCount].scale) + m_baselineOffset;
+                float elementDescenderII = m_textInfo.characterInfo[m_characterCount].descender = elementDescender - m_lineOffset;
+                m_maxLineDescender = elementDescender < m_maxLineDescender ? elementDescender : m_maxLineDescender;
+
+                // Adjust maxLineAscender and maxLineDescender if style is superscript or subscript
+                if ((m_FontStyleInternal & FontStyles.Subscript) == FontStyles.Subscript || (m_FontStyleInternal & FontStyles.Superscript) == FontStyles.Superscript)
+                {
+                    float baseAscender = (elementAscender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementAscender = m_maxLineAscender;
+                    m_maxLineAscender = baseAscender > m_maxLineAscender ? baseAscender : m_maxLineAscender;
+
+                    float baseDescender = (elementDescender - m_baselineOffset) / m_currentFontAsset.faceInfo.subscriptSize;
+                    elementDescender = m_maxLineDescender;
+                    m_maxLineDescender = baseDescender < m_maxLineDescender ? baseDescender : m_maxLineDescender;
+                }
+
+                if (m_lineNumber == 0 || m_isNewPage)
+                {
+                    m_maxAscender = m_maxAscender > elementAscender ? m_maxAscender : elementAscender;
+                    m_maxCapHeight = Mathf.Max(m_maxCapHeight, m_currentFontAsset.faceInfo.capLine * currentElementScale / smallCapsMultiplier);
+                }
+                if (m_lineOffset == 0) pageAscender = pageAscender > elementAscender ? pageAscender : elementAscender;
+
+
+                // Set Characters to not visible by default.
+                m_textInfo.characterInfo[m_characterCount].isVisible = false;
+
+                // Setup Mesh for visible text elements. ie. not a SPACE / LINEFEED / CARRIAGE RETURN.
+                #region Handle Visible Characters
+                //#if TMP_PROFILE_ON
+                //Profiler.BeginSample("Handle Visible Characters");
+                //#endif
+                if (charCode == 9 || charCode == 0xA0 || charCode == 0x2007 || (!char.IsWhiteSpace((char)charCode) && charCode != 0x200B) || m_textElementType == TMP_TextElementType.Sprite)
+                {
+                    m_textInfo.characterInfo[m_characterCount].isVisible = true;
+
+                    #region Experimental Margin Shaper
+                    //Vector2 shapedMargins;
+                    //if (marginShaper)
+                    //{
+                    //    shapedMargins = m_marginShaper.GetShapedMargins(m_textInfo.characterInfo[m_characterCount].baseLine);
+                    //    if (shapedMargins.x < margins.x)
+                    //    {
+                    //        shapedMargins.x = m_marginLeft;
+                    //    }
+                    //    else
+                    //    {
+                    //        shapedMargins.x += m_marginLeft - margins.x;
+                    //    }
+                    //    if (shapedMargins.y < margins.z)
+                    //    {
+                    //        shapedMargins.y = m_marginRight;
+                    //    }
+                    //    else
+                    //    {
+                    //        shapedMargins.y += m_marginRight - margins.z;
+                    //    }
+                    //}
+                    //else
+                    //{
+                    //    shapedMargins.x = m_marginLeft;
+                    //    shapedMargins.y = m_marginRight;
+                    //}
+                    //width = marginWidth + 0.0001f - shapedMargins.x - shapedMargins.y;
+                    //if (m_width != -1 && m_width < width)
+                    //{
+                    //    width = m_width;
+                    //}
+                    //m_textInfo.lineInfo[m_lineNumber].marginLeft = shapedMargins.x;
+                    #endregion
+
+                    width = m_width != -1 ? Mathf.Min(marginWidth + 0.0001f - m_marginLeft - m_marginRight, m_width) : marginWidth + 0.0001f - m_marginLeft - m_marginRight;
+                    m_textInfo.lineInfo[m_lineNumber].marginLeft = m_marginLeft;
+
+                    bool isJustifiedOrFlush = ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush || ((_HorizontalAlignmentOptions)m_lineJustification & _HorizontalAlignmentOptions.Justified) == _HorizontalAlignmentOptions.Justified;
+
+                    // Calculate the line breaking width of the text.
+                    linebreakingWidth = Mathf.Abs(m_xAdvance) + (!m_isRightToLeft ? m_cached_TextElement.glyph.metrics.horizontalAdvance : 0) * (1 - m_charWidthAdjDelta) * (charCode != 0xAD ? currentElementScale : old_scale);
+
+                    // Check if Character exceeds the width of the Text Container
+                    #region Handle Line Breaking, Text Auto-Sizing and Horizontal Overflow
+                    if (linebreakingWidth > width * (isJustifiedOrFlush ? 1.05f : 1.0f))
+                    {
+                        ellipsisIndex = m_characterCount - 1; // Last safely rendered character
+
+                        // Word Wrapping
+                        #region Handle Word Wrapping
+                        if (enableWordWrapping && m_characterCount != m_firstCharacterOfLine)
+                        {
+                            // Check if word wrapping is still possible
+                            #region Line Breaking Check
+                            if (wrappingIndex == m_SavedWordWrapState.previous_WordBreak || isFirstWord)
+                            {
+                                // Word wrapping is no longer possible. Shrink size of text if auto-sizing is enabled.
+                                if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                                {
+                                    // Handle Character Width Adjustments
+                                    #region Character Width Adjustments
+                                    if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                                    {
+                                        loopCountA = 0;
+                                        m_charWidthAdjDelta += 0.01f;
+                                        GenerateTextMesh();
+                                        return;
+                                    }
+                                    #endregion
+
+                                    // Adjust Point Size
+                                    m_maxFontSize = m_fontSize;
+
+                                    m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                                    m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                                    if (loopCountA > 20) return; // Added to debug
+                                    GenerateTextMesh();
+                                    return;
+                                }
+
+                                // Word wrapping is no longer possible, now breaking up individual words.
+                                if (m_isCharacterWrappingEnabled == false)
+                                {
+                                    if (ignoreNonBreakingSpace == false)
+                                        ignoreNonBreakingSpace = true;
+                                    else
+                                        m_isCharacterWrappingEnabled = true;
+                                }
+                                else
+                                    isLastBreakingChar = true;
+
+                                //m_recursiveCount += 1;
+                                //if (m_recursiveCount > 20)
+                                //{
+                                //    Debug.Log("Recursive count exceeded!");
+                                //    continue;
+                                //}
+                            }
+                            #endregion
+
+                            // Restore to previously stored state of last valid (space character or linefeed)
+                            i = RestoreWordWrappingState(ref m_SavedWordWrapState);
+                            wrappingIndex = i;  // Used to detect when line length can no longer be reduced.
+
+                            // Handling for Soft Hyphen
+                            if (m_TextParsingBuffer[i].unicode == 0xAD) // && !m_isCharacterWrappingEnabled) // && ellipsisIndex != i && !m_isCharacterWrappingEnabled)
+                            {
+                                m_isTextTruncated = true;
+                                m_TextParsingBuffer[i].unicode = 0x2D;
+                                GenerateTextMesh();
+                                return;
+                            }
+
+                            //Debug.Log("Last Visible Character of line # " + m_lineNumber + " is [" + m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].character + " Character Count: " + m_characterCount + " Last visible: " + m_lastVisibleCharacterOfLine);
+
+                            // Check if Line Spacing of previous line needs to be adjusted.
+                            if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                            {
+                                //Debug.Log("(Line Break - Adjusting Line Spacing on line #" + m_lineNumber);
+                                float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                                AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                                m_lineOffset += offsetDelta;
+                                m_SavedWordWrapState.lineOffset = m_lineOffset;
+                                m_SavedWordWrapState.previousLineAscender = m_maxLineAscender;
+
+                                // TODO - Add check for character exceeding vertical bounds
+                            }
+                            m_isNewPage = false;
+
+                            // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                            float lineAscender = m_maxLineAscender - m_lineOffset;
+                            float lineDescender = m_maxLineDescender - m_lineOffset;
+
+
+                            // Update maxDescender and maxVisibleDescender
+                            m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+                            if (!isMaxVisibleDescenderSet)
+                                maxVisibleDescender = m_maxDescender;
+
+                            if (m_useMaxVisibleDescender && (m_characterCount >= m_maxVisibleCharacters || m_lineNumber >= m_maxVisibleLines))
+                                isMaxVisibleDescenderSet = true;
+
+                            // Track & Store lineInfo for the new line
+                            m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex = m_firstCharacterOfLine;
+                            m_textInfo.lineInfo[m_lineNumber].firstVisibleCharacterIndex = m_firstVisibleCharacterOfLine = m_firstCharacterOfLine > m_firstVisibleCharacterOfLine ? m_firstCharacterOfLine : m_firstVisibleCharacterOfLine;
+                            m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex = m_lastCharacterOfLine = m_characterCount - 1 > 0 ? m_characterCount - 1 : 0;
+                            m_textInfo.lineInfo[m_lineNumber].lastVisibleCharacterIndex = m_lastVisibleCharacterOfLine = m_lastVisibleCharacterOfLine < m_firstVisibleCharacterOfLine ? m_firstVisibleCharacterOfLine : m_lastVisibleCharacterOfLine;
+
+                            m_textInfo.lineInfo[m_lineNumber].characterCount = m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex - m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex + 1;
+                            m_textInfo.lineInfo[m_lineNumber].visibleCharacterCount = m_lineVisibleCharacterCount;
+                            m_textInfo.lineInfo[m_lineNumber].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_firstVisibleCharacterOfLine].bottomLeft.x, lineDescender);
+                            m_textInfo.lineInfo[m_lineNumber].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].topRight.x, lineAscender);
+                            m_textInfo.lineInfo[m_lineNumber].length = m_textInfo.lineInfo[m_lineNumber].lineExtents.max.x;
+                            m_textInfo.lineInfo[m_lineNumber].width = width;
+
+                            //m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+
+                            m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+
+                            m_textInfo.lineInfo[m_lineNumber].baseline = 0 - m_lineOffset;
+                            m_textInfo.lineInfo[m_lineNumber].ascender = lineAscender;
+                            m_textInfo.lineInfo[m_lineNumber].descender = lineDescender;
+                            m_textInfo.lineInfo[m_lineNumber].lineHeight = lineAscender - lineDescender + lineGap * baseScale;
+
+                            m_firstCharacterOfLine = m_characterCount; // Store first character of the next line.
+                            m_lineVisibleCharacterCount = 0;
+
+                            // Store the state of the line before starting on the new line.
+                            SaveWordWrappingState(ref m_SavedLineState, i, m_characterCount - 1);
+
+                            m_lineNumber += 1;
+                            isStartOfNewLine = true;
+                            isFirstWord = true;
+
+                            // Check to make sure Array is large enough to hold a new line.
+                            if (m_lineNumber >= m_textInfo.lineInfo.Length)
+                                ResizeLineExtents(m_lineNumber);
+
+                            // Apply Line Spacing based on scale of the last character of the line.
+                            if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                            {
+                                float ascender = m_textInfo.characterInfo[m_characterCount].ascender - m_textInfo.characterInfo[m_characterCount].baseLine;
+                                lineOffsetDelta = 0 - m_maxLineDescender + ascender + (lineGap + m_lineSpacing + m_lineSpacingDelta) * baseScale;
+                                m_lineOffset += lineOffsetDelta;
+
+                                m_startOfLineAscender = ascender;
+                            }
+                            else
+                                m_lineOffset += m_lineHeight + m_lineSpacing * baseScale;
+
+                            m_maxLineAscender = k_LargeNegativeFloat;
+                            m_maxLineDescender = k_LargePositiveFloat;
+
+                            m_xAdvance = 0 + tag_Indent;
+
+                            continue;
+                        }
+                        #endregion End Word Wrapping
+
+
+                        // Text Auto-Sizing (text exceeding Width of container. 
+                        #region Handle Text Auto-Sizing
+                        if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                        {
+                            // Handle Character Width Adjustments
+                            #region Character Width Adjustments
+                            if (m_charWidthAdjDelta < m_charWidthMaxAdj / 100)
+                            {
+                                loopCountA = 0;
+                                m_charWidthAdjDelta += 0.01f;
+                                GenerateTextMesh();
+                                return;
+                            }
+                            #endregion
+
+                            // Adjust Point Size
+                            m_maxFontSize = m_fontSize;
+
+                            m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                            m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                            //m_recursiveCount = 0;
+                            if (loopCountA > 20) return; // Added to debug 
+                            GenerateTextMesh();
+                            return;
+                        }
+                        #endregion End Text Auto-Sizing
+
+
+                        // Handle Text Overflow
+                        #region Handle Text Overflow
+                        switch (m_overflowMode)
+                        {
+                            case TextOverflowModes.Overflow:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                break;
+                            case TextOverflowModes.Ellipsis:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                m_isTextTruncated = true;
+
+                                if (m_characterCount < 1)
+                                {
+                                    m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                                    //m_visibleCharacterCount = 0;
+                                    break;
+                                }
+
+                                m_TextParsingBuffer[i - 1].unicode = 8230;
+                                m_TextParsingBuffer[i].unicode = (char)0;
+
+                                if (m_cached_Ellipsis_Character != null)
+                                {
+                                    m_textInfo.characterInfo[ellipsisIndex].character = (char)8230;
+                                    m_textInfo.characterInfo[ellipsisIndex].textElement = m_cached_Ellipsis_Character;
+                                    m_textInfo.characterInfo[ellipsisIndex].fontAsset = m_materialReferences[0].fontAsset;
+                                    m_textInfo.characterInfo[ellipsisIndex].material = m_materialReferences[0].material;
+                                    m_textInfo.characterInfo[ellipsisIndex].materialReferenceIndex = 0;
+                                }
+                                else
+                                {
+                                    Debug.LogWarning("Unable to use Ellipsis character since it wasn't found in the current Font Asset [" + m_fontAsset.name + "]. Consider regenerating this font asset to include the Ellipsis character (u+2026).\nNote: Warnings can be disabled in the TMP Settings file.", this);
+                                }
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                return;
+                            //case TextOverflowModes.Masking:
+                            //    if (!m_isMaskingEnabled)
+                            //        EnableMasking();
+                            //    break;
+                            //case TextOverflowModes.ScrollRect:
+                            //    if (!m_isMaskingEnabled)
+                            //        EnableMasking();
+                            //    break;
+                            case TextOverflowModes.Truncate:
+                                if (m_isMaskingEnabled)
+                                    DisableMasking();
+
+                                m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                                break;
+                            case TextOverflowModes.Linked:
+                                //m_textInfo.characterInfo[m_characterCount].isVisible = false;
+
+                                //if (m_linkedTextComponent != null)
+                                //{
+                                //    m_linkedTextComponent.text = text;
+                                //    m_linkedTextComponent.firstVisibleCharacter = m_characterCount;
+                                //    m_linkedTextComponent.ForceMeshUpdate();
+                                //}
+                                break;
+                        }
+                        #endregion End Text Overflow
+
+                    }
+                    #endregion End Check for Characters Exceeding Width of Text Container
+
+
+                    // Special handling of characters that are not ignored at the end of a line.
+                    if (charCode == 9 || charCode == 0xA0 || charCode == 0x2007)
+                    {
+                        m_textInfo.characterInfo[m_characterCount].isVisible = false;
+                        m_lastVisibleCharacterOfLine = m_characterCount;
+                        m_textInfo.lineInfo[m_lineNumber].spaceCount += 1;
+                        m_textInfo.spaceCount += 1;
+
+                        if (charCode == 0xA0)
+                            m_textInfo.lineInfo[m_lineNumber].controlCharacterCount += 1;
+                    }
+                    else
+                    {
+                        // Determine Vertex Color
+                        if (m_overrideHtmlColors)
+                            vertexColor = m_fontColor32;
+                        else
+                            vertexColor = m_htmlColor;
+
+                        // Store Character & Sprite Vertex Information
+                        if (m_textElementType == TMP_TextElementType.Character)
+                        {
+                            // Save Character Vertex Data
+                            SaveGlyphVertexInfo(padding, style_padding, vertexColor);
+                        }
+                        else if (m_textElementType == TMP_TextElementType.Sprite)
+                        {
+                            SaveSpriteVertexInfo(vertexColor);
+                        }
+                    }
+
+
+                    // Increase visible count for Characters.
+                    if (m_textInfo.characterInfo[m_characterCount].isVisible && charCode != 0xAD)
+                    {
+                        if (isStartOfNewLine) { isStartOfNewLine = false; m_firstVisibleCharacterOfLine = m_characterCount; }
+
+                        m_lineVisibleCharacterCount += 1;
+                        m_lastVisibleCharacterOfLine = m_characterCount;
+                    }
+                }
+                else
+                {   // This is a Space, Tab, LineFeed or Carriage Return
+
+                    // Track # of spaces per line which is used for line justification.
+                    if ((charCode == 10 || char.IsSeparator((char)charCode)) && charCode != 0xAD && charCode != 0x200B && charCode != 0x2060)
+                    {
+                        m_textInfo.lineInfo[m_lineNumber].spaceCount += 1;
+                        m_textInfo.spaceCount += 1;
+                    }
+                }
+                //#if TMP_PROFILE_ON
+                //Profiler.EndSample();
+                //#endif
+                #endregion Handle Visible Characters
+
+
+                // Check if Line Spacing of previous line needs to be adjusted.
+                #region Adjust Line Spacing
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Adjust Line Spacing");
+                #endif
+                if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                {
+                    //Debug.Log("Inline - Adjusting Line Spacing on line #" + m_lineNumber);
+                    //float gap = 0; // Compute gap.
+
+                    float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                    AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                    elementDescenderII -= offsetDelta;
+                    m_lineOffset += offsetDelta;
+
+                    m_startOfLineAscender += offsetDelta;
+                    m_SavedWordWrapState.lineOffset = m_lineOffset;
+                    m_SavedWordWrapState.previousLineAscender = m_startOfLineAscender;
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Store Rectangle positions for each Character.
+                #region Store Character Data
+                m_textInfo.characterInfo[m_characterCount].lineNumber = m_lineNumber;
+                m_textInfo.characterInfo[m_characterCount].pageNumber = m_pageNumber;
+
+                if (charCode != 10 && charCode != 13 && charCode != 8230 || m_textInfo.lineInfo[m_lineNumber].characterCount == 1)
+                    m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+                #endregion Store Character Data
+
+
+                // Check if text Exceeds the vertical bounds of the margin area.
+                #region Check Vertical Bounds & Auto-Sizing
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Check Vertical Bounds");
+                #endif
+                if (m_maxAscender - elementDescenderII > marginHeight + 0.0001f)
+                {
+                    // Handle Line spacing adjustments
+                    #region Line Spacing Adjustments
+                    if (m_enableAutoSizing && m_lineSpacingDelta > m_lineSpacingMax && m_lineNumber > 0)
+                    {
+                        loopCountA = 0;
+
+                        m_lineSpacingDelta -= 1;
+                        GenerateTextMesh();
+                        return;
+                    }
+                    #endregion
+
+
+                    // Handle Text Auto-sizing resulting from text exceeding vertical bounds.
+                    #region Text Auto-Sizing (Text greater than vertical bounds)
+                    if (m_enableAutoSizing && m_fontSize > m_fontSizeMin)
+                    {
+                        m_maxFontSize = m_fontSize;
+
+                        m_fontSize -= Mathf.Max((m_fontSize - m_minFontSize) / 2, 0.05f);
+                        m_fontSize = (int)(Mathf.Max(m_fontSize, m_fontSizeMin) * 20 + 0.5f) / 20f;
+
+                        //m_recursiveCount = 0;
+                        if (loopCountA > 20) return; // Added to debug 
+                        GenerateTextMesh();
+                        return;
+                    }
+                    #endregion Text Auto-Sizing
+
+                    // Set isTextOverflowing and firstOverflowCharacterIndex
+                    if (m_firstOverflowCharacterIndex == -1)
+                        m_firstOverflowCharacterIndex = m_characterCount;
+
+                    // Handle Text Overflow
+                    #region Text Overflow
+                    switch (m_overflowMode)
+                    {
+                        case TextOverflowModes.Overflow:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            break;
+                        case TextOverflowModes.Ellipsis:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index].unicode = 8230;
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index + 1].unicode = (char)0;
+
+                                if (m_cached_Ellipsis_Character != null)
+                                {
+                                    m_textInfo.characterInfo[ellipsisIndex].character = (char)8230;
+                                    m_textInfo.characterInfo[ellipsisIndex].textElement = m_cached_Ellipsis_Character;
+                                    m_textInfo.characterInfo[ellipsisIndex].fontAsset = m_materialReferences[0].fontAsset;
+                                    m_textInfo.characterInfo[ellipsisIndex].material = m_materialReferences[0].material;
+                                    m_textInfo.characterInfo[ellipsisIndex].materialReferenceIndex = 0;
+                                }
+                                else
+                                {
+                                    Debug.LogWarning("Unable to use Ellipsis character since it wasn't found in the current Font Asset [" + m_fontAsset.name + "]. Consider regenerating this font asset to include the Ellipsis character (u+2026).\nNote: Warnings can be disabled in the TMP Settings file.", this);
+                                }
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh();
+                                return;
+                            }
+                        //case TextOverflowModes.Masking:
+                        //    if (!m_isMaskingEnabled)
+                        //        EnableMasking();
+                        //    break;
+                        //case TextOverflowModes.ScrollRect:
+                        //    if (!m_isMaskingEnabled)
+                        //        EnableMasking();
+                        //    break;
+                        case TextOverflowModes.Truncate:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            // TODO : Optimize 
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[m_textInfo.characterInfo[ellipsisIndex].index + 1].unicode = (char)0;
+
+                                m_totalCharacterCount = ellipsisIndex + 1;
+
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh();
+                                return;
+                            }
+                        case TextOverflowModes.Page:
+                            if (m_isMaskingEnabled)
+                                DisableMasking();
+
+                            // Ignore Page Break, Linefeed or carriage return
+                            if (charCode == 13 || charCode == 10)
+                                break;
+
+                            // Return if the first character doesn't fit.
+                            if (i == 0)
+                            {
+                                ClearMesh();
+                                return;
+                            }
+                            else if (previousPageOverflowChar == i)
+                            {
+                                m_TextParsingBuffer[i].unicode = 0;
+                                m_isTextTruncated = true;
+                            }
+
+                            previousPageOverflowChar = i;
+
+                            // Go back to previous line and re-layout 
+                            i = RestoreWordWrappingState(ref m_SavedLineState);
+
+                            m_isNewPage = true;
+                            m_xAdvance = 0 + tag_Indent;
+                            m_lineOffset = 0;
+                            m_maxAscender = 0;
+                            pageAscender = 0;
+                            m_lineNumber += 1;
+                            m_pageNumber += 1;
+                            continue;
+                        case TextOverflowModes.Linked:
+                            if (m_linkedTextComponent != null)
+                            {
+                                m_linkedTextComponent.text = text;
+                                m_linkedTextComponent.firstVisibleCharacter = m_characterCount;
+                                m_linkedTextComponent.ForceMeshUpdate();
+                            }
+
+                            // Truncate remaining text
+                            if (m_lineNumber > 0)
+                            {
+                                m_TextParsingBuffer[i].unicode = (char)0;
+
+                                m_totalCharacterCount = m_characterCount;
+
+                                // TODO : Optimize as we should be able to end the layout phase here without having to do another pass.
+                                GenerateTextMesh();
+                                m_isTextTruncated = true;
+                                return;
+                            }
+                            else
+                            {
+                                ClearMesh();
+                                return;
+                            }
+                    }
+                    #endregion End Text Overflow
+
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion Check Vertical Bounds
+
+
+                // Handle xAdvance & Tabulation Stops. Tab stops at every 25% of Font Size.
+                #region XAdvance, Tabulation & Stops
+                if (charCode == 9)
+                {
+                    float tabSize = m_currentFontAsset.faceInfo.tabWidth * m_currentFontAsset.tabSize * currentElementScale;
+                    float tabs = Mathf.Ceil(m_xAdvance / tabSize) * tabSize;
+                    m_xAdvance = tabs > m_xAdvance ? tabs : m_xAdvance + tabSize;
+                }
+                else if (m_monoSpacing != 0)
+                {
+                    m_xAdvance += (m_monoSpacing - monoAdvance + ((characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale) + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+                else if (!m_isRightToLeft)
+                {
+                    float scaleFXMultiplier = 1;
+                    if (m_isFXMatrixSet) scaleFXMultiplier = m_FXMatrix.lossyScale.x;
+
+                    m_xAdvance += ((m_cached_TextElement.glyph.metrics.horizontalAdvance * scaleFXMultiplier * bold_xAdvance_multiplier + characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset + glyphAdjustments.xAdvance) * currentElementScale + m_cSpacing) * (1 - m_charWidthAdjDelta);
+
+                    if (char.IsWhiteSpace((char)charCode) || charCode == 0x200B)
+                        m_xAdvance += m_wordSpacing * currentElementScale;
+                }
+                else
+                {
+                    m_xAdvance -= glyphAdjustments.xAdvance * currentElementScale;
+                }
+
+
+                // Store xAdvance information
+                m_textInfo.characterInfo[m_characterCount].xAdvance = m_xAdvance;
+
+                #endregion Tabulation & Stops
+
+
+                // Handle Carriage Return
+                #region Carriage Return
+                if (charCode == 13)
+                {
+                    m_xAdvance = 0 + tag_Indent;
+                }
+                #endregion Carriage Return
+
+
+                // Handle Line Spacing Adjustments + Word Wrapping & special case for last line.
+                #region Check for Line Feed and Last Character
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Process Linefeed");
+                #endif
+                if (charCode == 10 || m_characterCount == totalCharacterCount - 1)
+                {
+                    // Check if Line Spacing of previous line needs to be adjusted.
+                    if (m_lineNumber > 0 && !TMP_Math.Approximately(m_maxLineAscender, m_startOfLineAscender) && m_lineHeight == TMP_Math.FLOAT_UNSET && !m_isNewPage)
+                    {
+                        //Debug.Log("Line Feed - Adjusting Line Spacing on line #" + m_lineNumber);
+                        float offsetDelta = m_maxLineAscender - m_startOfLineAscender;
+                        AdjustLineOffset(m_firstCharacterOfLine, m_characterCount, offsetDelta);
+                        elementDescenderII -= offsetDelta;
+                        m_lineOffset += offsetDelta;
+                    }
+                    m_isNewPage = false;
+
+                    // Calculate lineAscender & make sure if last character is superscript or subscript that we check that as well.
+                    float lineAscender = m_maxLineAscender - m_lineOffset;
+                    float lineDescender = m_maxLineDescender - m_lineOffset;
+
+                    // Update maxDescender and maxVisibleDescender
+                    m_maxDescender = m_maxDescender < lineDescender ? m_maxDescender : lineDescender;
+                    if (!isMaxVisibleDescenderSet)
+                        maxVisibleDescender = m_maxDescender;
+
+                    if (m_useMaxVisibleDescender && (m_characterCount >= m_maxVisibleCharacters || m_lineNumber >= m_maxVisibleLines))
+                        isMaxVisibleDescenderSet = true;
+
+                    // Save Line Information
+                    m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex = m_firstCharacterOfLine;
+                    m_textInfo.lineInfo[m_lineNumber].firstVisibleCharacterIndex = m_firstVisibleCharacterOfLine = m_firstCharacterOfLine > m_firstVisibleCharacterOfLine ? m_firstCharacterOfLine : m_firstVisibleCharacterOfLine;
+                    m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex = m_lastCharacterOfLine = m_characterCount;
+                    m_textInfo.lineInfo[m_lineNumber].lastVisibleCharacterIndex = m_lastVisibleCharacterOfLine = m_lastVisibleCharacterOfLine < m_firstVisibleCharacterOfLine ? m_firstVisibleCharacterOfLine : m_lastVisibleCharacterOfLine;
+
+                    m_textInfo.lineInfo[m_lineNumber].characterCount = m_textInfo.lineInfo[m_lineNumber].lastCharacterIndex - m_textInfo.lineInfo[m_lineNumber].firstCharacterIndex + 1;
+                    m_textInfo.lineInfo[m_lineNumber].visibleCharacterCount = m_lineVisibleCharacterCount;
+                    m_textInfo.lineInfo[m_lineNumber].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_firstVisibleCharacterOfLine].bottomLeft.x, lineDescender);
+                    m_textInfo.lineInfo[m_lineNumber].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].topRight.x, lineAscender);
+                    m_textInfo.lineInfo[m_lineNumber].length = m_textInfo.lineInfo[m_lineNumber].lineExtents.max.x - (padding * currentElementScale);
+                    m_textInfo.lineInfo[m_lineNumber].width = width;
+
+                    if (m_textInfo.lineInfo[m_lineNumber].characterCount == 1)
+                        m_textInfo.lineInfo[m_lineNumber].alignment = m_lineJustification;
+
+                    if (m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].isVisible)
+                        m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastVisibleCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+                    else
+                        m_textInfo.lineInfo[m_lineNumber].maxAdvance = m_textInfo.characterInfo[m_lastCharacterOfLine].xAdvance - (characterSpacingAdjustment + m_currentFontAsset.normalSpacingOffset) * currentElementScale - m_cSpacing;
+
+                    m_textInfo.lineInfo[m_lineNumber].baseline = 0 - m_lineOffset;
+                    m_textInfo.lineInfo[m_lineNumber].ascender = lineAscender;
+                    m_textInfo.lineInfo[m_lineNumber].descender = lineDescender;
+                    m_textInfo.lineInfo[m_lineNumber].lineHeight = lineAscender - lineDescender + lineGap * baseScale;
+
+                    m_firstCharacterOfLine = m_characterCount + 1;
+                    m_lineVisibleCharacterCount = 0;
+
+                    // Add new line if not last line or character.
+                    if (charCode == 10)
+                    {
+                        // Store the state of the line before starting on the new line.
+                        SaveWordWrappingState(ref m_SavedLineState, i, m_characterCount);
+                        // Store the state of the last Character before the new line.
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+
+                        m_lineNumber += 1;
+                        isStartOfNewLine = true;
+                        ignoreNonBreakingSpace = false;
+                        isFirstWord = true;
+
+                        // Check to make sure Array is large enough to hold a new line.
+                        if (m_lineNumber >= m_textInfo.lineInfo.Length)
+                            ResizeLineExtents(m_lineNumber);
+
+                        // Apply Line Spacing
+                        if (m_lineHeight == TMP_Math.FLOAT_UNSET)
+                        {
+                            lineOffsetDelta = 0 - m_maxLineDescender + elementAscender + (lineGap + m_lineSpacing + m_paragraphSpacing + m_lineSpacingDelta) * baseScale;
+                            m_lineOffset += lineOffsetDelta;
+                        }
+                        else
+                            m_lineOffset += m_lineHeight + (m_lineSpacing + m_paragraphSpacing) * baseScale;
+
+                        m_maxLineAscender = k_LargeNegativeFloat;
+                        m_maxLineDescender = k_LargePositiveFloat;
+                        m_startOfLineAscender = elementAscender;
+
+                        m_xAdvance = 0 + tag_LineIndent + tag_Indent;
+
+                        ellipsisIndex = m_characterCount - 1;
+
+                        m_characterCount += 1;
+                        continue;
+                    }
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion Check for Linefeed or Last Character
+
+
+                // Store Rectangle positions for each Character.
+                #region Save CharacterInfo for the current character.
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Save CharacterInfo & Extents");
+                #endif
+                // Determine the bounds of the Mesh.
+                if (m_textInfo.characterInfo[m_characterCount].isVisible)
+                {
+                    m_meshExtents.min.x = Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[m_characterCount].bottomLeft.x);
+                    m_meshExtents.min.y = Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[m_characterCount].bottomLeft.y);
+
+                    m_meshExtents.max.x = Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[m_characterCount].topRight.x);
+                    m_meshExtents.max.y = Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[m_characterCount].topRight.y);
+
+                    //m_meshExtents.min = new Vector2(Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[m_characterCount].bottomLeft.x), Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[m_characterCount].bottomLeft.y));
+                    //m_meshExtents.max = new Vector2(Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[m_characterCount].topRight.x), Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[m_characterCount].topRight.y));
+                }
+
+
+                // Save pageInfo Data
+                if (m_overflowMode == TextOverflowModes.Page && charCode != 13 && charCode != 10) // && m_pageNumber < 16)
+                {
+                    // Check if we need to increase allocations for the pageInfo array.
+                    if (m_pageNumber + 1 > m_textInfo.pageInfo.Length)
+                        TMP_TextInfo.Resize(ref m_textInfo.pageInfo, m_pageNumber + 1, true);
+
+                    m_textInfo.pageInfo[m_pageNumber].ascender = pageAscender;
+                    m_textInfo.pageInfo[m_pageNumber].descender = elementDescender < m_textInfo.pageInfo[m_pageNumber].descender ? elementDescender : m_textInfo.pageInfo[m_pageNumber].descender;
+
+                    if (m_pageNumber == 0 && m_characterCount == 0)
+                        m_textInfo.pageInfo[m_pageNumber].firstCharacterIndex = m_characterCount;
+                    else if (m_characterCount > 0 && m_pageNumber != m_textInfo.characterInfo[m_characterCount - 1].pageNumber)
+                    {
+                        m_textInfo.pageInfo[m_pageNumber - 1].lastCharacterIndex = m_characterCount - 1;
+                        m_textInfo.pageInfo[m_pageNumber].firstCharacterIndex = m_characterCount;
+                    }
+                    else if (m_characterCount == totalCharacterCount - 1)
+                        m_textInfo.pageInfo[m_pageNumber].lastCharacterIndex = m_characterCount;
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion Saving CharacterInfo
+
+
+                // Save State of Mesh Creation for handling of Word Wrapping
+                #region Save Word Wrapping State
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Save Word Wrapping State");
+                #endif
+                if (m_enableWordWrapping || m_overflowMode == TextOverflowModes.Truncate || m_overflowMode == TextOverflowModes.Ellipsis)
+                {
+                    if ((char.IsWhiteSpace((char)charCode) || charCode == 0x200B || charCode == 0x2D || charCode == 0xAD) && (!m_isNonBreakingSpace || ignoreNonBreakingSpace) && charCode != 0xA0 && charCode != 0x2007 && charCode != 0x2011 && charCode != 0x202F && charCode != 0x2060)
+                    {
+                        // We store the state of numerous variables for the most recent Space, LineFeed or Carriage Return to enable them to be restored 
+                        // for Word Wrapping.
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+                        m_isCharacterWrappingEnabled = false;
+                        isFirstWord = false;
+                    }
+                    // Handling for East Asian languages
+                    else if ((  charCode > 0x1100 && charCode < 0x11ff || /* Hangul Jamo */
+                                charCode > 0x2E80 && charCode < 0x9FFF || /* CJK */
+                                charCode > 0xA960 && charCode < 0xA97F || /* Hangul Jame Extended-A */
+                                charCode > 0xAC00 && charCode < 0xD7FF || /* Hangul Syllables */
+                                charCode > 0xF900 && charCode < 0xFAFF || /* CJK Compatibility Ideographs */
+                                charCode > 0xFE30 && charCode < 0xFE4F || /* CJK Compatibility Forms */
+                                charCode > 0xFF00 && charCode < 0xFFEF)   /* CJK Halfwidth */
+                                && !m_isNonBreakingSpace)
+                    {
+                        if (isFirstWord || isLastBreakingChar || TMP_Settings.linebreakingRules.leadingCharacters.ContainsKey(charCode) == false &&
+                            (m_characterCount < totalCharacterCount - 1 &&
+                            TMP_Settings.linebreakingRules.followingCharacters.ContainsKey(m_textInfo.characterInfo[m_characterCount + 1].character) == false))
+                        {
+                            SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+                            m_isCharacterWrappingEnabled = false;
+                            isFirstWord = false;
+                        }
+                    }
+                    else if ((isFirstWord || m_isCharacterWrappingEnabled == true || isLastBreakingChar))
+                        SaveWordWrappingState(ref m_SavedWordWrapState, i, m_characterCount);
+
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion Save Word Wrapping State
+
+                m_characterCount += 1;
+            }
+
+            // Check Auto Sizing and increase font size to fill text container.
+            #region Check Auto-Sizing (Upper Font Size Bounds)
+            fontSizeDelta = m_maxFontSize - m_minFontSize;
+            if (!m_isCharacterWrappingEnabled && m_enableAutoSizing && fontSizeDelta > 0.051f && m_fontSize < m_fontSizeMax)
+            {
+                m_minFontSize = m_fontSize;
+                m_fontSize += Mathf.Max((m_maxFontSize - m_fontSize) / 2, 0.05f);
+                m_fontSize = (int)(Mathf.Min(m_fontSize, m_fontSizeMax) * 20 + 0.5f) / 20f;
+
+                //Debug.Log(m_fontSize);
+
+                if (loopCountA > 20) return; // Added to debug
+                GenerateTextMesh();
+                return;
+            }
+            #endregion End Auto-sizing Check
+
+
+            m_isCharacterWrappingEnabled = false;
+
+            #if TMP_PROFILE_PHASES_ON
+                Profiler.EndSample();
+            #endif
+
+            //Debug.Log("Iteration Count: " + loopCountA + ". Final Point Size: " + m_fontSize); // + "  B: " + loopCountB + "  C: " + loopCountC + "  D: " + loopCountD);
+
+            // *** PHASE II of Text Generation ***
+            #if TMP_PROFILE_PHASES_ON
+                Profiler.BeginSample("TMP Generate Text - Phase II");
+            #endif
+
+            // If there are no visible characters... no need to continue
+            if (m_characterCount == 0) // && m_visibleSpriteCount == 0)
+            {
+                ClearMesh();
+
+                // Event indicating the text has been regenerated.
+                TMPro_EventManager.ON_TEXT_CHANGED(this);
+                return;
+            }
+
+
+            // *** PHASE II of Text Generation ***
+            int last_vert_index = m_materialReferences[0].referenceCount * 4;
+
+            // Partial clear of the vertices array to mark unused vertices as degenerate.
+            m_textInfo.meshInfo[0].Clear(false);
+
+            // Handle Text Alignment
+            #region Text Vertical Alignment
+            #if TMP_PROFILE_ON
+            Profiler.BeginSample("Vertical Text Alignment");
+            #endif
+            Vector3 anchorOffset = Vector3.zero;
+            Vector3[] corners = m_RectTransformCorners; // GetTextContainerLocalCorners();
+
+            switch (m_textAlignment)
+            {
+                // Top Vertically
+                case TextAlignmentOptions.Top:
+                case TextAlignmentOptions.TopLeft:
+                case TextAlignmentOptions.TopRight:
+                case TextAlignmentOptions.TopJustified:
+                case TextAlignmentOptions.TopFlush:
+                case TextAlignmentOptions.TopGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = corners[1] + new Vector3(0 + margins.x, 0 - m_maxAscender - margins.y, 0);
+                    else
+                        anchorOffset = corners[1] + new Vector3(0 + margins.x, 0 - m_textInfo.pageInfo[pageToDisplay].ascender - margins.y, 0);
+                    break;
+
+                // Middle Vertically
+                case TextAlignmentOptions.Left:
+                case TextAlignmentOptions.Right:
+                case TextAlignmentOptions.Center:
+                case TextAlignmentOptions.Justified:
+                case TextAlignmentOptions.Flush:
+                case TextAlignmentOptions.CenterGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_maxAscender + margins.y + maxVisibleDescender - margins.w) / 2, 0);
+                    else
+                        anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_textInfo.pageInfo[pageToDisplay].ascender + margins.y + m_textInfo.pageInfo[pageToDisplay].descender - margins.w) / 2, 0);
+                    break;
+
+                // Bottom Vertically
+                case TextAlignmentOptions.Bottom:
+                case TextAlignmentOptions.BottomLeft:
+                case TextAlignmentOptions.BottomRight:
+                case TextAlignmentOptions.BottomJustified:
+                case TextAlignmentOptions.BottomFlush:
+                case TextAlignmentOptions.BottomGeoAligned:
+                    if (m_overflowMode != TextOverflowModes.Page)
+                        anchorOffset = corners[0] + new Vector3(0 + margins.x, 0 - maxVisibleDescender + margins.w, 0);
+                    else
+                        anchorOffset = corners[0] + new Vector3(0 + margins.x, 0 - m_textInfo.pageInfo[pageToDisplay].descender + margins.w, 0);
+                    break;
+
+                // Baseline Vertically
+                case TextAlignmentOptions.Baseline:
+                case TextAlignmentOptions.BaselineLeft:
+                case TextAlignmentOptions.BaselineRight:
+                case TextAlignmentOptions.BaselineJustified:
+                case TextAlignmentOptions.BaselineFlush:
+                case TextAlignmentOptions.BaselineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0, 0);
+                    break;
+
+                // Midline Vertically 
+                case TextAlignmentOptions.MidlineLeft:
+                case TextAlignmentOptions.Midline:
+                case TextAlignmentOptions.MidlineRight:
+                case TextAlignmentOptions.MidlineJustified:
+                case TextAlignmentOptions.MidlineFlush:
+                case TextAlignmentOptions.MidlineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_meshExtents.max.y + margins.y + m_meshExtents.min.y - margins.w) / 2, 0);
+                    break;
+
+                // Capline Vertically 
+                case TextAlignmentOptions.CaplineLeft:
+                case TextAlignmentOptions.Capline:
+                case TextAlignmentOptions.CaplineRight:
+                case TextAlignmentOptions.CaplineJustified:
+                case TextAlignmentOptions.CaplineFlush:
+                case TextAlignmentOptions.CaplineGeoAligned:
+                    anchorOffset = (corners[0] + corners[1]) / 2 + new Vector3(0 + margins.x, 0 - (m_maxCapHeight - margins.y - margins.w) / 2, 0);
+                    break;
+            }
+            #if TMP_PROFILE_ON
+            Profiler.EndSample();
+            #endif
+            #endregion
+
+
+            // Initialization for Second Pass
+            Vector3 justificationOffset = Vector3.zero;
+            Vector3 offset = Vector3.zero;
+            int vert_index_X4 = 0;
+            int sprite_index_X4 = 0;
+
+            int wordCount = 0;
+            int lineCount = 0;
+            int lastLine = 0;
+            bool isFirstSeperator = false;
+
+            bool isStartOfWord = false;
+            int wordFirstChar = 0;
+            int wordLastChar = 0;
+
+            // Second Pass : Line Justification, UV Mapping, Character & Line Visibility & more.
+            #region Handle Line Justification & UV Mapping & Character Visibility & More
+
+            // Variables used to handle Canvas Render Modes and SDF Scaling
+            bool isCameraAssigned = m_canvas.worldCamera == null ? false : true;
+            float lossyScale = m_previousLossyScaleY = this.transform.lossyScale.y;
+            RenderMode canvasRenderMode = m_canvas.renderMode;
+            float canvasScaleFactor = m_canvas.scaleFactor;
+
+            Color32 underlineColor = Color.white;
+            Color32 strikethroughColor = Color.white;
+            Color32 highlightColor = new Color32(255, 255, 0, 64);
+            float xScale = 0;
+            float xScaleMax = 0;
+            float underlineStartScale = 0;
+            float underlineEndScale = 0;
+            float underlineMaxScale = 0;
+            float underlineBaseLine = k_LargePositiveFloat;
+            int lastPage = 0;
+
+            float strikethroughPointSize = 0;
+            float strikethroughScale = 0;
+            float strikethroughBaseline = 0;
+
+            TMP_CharacterInfo[] characterInfos = m_textInfo.characterInfo;
+            #region Handle Line Justification & UV Mapping & Character Visibility & More
+            for (int i = 0; i < m_characterCount; i++)
+            {
+                TMP_FontAsset currentFontAsset = characterInfos[i].fontAsset;
+
+                char currentCharacter = characterInfos[i].character;
+
+                int currentLine = characterInfos[i].lineNumber;
+                TMP_LineInfo lineInfo = m_textInfo.lineInfo[currentLine];
+                lineCount = currentLine + 1;
+
+                TextAlignmentOptions lineAlignment = lineInfo.alignment;
+
+                // Process Line Justification
+                #region Handle Line Justification
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Horizontal Text Alignment");
+                #endif 
+                //if (!characterInfos[i].isIgnoringAlignment)
+                //{
+                switch (lineAlignment)
+                {
+                    case TextAlignmentOptions.TopLeft:
+                    case TextAlignmentOptions.Left:
+                    case TextAlignmentOptions.BottomLeft:
+                    case TextAlignmentOptions.BaselineLeft:
+                    case TextAlignmentOptions.MidlineLeft:
+                    case TextAlignmentOptions.CaplineLeft:
+                        if (!m_isRightToLeft)
+                            justificationOffset = new Vector3(0 + lineInfo.marginLeft, 0, 0);
+                        else
+                            justificationOffset = new Vector3(0 - lineInfo.maxAdvance, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.Top:
+                    case TextAlignmentOptions.Center:
+                    case TextAlignmentOptions.Bottom:
+                    case TextAlignmentOptions.Baseline:
+                    case TextAlignmentOptions.Midline:
+                    case TextAlignmentOptions.Capline:
+                        justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width / 2 - lineInfo.maxAdvance / 2, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopGeoAligned:
+                    case TextAlignmentOptions.CenterGeoAligned:
+                    case TextAlignmentOptions.BottomGeoAligned:
+                    case TextAlignmentOptions.BaselineGeoAligned:
+                    case TextAlignmentOptions.MidlineGeoAligned:
+                    case TextAlignmentOptions.CaplineGeoAligned:
+                        justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width / 2 - (lineInfo.lineExtents.min.x + lineInfo.lineExtents.max.x) / 2, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopRight:
+                    case TextAlignmentOptions.Right:
+                    case TextAlignmentOptions.BottomRight:
+                    case TextAlignmentOptions.BaselineRight:
+                    case TextAlignmentOptions.MidlineRight:
+                    case TextAlignmentOptions.CaplineRight:
+                        if (!m_isRightToLeft)
+                            justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width - lineInfo.maxAdvance, 0, 0);
+                        else
+                            justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0);
+                        break;
+
+                    case TextAlignmentOptions.TopJustified:
+                    case TextAlignmentOptions.Justified:
+                    case TextAlignmentOptions.BottomJustified:
+                    case TextAlignmentOptions.BaselineJustified:
+                    case TextAlignmentOptions.MidlineJustified:
+                    case TextAlignmentOptions.CaplineJustified:
+                    case TextAlignmentOptions.TopFlush:
+                    case TextAlignmentOptions.Flush:
+                    case TextAlignmentOptions.BottomFlush:
+                    case TextAlignmentOptions.BaselineFlush:
+                    case TextAlignmentOptions.MidlineFlush:
+                    case TextAlignmentOptions.CaplineFlush:
+                        // Skip Zero Width Characters
+                        if (currentCharacter == 0xAD || currentCharacter == 0x200B || currentCharacter == 0x2060) break;
+
+                        char lastCharOfCurrentLine = characterInfos[lineInfo.lastCharacterIndex].character;
+                        bool isFlush = ((_HorizontalAlignmentOptions)lineAlignment & _HorizontalAlignmentOptions.Flush) == _HorizontalAlignmentOptions.Flush;
+
+                        // In Justified mode, all lines are justified except the last one.
+                        // In Flush mode, all lines are justified.
+                        if (char.IsControl(lastCharOfCurrentLine) == false && currentLine < m_lineNumber || isFlush || lineInfo.maxAdvance > lineInfo.width)
+                        {
+                            // First character of each line.
+                            if (currentLine != lastLine || i == 0 || i == m_firstVisibleCharacter)
+                            {
+                                if (!m_isRightToLeft)
+                                    justificationOffset = new Vector3(lineInfo.marginLeft, 0, 0);
+                                else
+                                    justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0);
+
+                                if (char.IsSeparator(currentCharacter))
+                                    isFirstSeperator = true;
+                                else
+                                    isFirstSeperator = false;
+                            }
+                            else
+                            {
+                                float gap = !m_isRightToLeft ? lineInfo.width - lineInfo.maxAdvance : lineInfo.width + lineInfo.maxAdvance;
+
+                                int visibleCount = lineInfo.visibleCharacterCount - 1 + lineInfo.controlCharacterCount;
+
+                                // Get the number of spaces for each line ignoring the last character if it is not visible (ie. a space or linefeed).
+                                int spaces = (characterInfos[lineInfo.lastCharacterIndex].isVisible ? lineInfo.spaceCount : lineInfo.spaceCount - 1) - lineInfo.controlCharacterCount;
+
+                                if (isFirstSeperator) { spaces -= 1; visibleCount += 1; }
+
+                                float ratio = spaces > 0 ? m_wordWrappingRatios : 1;
+
+                                if (spaces < 1) spaces = 1;
+
+                                if (currentCharacter != 0xA0 && (currentCharacter == 9 || char.IsSeparator((char)currentCharacter)))
+                                {
+                                    if (!m_isRightToLeft)
+                                        justificationOffset += new Vector3(gap * (1 - ratio) / spaces, 0, 0);
+                                    else
+                                        justificationOffset -= new Vector3(gap * (1 - ratio) / spaces, 0, 0);
+                                }
+                                else
+                                {
+                                    if (!m_isRightToLeft)
+                                        justificationOffset += new Vector3(gap * ratio / visibleCount, 0, 0);
+                                    else
+                                        justificationOffset -= new Vector3(gap * ratio / visibleCount, 0, 0);
+                                }
+                            }
+                        }
+                        else
+                        {
+                            if (!m_isRightToLeft)
+                                justificationOffset = new Vector3(lineInfo.marginLeft, 0, 0); // Keep last line left justified.
+                            else
+                                justificationOffset = new Vector3(lineInfo.marginLeft + lineInfo.width, 0, 0); // Keep last line right justified.
+                        }
+                        //Debug.Log("Char [" + (char)charCode + "] Code:" + charCode + "  Line # " + currentLine + "  Offset:" + justificationOffset + "  # Spaces:" + lineInfo.spaceCount + "  # Characters:" + lineInfo.characterCount);
+                        break;
+                }
+                //}
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion End Text Justification
+
+                offset = anchorOffset + justificationOffset;
+
+                // Handle UV2 mapping options and packing of scale information into UV2.
+                #region Handling of UV2 mapping & Scale packing
+                bool isCharacterVisible = characterInfos[i].isVisible;
+                if (isCharacterVisible)
+                {
+                    TMP_TextElementType elementType = characterInfos[i].elementType;
+                    switch (elementType)
+                    {
+                        // CHARACTERS
+                        case TMP_TextElementType.Character:
+                            Extents lineExtents = lineInfo.lineExtents;
+                            float uvOffset = (m_uvLineOffset * currentLine) % 1; // + m_uvOffset.x;
+
+                            // Setup UV2 based on Character Mapping Options Selected
+                            #region Handle UV Mapping Options
+                            #if TMP_PROFILE_ON
+                            Profiler.BeginSample("UV MAPPING");
+                            #endif
+                            switch (m_horizontalMapping)
+                            {
+                                case TextureMappingOptions.Character:
+                                    characterInfos[i].vertex_BL.uv2.x = 0; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_TL.uv2.x = 0; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_TR.uv2.x = 1; //+ m_uvOffset.x;
+                                    characterInfos[i].vertex_BR.uv2.x = 1; //+ m_uvOffset.x;
+                                    break;
+
+                                case TextureMappingOptions.Line:
+                                    if (m_textAlignment != TextAlignmentOptions.Justified)
+                                    {
+                                        characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x - lineExtents.min.x) / (lineExtents.max.x - lineExtents.min.x) + uvOffset;
+                                        break;
+                                    }
+                                    else // Special Case if Justified is used in Line Mode.
+                                    {
+                                        characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                        break;
+                                    }
+
+                                case TextureMappingOptions.Paragraph:
+                                    characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_TL.uv2.x = (characterInfos[i].vertex_TL.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    characterInfos[i].vertex_BR.uv2.x = (characterInfos[i].vertex_BR.position.x + justificationOffset.x - m_meshExtents.min.x) / (m_meshExtents.max.x - m_meshExtents.min.x) + uvOffset;
+                                    break;
+
+                                case TextureMappingOptions.MatchAspect:
+
+                                    switch (m_verticalMapping)
+                                    {
+                                        case TextureMappingOptions.Character:
+                                            characterInfos[i].vertex_BL.uv2.y = 0; // + m_uvOffset.y;
+                                            characterInfos[i].vertex_TL.uv2.y = 1; // + m_uvOffset.y;
+                                            characterInfos[i].vertex_TR.uv2.y = 0; // + m_uvOffset.y;
+                                            characterInfos[i].vertex_BR.uv2.y = 1; // + m_uvOffset.y;
+                                            break;
+
+                                        case TextureMappingOptions.Line:
+                                            characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - lineExtents.min.y) / (lineExtents.max.y - lineExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - lineExtents.min.y) / (lineExtents.max.y - lineExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                            characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                            break;
+
+                                        case TextureMappingOptions.Paragraph:
+                                            characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y) + uvOffset;
+                                            characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                            characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                            break;
+
+                                        case TextureMappingOptions.MatchAspect:
+                                            Debug.Log("ERROR: Cannot Match both Vertical & Horizontal.");
+                                            break;
+                                    }
+
+                                    //float xDelta = 1 - (_uv2s[vert_index + 0].y * textMeshCharacterInfo[i].AspectRatio); // Left aligned
+                                    float xDelta = (1 - ((characterInfos[i].vertex_BL.uv2.y + characterInfos[i].vertex_TL.uv2.y) * characterInfos[i].aspectRatio)) / 2; // Center of Rectangle
+
+                                    characterInfos[i].vertex_BL.uv2.x = (characterInfos[i].vertex_BL.uv2.y * characterInfos[i].aspectRatio) + xDelta + uvOffset;
+                                    characterInfos[i].vertex_TL.uv2.x = characterInfos[i].vertex_BL.uv2.x;
+                                    characterInfos[i].vertex_TR.uv2.x = (characterInfos[i].vertex_TL.uv2.y * characterInfos[i].aspectRatio) + xDelta + uvOffset;
+                                    characterInfos[i].vertex_BR.uv2.x = characterInfos[i].vertex_TR.uv2.x;
+                                    break;
+                            }
+
+                            switch (m_verticalMapping)
+                            {
+                                case TextureMappingOptions.Character:
+                                    characterInfos[i].vertex_BL.uv2.y = 0; // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = 1; // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = 1; // + m_uvOffset.y;
+                                    characterInfos[i].vertex_BR.uv2.y = 0; // + m_uvOffset.y;
+                                    break;
+
+                                case TextureMappingOptions.Line:
+                                    characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - lineInfo.descender) / (lineInfo.ascender - lineInfo.descender); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - lineInfo.descender) / (lineInfo.ascender - lineInfo.descender); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    break;
+
+                                case TextureMappingOptions.Paragraph:
+                                    characterInfos[i].vertex_BL.uv2.y = (characterInfos[i].vertex_BL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = (characterInfos[i].vertex_TL.position.y - m_meshExtents.min.y) / (m_meshExtents.max.y - m_meshExtents.min.y); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    break;
+
+                                case TextureMappingOptions.MatchAspect:
+                                    float yDelta = (1 - ((characterInfos[i].vertex_BL.uv2.x + characterInfos[i].vertex_TR.uv2.x) / characterInfos[i].aspectRatio)) / 2; // Center of Rectangle
+
+                                    characterInfos[i].vertex_BL.uv2.y = yDelta + (characterInfos[i].vertex_BL.uv2.x / characterInfos[i].aspectRatio); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_TL.uv2.y = yDelta + (characterInfos[i].vertex_TR.uv2.x / characterInfos[i].aspectRatio); // + m_uvOffset.y;
+                                    characterInfos[i].vertex_BR.uv2.y = characterInfos[i].vertex_BL.uv2.y;
+                                    characterInfos[i].vertex_TR.uv2.y = characterInfos[i].vertex_TL.uv2.y;
+                                    break;
+                            }
+                            #if TMP_PROFILE_ON
+                            Profiler.EndSample();
+                            #endif
+                            #endregion End UV Mapping Options
+
+                            // Pack UV's so that we can pass Xscale needed for Shader to maintain 1:1 ratio.
+                            #region Pack Scale into UV2
+                            #if TMP_PROFILE_ON
+                            Profiler.BeginSample("Pack UV");
+                            #endif
+                            xScale = characterInfos[i].scale * (1 - m_charWidthAdjDelta);
+                            if (!characterInfos[i].isUsingAlternateTypeface && (characterInfos[i].style & FontStyles.Bold) == FontStyles.Bold) xScale *= -1;
+
+                            switch (canvasRenderMode)
+                            {
+                                case RenderMode.ScreenSpaceOverlay:
+                                    xScale *= Mathf.Abs(lossyScale) / canvasScaleFactor;
+                                    break;
+                                case RenderMode.ScreenSpaceCamera:
+                                    xScale *= isCameraAssigned ? Mathf.Abs(lossyScale) : 1;
+                                    break;
+                                case RenderMode.WorldSpace:
+                                    xScale *= Mathf.Abs(lossyScale);
+                                    break;
+                            }
+
+                            // isBold is encoded in the X value and SDF Scale in Y.
+                            //Vector2 vertexData = new Vector2((characterInfos[i].style & FontStyles.Bold) == FontStyles.Bold ? 1 : 0, xScale);
+                            //characterInfos[i].vertex_BL.uv2 = vertexData;
+                            //characterInfos[i].vertex_TL.uv2 = vertexData;
+                            //characterInfos[i].vertex_TR.uv2 = vertexData;
+                            //characterInfos[i].vertex_BR.uv2 = vertexData;
+
+                            float x0 = characterInfos[i].vertex_BL.uv2.x;
+                            float y0 = characterInfos[i].vertex_BL.uv2.y;
+                            float x1 = characterInfos[i].vertex_TR.uv2.x;
+                            float y1 = characterInfos[i].vertex_TR.uv2.y;
+
+                            float dx = (int)x0;
+                            float dy = (int)y0;
+
+                            x0 = x0 - dx;
+                            x1 = x1 - dx;
+                            y0 = y0 - dy;
+                            y1 = y1 - dy;
+
+                            // Optimization to avoid having a vector2 returned from the Pack UV function.
+                            characterInfos[i].vertex_BL.uv2.x = PackUV(x0, y0); characterInfos[i].vertex_BL.uv2.y = xScale;
+                            characterInfos[i].vertex_TL.uv2.x = PackUV(x0, y1); characterInfos[i].vertex_TL.uv2.y = xScale;
+                            characterInfos[i].vertex_TR.uv2.x = PackUV(x1, y1); characterInfos[i].vertex_TR.uv2.y = xScale;
+                            characterInfos[i].vertex_BR.uv2.x = PackUV(x1, y0); characterInfos[i].vertex_BR.uv2.y = xScale;
+                            #if TMP_PROFILE_ON
+                                Profiler.EndSample();
+                            #endif
+                            #endregion
+                            break;
+                        
+                        // SPRITES
+                        case TMP_TextElementType.Sprite:
+                            // Nothing right now
+                            break;
+                    }
+
+                    // Handle maxVisibleCharacters, maxVisibleLines and Overflow Page Mode.
+                    #region Handle maxVisibleCharacters / maxVisibleLines / Page Mode
+                    #if TMP_PROFILE_ON
+                    Profiler.BeginSample("Process MaxVisible Characters & Lines");
+                    #endif
+                    if (i < m_maxVisibleCharacters && wordCount < m_maxVisibleWords && currentLine < m_maxVisibleLines && m_overflowMode != TextOverflowModes.Page)
+                    {
+                        characterInfos[i].vertex_BL.position += offset;
+                        characterInfos[i].vertex_TL.position += offset;
+                        characterInfos[i].vertex_TR.position += offset;
+                        characterInfos[i].vertex_BR.position += offset;
+                    }
+                    else if (i < m_maxVisibleCharacters && wordCount < m_maxVisibleWords && currentLine < m_maxVisibleLines && m_overflowMode == TextOverflowModes.Page && characterInfos[i].pageNumber == pageToDisplay)
+                    {
+                        characterInfos[i].vertex_BL.position += offset;
+                        characterInfos[i].vertex_TL.position += offset;
+                        characterInfos[i].vertex_TR.position += offset;
+                        characterInfos[i].vertex_BR.position += offset;
+                    }
+                    else
+                    {
+                        characterInfos[i].vertex_BL.position = Vector3.zero;
+                        characterInfos[i].vertex_TL.position = Vector3.zero;
+                        characterInfos[i].vertex_TR.position = Vector3.zero;
+                        characterInfos[i].vertex_BR.position = Vector3.zero;
+                        characterInfos[i].isVisible = false;
+                    }
+                    #if TMP_PROFILE_ON
+                    Profiler.EndSample();
+                    #endif
+                    #endregion
+
+
+                    // Fill Vertex Buffers for the various types of element
+                    if (elementType == TMP_TextElementType.Character)
+                    {
+                        FillCharacterVertexBuffers(i, vert_index_X4);
+                    }
+                    else if (elementType == TMP_TextElementType.Sprite)
+                    {
+                        FillSpriteVertexBuffers(i, sprite_index_X4);
+                    }
+                }
+                #endregion
+
+                // Apply Alignment and Justification Offset
+                m_textInfo.characterInfo[i].bottomLeft += offset;
+                m_textInfo.characterInfo[i].topLeft += offset;
+                m_textInfo.characterInfo[i].topRight += offset;
+                m_textInfo.characterInfo[i].bottomRight += offset;
+
+                m_textInfo.characterInfo[i].origin += offset.x;
+                m_textInfo.characterInfo[i].xAdvance += offset.x;
+
+                m_textInfo.characterInfo[i].ascender += offset.y;
+                m_textInfo.characterInfo[i].descender += offset.y;
+                m_textInfo.characterInfo[i].baseLine += offset.y;
+
+                // Update MeshExtents
+                if (isCharacterVisible)
+                {
+                    //m_meshExtents.min = new Vector2(Mathf.Min(m_meshExtents.min.x, m_textInfo.characterInfo[i].bottomLeft.x), Mathf.Min(m_meshExtents.min.y, m_textInfo.characterInfo[i].bottomLeft.y));
+                    //m_meshExtents.max = new Vector2(Mathf.Max(m_meshExtents.max.x, m_textInfo.characterInfo[i].topRight.x), Mathf.Max(m_meshExtents.max.y, m_textInfo.characterInfo[i].topLeft.y));
+                }
+
+                // Need to recompute lineExtent to account for the offset from justification.
+                #region Adjust lineExtents resulting from alignment offset
+                #if TMP_PROFILE_ON
+                    Profiler.BeginSample("Adjust LineExtents");
+                #endif
+                if (currentLine != lastLine || i == m_characterCount - 1)
+                {
+                    // Update the previous line's extents
+                    if (currentLine != lastLine)
+                    {
+                        m_textInfo.lineInfo[lastLine].baseline += offset.y;
+                        m_textInfo.lineInfo[lastLine].ascender += offset.y;
+                        m_textInfo.lineInfo[lastLine].descender += offset.y;
+
+                        m_textInfo.lineInfo[lastLine].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[lastLine].firstCharacterIndex].bottomLeft.x, m_textInfo.lineInfo[lastLine].descender);
+                        m_textInfo.lineInfo[lastLine].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[lastLine].lastVisibleCharacterIndex].topRight.x, m_textInfo.lineInfo[lastLine].ascender);
+                    }
+
+                    // Update the current line's extents
+                    if (i == m_characterCount - 1)
+                    {
+                        m_textInfo.lineInfo[currentLine].baseline += offset.y;
+                        m_textInfo.lineInfo[currentLine].ascender += offset.y;
+                        m_textInfo.lineInfo[currentLine].descender += offset.y;
+
+                        m_textInfo.lineInfo[currentLine].lineExtents.min = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[currentLine].firstCharacterIndex].bottomLeft.x, m_textInfo.lineInfo[currentLine].descender);
+                        m_textInfo.lineInfo[currentLine].lineExtents.max = new Vector2(m_textInfo.characterInfo[m_textInfo.lineInfo[currentLine].lastVisibleCharacterIndex].topRight.x, m_textInfo.lineInfo[currentLine].ascender);
+                    }
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Track Word Count per line and for the object
+                #region Track Word Count
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Track Word Count");
+                #endif
+                if (char.IsLetterOrDigit(currentCharacter) || currentCharacter == 0x2D || currentCharacter == 0xAD || currentCharacter == 0x2010 || currentCharacter == 0x2011)
+                {
+                    if (isStartOfWord == false)
+                    {
+                        isStartOfWord = true;
+                        wordFirstChar = i;
+                    }
+
+                    // If last character is a word
+                    if (isStartOfWord && i == m_characterCount - 1)
+                    {
+                        int size = m_textInfo.wordInfo.Length;
+                        int index = m_textInfo.wordCount;
+
+                        if (m_textInfo.wordCount + 1 > size)
+                            TMP_TextInfo.Resize(ref m_textInfo.wordInfo, size + 1);
+
+                        wordLastChar = i;
+
+                        m_textInfo.wordInfo[index].firstCharacterIndex = wordFirstChar;
+                        m_textInfo.wordInfo[index].lastCharacterIndex = wordLastChar;
+                        m_textInfo.wordInfo[index].characterCount = wordLastChar - wordFirstChar + 1;
+                        m_textInfo.wordInfo[index].textComponent = this;
+
+                        wordCount += 1;
+                        m_textInfo.wordCount += 1;
+                        m_textInfo.lineInfo[currentLine].wordCount += 1;
+                    }
+                }
+                else if (isStartOfWord || i == 0 && (!char.IsPunctuation(currentCharacter) || char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B || i == m_characterCount - 1))
+                {
+                    if (i > 0 && i < characterInfos.Length - 1 && i < m_characterCount && (currentCharacter == 39 || currentCharacter == 8217) && char.IsLetterOrDigit(characterInfos[i - 1].character) && char.IsLetterOrDigit(characterInfos[i + 1].character))
+                    {
+
+                    }
+                    else
+                    {
+                        wordLastChar = i == m_characterCount - 1 && char.IsLetterOrDigit(currentCharacter) ? i : i - 1;
+                        isStartOfWord = false;
+
+                        int size = m_textInfo.wordInfo.Length;
+                        int index = m_textInfo.wordCount;
+
+                        if (m_textInfo.wordCount + 1 > size)
+                            TMP_TextInfo.Resize(ref m_textInfo.wordInfo, size + 1);
+
+                        m_textInfo.wordInfo[index].firstCharacterIndex = wordFirstChar;
+                        m_textInfo.wordInfo[index].lastCharacterIndex = wordLastChar;
+                        m_textInfo.wordInfo[index].characterCount = wordLastChar - wordFirstChar + 1;
+                        m_textInfo.wordInfo[index].textComponent = this;
+
+                        wordCount += 1;
+                        m_textInfo.wordCount += 1;
+                        m_textInfo.lineInfo[currentLine].wordCount += 1;
+                    }
+                }
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+
+                // Setup & Handle Underline
+                #region Underline
+                #if TMP_PROFILE_ON
+                Profiler.BeginSample("Process Underline & Strikethrough");
+                #endif
+                // NOTE: Need to figure out how underline will be handled with multiple fonts and which font will be used for the underline.
+                bool isUnderline = (m_textInfo.characterInfo[i].style & FontStyles.Underline) == FontStyles.Underline;
+                if (isUnderline)
+                {
+                    bool isUnderlineVisible = true;
+                    int currentPage = m_textInfo.characterInfo[i].pageNumber;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && currentPage + 1 != m_pageToDisplay))
+                        isUnderlineVisible = false;
+
+                    // We only use the scale of visible characters.
+                    if (!char.IsWhiteSpace(currentCharacter) && currentCharacter != 0x200B)
+                    {
+                        underlineMaxScale = Mathf.Max(underlineMaxScale, m_textInfo.characterInfo[i].scale);
+                        xScaleMax = Mathf.Max(xScaleMax, Mathf.Abs(xScale));
+                        underlineBaseLine = Mathf.Min(currentPage == lastPage ? underlineBaseLine : k_LargePositiveFloat, m_textInfo.characterInfo[i].baseLine + font.faceInfo.underlineOffset * underlineMaxScale);
+                        lastPage = currentPage; // Need to track pages to ensure we reset baseline for the new pages.
+                    }
+
+                    if (beginUnderline == false && isUnderlineVisible == true && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginUnderline = true;
+                            underlineStartScale = m_textInfo.characterInfo[i].scale;
+                            if (underlineMaxScale == 0)
+                            {
+                                underlineMaxScale = underlineStartScale;
+                                xScaleMax = xScale;
+                            }
+                            underline_start = new Vector3(m_textInfo.characterInfo[i].bottomLeft.x, underlineBaseLine, 0);
+                            underlineColor = m_textInfo.characterInfo[i].underlineColor;
+                        }
+                    }
+
+                    // End Underline if text only contains one character.
+                    if (beginUnderline && m_characterCount == 1)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && (i == lineInfo.lastCharacterIndex || i >= lineInfo.lastVisibleCharacterIndex))
+                    {
+                        // Terminate underline at previous visible character if space or carriage return.
+                        if (char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B)
+                        {
+                            int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                            underline_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, underlineBaseLine, 0);
+                            underlineEndScale = m_textInfo.characterInfo[lastVisibleCharacterIndex].scale;
+                        }
+                        else
+                        {   // End underline if last character of the line.
+                            underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                            underlineEndScale = m_textInfo.characterInfo[i].scale;
+                        }
+
+                        beginUnderline = false;
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && !isUnderlineVisible)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i - 1].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                    else if (beginUnderline && i < m_characterCount - 1 && !underlineColor.Compare(m_textInfo.characterInfo[i + 1].underlineColor))
+                    {
+                        // End underline if underline color has changed.
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                }
+                else
+                {
+                    // End Underline
+                    if (beginUnderline == true)
+                    {
+                        beginUnderline = false;
+                        underline_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, underlineBaseLine, 0);
+                        underlineEndScale = m_textInfo.characterInfo[i - 1].scale;
+
+                        DrawUnderlineMesh(underline_start, underline_end, ref last_vert_index, underlineStartScale, underlineEndScale, underlineMaxScale, xScaleMax, underlineColor);
+                        underlineMaxScale = 0;
+                        xScaleMax = 0;
+                        underlineBaseLine = k_LargePositiveFloat;
+                    }
+                }
+                #endregion
+
+
+                // Setup & Handle Strikethrough
+                #region Strikethrough
+                // NOTE: Need to figure out how underline will be handled with multiple fonts and which font will be used for the underline.
+                bool isStrikethrough = (m_textInfo.characterInfo[i].style & FontStyles.Strikethrough) == FontStyles.Strikethrough;
+                float strikethroughOffset = currentFontAsset.faceInfo.strikethroughOffset;
+
+                if (isStrikethrough)
+                {
+                    bool isStrikeThroughVisible = true;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && m_textInfo.characterInfo[i].pageNumber + 1 != m_pageToDisplay))
+                        isStrikeThroughVisible = false;
+
+                    if (beginStrikethrough == false && isStrikeThroughVisible && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginStrikethrough = true;
+                            strikethroughPointSize = m_textInfo.characterInfo[i].pointSize;
+                            strikethroughScale = m_textInfo.characterInfo[i].scale;
+                            strikethrough_start = new Vector3(m_textInfo.characterInfo[i].bottomLeft.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+                            strikethroughColor = m_textInfo.characterInfo[i].strikethroughColor;
+                            strikethroughBaseline = m_textInfo.characterInfo[i].baseLine;
+                            //Debug.Log("Char [" + currentCharacter + "] Start Strikethrough POS: " + strikethrough_start);
+                        }
+                    }
+
+                    // End Strikethrough if text only contains one character.
+                    if (beginStrikethrough && m_characterCount == 1)
+                    {
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && i == lineInfo.lastCharacterIndex)
+                    {
+                        // Terminate Strikethrough at previous visible character if space or carriage return.
+                        if (char.IsWhiteSpace(currentCharacter) || currentCharacter == 0x200B)
+                        {
+                            int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, m_textInfo.characterInfo[lastVisibleCharacterIndex].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        }
+                        else
+                        {
+                            // Terminate Strikethrough at last character of line.
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        }
+
+                        beginStrikethrough = false;
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && i < m_characterCount && (m_textInfo.characterInfo[i + 1].pointSize != strikethroughPointSize || !TMP_Math.Approximately(m_textInfo.characterInfo[i + 1].baseLine + offset.y, strikethroughBaseline)))
+                    {
+                        // Terminate Strikethrough if scale changes.
+                        beginStrikethrough = false;
+
+                        int lastVisibleCharacterIndex = lineInfo.lastVisibleCharacterIndex;
+                        if (i > lastVisibleCharacterIndex)
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[lastVisibleCharacterIndex].topRight.x, m_textInfo.characterInfo[lastVisibleCharacterIndex].baseLine + strikethroughOffset * strikethroughScale, 0);
+                        else
+                            strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                        //Debug.Log("Char [" + currentCharacter + "] at Index: " + i + "  End Strikethrough POS: " + strikethrough_end + "  Baseline: " + m_textInfo.characterInfo[i].baseLine.ToString("f3"));
+                    }
+                    else if (beginStrikethrough && i < m_characterCount && currentFontAsset.GetInstanceID() != characterInfos[i + 1].fontAsset.GetInstanceID())
+                    {
+                        // Terminate Strikethrough if font asset changes.
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                    else if (beginStrikethrough && !isStrikeThroughVisible)
+                    {
+                        // Terminate Strikethrough if character is not visible.
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, m_textInfo.characterInfo[i - 1].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                }
+                else
+                {
+                    // End Strikethrough
+                    if (beginStrikethrough == true)
+                    {
+                        beginStrikethrough = false;
+                        strikethrough_end = new Vector3(m_textInfo.characterInfo[i - 1].topRight.x, m_textInfo.characterInfo[i - 1].baseLine + strikethroughOffset * strikethroughScale, 0);
+
+                        DrawUnderlineMesh(strikethrough_start, strikethrough_end, ref last_vert_index, strikethroughScale, strikethroughScale, strikethroughScale, xScale, strikethroughColor);
+                    }
+                }
+                #endregion
+
+
+                // HANDLE TEXT HIGHLIGHTING
+                #region Text Highlighting
+                bool isHighlight = (m_textInfo.characterInfo[i].style & FontStyles.Highlight) == FontStyles.Highlight;
+                if (isHighlight)
+                {
+                    bool isHighlightVisible = true;
+                    int currentPage = m_textInfo.characterInfo[i].pageNumber;
+
+                    if (i > m_maxVisibleCharacters || currentLine > m_maxVisibleLines || (m_overflowMode == TextOverflowModes.Page && currentPage + 1 != m_pageToDisplay))
+                        isHighlightVisible = false;
+
+                    if (beginHighlight == false && isHighlightVisible == true && i <= lineInfo.lastVisibleCharacterIndex && currentCharacter != 10 && currentCharacter != 13)
+                    {
+                        if (i == lineInfo.lastVisibleCharacterIndex && char.IsSeparator(currentCharacter))
+                        { }
+                        else
+                        {
+                            beginHighlight = true;
+                            highlight_start = k_LargePositiveVector2;
+                            highlight_end = k_LargeNegativeVector2;
+                            highlightColor = m_textInfo.characterInfo[i].highlightColor;
+                        }
+                    }
+
+                    if (beginHighlight)
+                    {
+                        Color32 currentHighlightColor = m_textInfo.characterInfo[i].highlightColor;
+                        bool isColorTransition = false;
+
+                        // Handle Highlight color changes
+                        if (!highlightColor.Compare(currentHighlightColor))
+                        {
+                            // End drawing at the start of new highlight color to prevent a gap between highlight sections.
+                            highlight_end.x = (highlight_end.x + m_textInfo.characterInfo[i].bottomLeft.x) / 2;
+
+                            highlight_start.y = Mathf.Min(highlight_start.y, m_textInfo.characterInfo[i].descender);
+                            highlight_end.y = Mathf.Max(highlight_end.y, m_textInfo.characterInfo[i].ascender);
+
+                            DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+
+                            beginHighlight = true;
+                            highlight_start = highlight_end;
+
+                            highlight_end = new Vector3(m_textInfo.characterInfo[i].topRight.x, m_textInfo.characterInfo[i].descender, 0);
+                            highlightColor = m_textInfo.characterInfo[i].highlightColor;
+
+                            isColorTransition = true;
+                        }
+
+                        if (!isColorTransition)
+                        {
+                            // Use the Min / Max Extents of the Highlight area to handle different character sizes and fonts.
+                            highlight_start.x = Mathf.Min(highlight_start.x, m_textInfo.characterInfo[i].bottomLeft.x);
+                            highlight_start.y = Mathf.Min(highlight_start.y, m_textInfo.characterInfo[i].descender);
+
+                            highlight_end.x = Mathf.Max(highlight_end.x, m_textInfo.characterInfo[i].topRight.x); 
+                            highlight_end.y = Mathf.Max(highlight_end.y, m_textInfo.characterInfo[i].ascender);
+                        }
+                    }
+
+                    // End Highlight if text only contains one character.
+                    if (beginHighlight && m_characterCount == 1)
+                    {
+                        beginHighlight = false;
+
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                    else if (beginHighlight && (i == lineInfo.lastCharacterIndex || i >= lineInfo.lastVisibleCharacterIndex))
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                    else if (beginHighlight && !isHighlightVisible)
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                }
+                else
+                {
+                    // End Highlight
+                    if (beginHighlight == true)
+                    {
+                        beginHighlight = false;
+                        DrawTextHighlight(highlight_start, highlight_end, ref last_vert_index, highlightColor);
+                    }
+                }
+                #endregion
+                #if TMP_PROFILE_ON
+                Profiler.EndSample();
+                #endif
+                #endregion
+
+                lastLine = currentLine;
+            }
+            #endregion
+
+
+            // METRICS ABOUT THE TEXT OBJECT
+            m_textInfo.characterCount = m_characterCount;
+            m_textInfo.spriteCount = m_spriteCount;
+            m_textInfo.lineCount = lineCount;
+            m_textInfo.wordCount = wordCount != 0 && m_characterCount > 0 ? wordCount : 1;
+            m_textInfo.pageCount = m_pageNumber + 1;
+
+            #if TMP_PROFILE_PHASES_ON
+                Profiler.EndSample();
+            #endif
+
+
+            // *** UPLOAD MESH DATA ***
+            #if TMP_PROFILE_PHASES_ON
+                Profiler.BeginSample("TMP Generate Text - Phase III");
+            #endif
+            if (m_renderMode == TextRenderFlags.Render && IsActive())
+            {
+                // Clear unused vertices
+                //m_textInfo.meshInfo[0].ClearUnusedVertices();
+
+                // Must ensure the Canvas support the additon vertex attributes used by TMP.
+                if (m_canvas.additionalShaderChannels != (AdditionalCanvasShaderChannels)25)
+                    m_canvas.additionalShaderChannels |= (AdditionalCanvasShaderChannels)25;
+
+                // Sort the geometry of the text object if needed.
+                if (m_geometrySortingOrder != VertexSortingOrder.Normal)
+                    m_textInfo.meshInfo[0].SortGeometry(VertexSortingOrder.Reverse);
+
+                // Upload Mesh Data
+                m_mesh.MarkDynamic();
+                m_mesh.vertices = m_textInfo.meshInfo[0].vertices;
+                m_mesh.uv = m_textInfo.meshInfo[0].uvs0;
+                m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+                //m_mesh.uv4 = m_textInfo.meshInfo[0].uvs4;
+                m_mesh.colors32 = m_textInfo.meshInfo[0].colors32;
+
+                // Compute Bounds for the mesh. Manual computation is more efficient then using Mesh.recalcualteBounds.
+                m_mesh.RecalculateBounds();
+                //m_mesh.bounds = new Bounds(new Vector3((m_meshExtents.max.x + m_meshExtents.min.x) / 2, (m_meshExtents.max.y + m_meshExtents.min.y) / 2, 0) + offset, new Vector3(m_meshExtents.max.x - m_meshExtents.min.x, m_meshExtents.max.y - m_meshExtents.min.y, 0));
+
+                m_canvasRenderer.SetMesh(m_mesh);
+
+                // Cache CanvasRenderer color of the parent text object.
+                Color parentBaseColor = m_canvasRenderer.GetColor();
+
+                for (int i = 1; i < m_textInfo.materialCount; i++)
+                {
+                    // Clear unused vertices
+                    m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    if (m_subTextObjects[i] == null) continue;
+
+                    // Sort the geometry of the sub-text objects if needed.
+                    if (m_geometrySortingOrder != VertexSortingOrder.Normal)
+                        m_textInfo.meshInfo[i].SortGeometry(VertexSortingOrder.Reverse);
+
+                    //m_subTextObjects[i].mesh.MarkDynamic();
+                    m_subTextObjects[i].mesh.vertices = m_textInfo.meshInfo[i].vertices;
+                    m_subTextObjects[i].mesh.uv = m_textInfo.meshInfo[i].uvs0;
+                    m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+                    //m_subTextObjects[i].mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+                    m_subTextObjects[i].mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                    m_subTextObjects[i].mesh.RecalculateBounds();
+
+                    m_subTextObjects[i].canvasRenderer.SetMesh(m_subTextObjects[i].mesh);
+
+                    // Set CanvasRenderer color to match the parent text object.
+                    m_subTextObjects[i].canvasRenderer.SetColor(parentBaseColor);
+                }
+            }
+
+            // Event indicating the text has been regenerated.
+            TMPro_EventManager.ON_TEXT_CHANGED(this);
+            //SendOnTextChanged();
+
+            #if TMP_PROFILE_PHASES_ON
+                Profiler.EndSample();
+            #endif
+
+            //Debug.Log("Done Rendering Text.");
+        }
+
+
+        /// <summary>
+        /// Method to return the local corners of the Text Container or RectTransform.
+        /// </summary>
+        /// <returns></returns>
+        protected override Vector3[] GetTextContainerLocalCorners()
+        {
+            if (m_rectTransform == null) m_rectTransform = this.rectTransform;
+
+            m_rectTransform.GetLocalCorners(m_RectTransformCorners);
+
+            return m_RectTransformCorners;
+        }
+
+
+        /// <summary>
+        /// Method to Enable or Disable child SubMesh objects.
+        /// </summary>
+        /// <param name="state"></param>
+        protected override void SetActiveSubMeshes(bool state)
+        {
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                if (m_subTextObjects[i].enabled != state)
+                    m_subTextObjects[i].enabled = state;
+            }
+        }
+
+
+        /// <summary>
+        ///  Method returning the compound bounds of the text object and child sub objects.
+        /// </summary>
+        /// <returns></returns>
+        protected override Bounds GetCompoundBounds()
+        {
+            Bounds mainBounds = m_mesh.bounds;
+            Vector3 min = mainBounds.min;
+            Vector3 max = mainBounds.max;
+
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                Bounds subBounds = m_subTextObjects[i].mesh.bounds;
+                min.x = min.x < subBounds.min.x ? min.x : subBounds.min.x;
+                min.y = min.y < subBounds.min.y ? min.y : subBounds.min.y;
+
+                max.x = max.x > subBounds.max.x ? max.x : subBounds.max.x;
+                max.y = max.y > subBounds.max.y ? max.y : subBounds.max.y;
+            }
+
+            Vector3 center = (min + max) / 2;
+            Vector2 size = max - min;
+            return new Bounds(center, size);
+        }
+
+
+        //public override void UpdateGeometry()
+        //{
+
+        //}
+
+
+        /// <summary>
+        /// Method to Update Scale in UV2
+        /// </summary>
+        //void UpdateSDFScale(float lossyScale)
+        //{
+        //    // TODO: Resolve - Underline / Strikethrough segments not getting their SDF Scale adjusted.
+
+        //    //Debug.Log("Updating SDF Scale.");
+
+        //    // Return if we don't have a valid reference to a Canvas.
+        //    if (m_canvas == null)
+        //    {
+        //        m_canvas = GetCanvas();
+        //        if (m_canvas == null) return;
+        //    }
+
+        //    lossyScale = lossyScale == 0 ? 1 : lossyScale;
+
+        //    float xScale = 0;
+        //    float canvasScaleFactor = m_canvas.scaleFactor;
+
+        //    if (m_canvas.renderMode == RenderMode.ScreenSpaceOverlay)
+        //        xScale = lossyScale / canvasScaleFactor;
+        //    else if (m_canvas.renderMode == RenderMode.ScreenSpaceCamera)
+        //        xScale = m_canvas.worldCamera != null ? lossyScale : 1;
+        //    else
+        //        xScale = lossyScale;
+
+        //    // Iterate through each of the characters.
+        //    for (int i = 0; i < m_textInfo.characterCount; i++)
+        //    {
+        //        // Only update scale for visible characters.
+        //        if (m_textInfo.characterInfo[i].isVisible && m_textInfo.characterInfo[i].elementType == TMP_TextElementType.Character)
+        //        {
+        //            float scale = xScale * m_textInfo.characterInfo[i].scale * (1 - m_charWidthAdjDelta);
+        //            if (!m_textInfo.characterInfo[i].isUsingAlternateTypeface && (m_textInfo.characterInfo[i].style & FontStyles.Bold) == FontStyles.Bold) scale *= -1;
+
+        //            int index = m_textInfo.characterInfo[i].materialReferenceIndex;
+        //            int vertexIndex = m_textInfo.characterInfo[i].vertexIndex;
+
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 0].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 1].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 2].y = scale;
+        //            m_textInfo.meshInfo[index].uvs2[vertexIndex + 3].y = scale;
+        //        }
+        //    }
+
+        //    // Push the updated uv2 scale information to the meshes.
+        //    for (int i = 0; i < m_textInfo.materialCount; i++)
+        //    {
+        //        if (i == 0)
+        //        {
+        //            m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+        //            m_canvasRenderer.SetMesh(m_mesh);
+        //        }
+        //        else
+        //        {
+        //            m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+        //            m_subTextObjects[i].canvasRenderer.SetMesh(m_subTextObjects[i].mesh);
+        //        }
+        //    }
+        //}
+
+        /// <summary>
+        /// Method to update the SDF Scale in UV2.
+        /// </summary>
+        /// <param name="scaleDelta"></param>
+        void UpdateSDFScale(float scaleDelta)
+        {
+            if (scaleDelta == 0 || scaleDelta == float.PositiveInfinity)
+            {
+                m_havePropertiesChanged = true;
+                OnPreRenderCanvas();
+                return;
+            }
+
+            for (int materialIndex = 0; materialIndex < m_textInfo.materialCount; materialIndex ++)
+            {
+                TMP_MeshInfo meshInfo = m_textInfo.meshInfo[materialIndex];
+
+                for (int i = 0; i < meshInfo.uvs2.Length; i++)
+                {
+                    meshInfo.uvs2[i].y *= Mathf.Abs(scaleDelta);
+                }
+            }
+
+            // Push the updated uv2 scale information to the meshes.
+            for (int i = 0; i < m_textInfo.materialCount; i++)
+            {
+                if (i == 0)
+                {
+                    m_mesh.uv2 = m_textInfo.meshInfo[0].uvs2;
+                    m_canvasRenderer.SetMesh(m_mesh);
+                }
+                else
+                {
+                    m_subTextObjects[i].mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+                    m_subTextObjects[i].canvasRenderer.SetMesh(m_subTextObjects[i].mesh);
+                }
+            }
+        }
+
+
+        // Function to offset vertices position to account for line spacing changes.
+        protected override void AdjustLineOffset(int startIndex, int endIndex, float offset)
+        {
+            Vector3 vertexOffset = new Vector3(0, offset, 0);
+
+            for (int i = startIndex; i <= endIndex; i++)
+            {
+                m_textInfo.characterInfo[i].bottomLeft -= vertexOffset;
+                m_textInfo.characterInfo[i].topLeft -= vertexOffset;
+                m_textInfo.characterInfo[i].topRight -= vertexOffset;
+                m_textInfo.characterInfo[i].bottomRight -= vertexOffset;
+
+                m_textInfo.characterInfo[i].ascender -= vertexOffset.y;
+                m_textInfo.characterInfo[i].baseLine -= vertexOffset.y;
+                m_textInfo.characterInfo[i].descender -= vertexOffset.y;
+
+                if (m_textInfo.characterInfo[i].isVisible)
+                {
+                    m_textInfo.characterInfo[i].vertex_BL.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_TL.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_TR.position -= vertexOffset;
+                    m_textInfo.characterInfo[i].vertex_BR.position -= vertexOffset;
+                }
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9c0541e194050a550b99f27a7652bc33c5b6fad1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TMPro_UGUI_Private.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3069a00b8c364df395994d7d379e0a99
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {fileID: 2800000, guid: 8e098d8d28c5182419f7a1c8b91ca722, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1417cacd832365ff4c867735eae0b56d8364b713
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs
@@ -0,0 +1,370 @@
+using UnityEngine;
+using UnityEngine.EventSystems;
+using System.Collections;
+
+
+namespace TMPro
+{
+
+    public enum TextContainerAnchors { TopLeft = 0, Top = 1, TopRight = 2, Left = 3, Middle = 4, Right = 5, BottomLeft = 6, Bottom = 7, BottomRight = 8, Custom = 9 };
+
+
+    [RequireComponent(typeof(RectTransform))]
+    [AddComponentMenu("Layout/Text Container")]
+    public class TextContainer : UIBehaviour
+    {
+
+        #pragma warning disable 0618 // Disabled warning related to deprecated properties. This is for backwards compatibility.
+
+        public bool hasChanged
+        {
+            get { return m_hasChanged; }
+            set { m_hasChanged = value; }
+        }
+        private bool m_hasChanged;
+
+
+        // Pivot / Transform Position
+        public Vector2 pivot
+        {
+            get { return m_pivot; }
+            set { /*Debug.Log("Pivot has changed.");*/ if (m_pivot != value) { m_pivot = value; m_anchorPosition = GetAnchorPosition(m_pivot); m_hasChanged = true; OnContainerChanged(); } }
+        }
+        [SerializeField]
+        private Vector2 m_pivot;
+
+
+        public TextContainerAnchors anchorPosition
+        {
+            get { return m_anchorPosition; }
+            set { /*Debug.Log("Anchor has changed.");*/ if (m_anchorPosition != value) { m_anchorPosition = value; m_pivot = GetPivot(m_anchorPosition); m_hasChanged = true; OnContainerChanged(); } }
+        }
+        [SerializeField]
+        private TextContainerAnchors m_anchorPosition = TextContainerAnchors.Middle;
+
+
+        // Rect which defines the Rectangle 
+        public Rect rect
+        {
+            get { return m_rect; }
+            set { /*Debug.Log("Rectangle has changed.");*/ if (m_rect != value) { m_rect = value; /*m_size = new Vector2(m_rect.width, m_rect.height);*/ m_hasChanged = true; OnContainerChanged(); } }
+        }
+        [SerializeField]
+        private Rect m_rect;
+
+
+        public Vector2 size
+        {
+            get { return new Vector2(m_rect.width, m_rect.height); }
+            set { /*Debug.Log("Size has changed.");*/ if (new Vector2(m_rect.width, m_rect.height) != value) { SetRect(value); m_hasChanged = true; m_isDefaultWidth = false; m_isDefaultHeight = false; OnContainerChanged(); } }
+        }
+      
+
+        // Sets the width of the Text Container.
+        public float width
+        {
+            get { return m_rect.width; }
+            set { /*Debug.Log("Width has changed.");*/ SetRect(new Vector2(value, m_rect.height)); m_hasChanged = true; m_isDefaultWidth = false; OnContainerChanged(); }
+        }
+
+
+        // Sets the height of the Text Container.
+        public float height
+        {
+            get { return m_rect.height; }
+            set { SetRect(new Vector2(m_rect.width, value)); m_hasChanged = true; m_isDefaultHeight = false; OnContainerChanged(); }
+        }
+
+
+        // Used to determine if the user has changed the width of the Text Container.
+        public bool isDefaultWidth
+        {
+            get { return m_isDefaultWidth; }
+        }
+        private bool m_isDefaultWidth;
+
+        // Used to determine if the user has changed the height of the Text Container.
+        public bool isDefaultHeight
+        {
+            get { return m_isDefaultHeight; }
+        }
+        private bool m_isDefaultHeight;
+
+
+        public bool isAutoFitting
+        {
+            get { return m_isAutoFitting; }
+            set { m_isAutoFitting = value; }
+        }
+        private bool m_isAutoFitting = false;
+
+
+        // Corners of the Text Container
+        public Vector3[] corners
+        {
+            get { return m_corners; }
+        }
+        private Vector3[] m_corners = new Vector3[4];
+
+
+        public Vector3[] worldCorners
+        {
+            get { return m_worldCorners; }
+        }
+        private Vector3[] m_worldCorners = new Vector3[4];
+
+
+        //public Vector3 normal
+        //{
+        //    get { return m_normal; }
+        //}
+        //private Vector3 m_normal;
+
+
+        // The margin offset from the Rectangle Bounds
+        public Vector4 margins
+        {
+            get { return m_margins; }
+            set { if (m_margins != value) { /*Debug.Log("Margins have changed.");*/ m_margins = value; m_hasChanged = true; OnContainerChanged(); } }
+        }
+        [SerializeField]
+        private Vector4 m_margins;
+
+
+        /// <summary>
+        /// The RectTransform used by the object
+        /// </summary>
+        public RectTransform rectTransform
+        {
+            get
+            {
+                if (m_rectTransform == null) m_rectTransform = GetComponent<RectTransform>();
+
+                return m_rectTransform;
+            }
+        }
+        private RectTransform m_rectTransform;
+
+
+        //private Transform m_transform;
+        //private bool m_isAddingRectTransform;
+        private static Vector2 k_defaultSize = new Vector2(100, 100);
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public TextMeshPro textMeshPro
+        {
+            get
+            {
+                if (m_textMeshPro == null) m_textMeshPro = GetComponent<TextMeshPro>();
+                return m_textMeshPro;
+            }
+        }
+        private TextMeshPro m_textMeshPro;
+
+
+        protected override void Awake()
+        {
+            Debug.LogWarning("The Text Container component is now Obsolete and can safely be removed from [" + gameObject.name + "].", this);
+
+            return;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnEnable()
+        {
+            //Debug.Log("Text Container OnEnable() called.");
+
+            OnContainerChanged();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnDisable()
+        {
+            //Debug.Log("OnDisable() called.");
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        void OnContainerChanged()
+        {
+            //Debug.Log("OnContainerChanged");
+
+            UpdateCorners();
+            //UpdateWorldCorners();
+
+            if (this.m_rectTransform != null)
+            {
+                m_rectTransform.sizeDelta = this.size;
+                m_rectTransform.hasChanged = true;
+            }
+
+            if (this.textMeshPro != null)
+            {
+                m_textMeshPro.SetVerticesDirty();
+                m_textMeshPro.margin = m_margins;
+            }
+        }
+
+
+#if UNITY_EDITOR
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnValidate()
+        {
+            //Debug.Log("OnValidate() called.");
+            m_hasChanged = true;
+            OnContainerChanged();
+        }
+#endif
+
+
+        /*
+        void LateUpdate()
+        {
+            // Used by the Run Time Text Input Component ... This will have to be changed.
+            if (m_transform.hasChanged)
+                UpdateWorldCorners();
+        }
+        */
+
+
+
+        /// <summary>
+        /// Callback from Unity to handle RectTransform changes.
+        /// </summary>
+        protected override void OnRectTransformDimensionsChange()
+        {
+            // Required to add a RectTransform to objects created in previous releases.
+            if (this.rectTransform == null) m_rectTransform = gameObject.AddComponent<RectTransform>();
+
+            if (m_rectTransform.sizeDelta != k_defaultSize)
+                this.size = m_rectTransform.sizeDelta;
+
+            pivot = m_rectTransform.pivot;
+
+            m_hasChanged = true;
+            OnContainerChanged();
+        }
+
+
+        private void SetRect(Vector2 size)
+        {
+            m_rect = new Rect(m_rect.x, m_rect.y, size.x, size.y);
+            //UpdateCorners();
+        }
+
+        private void UpdateCorners()
+        {
+            m_corners[0] = new Vector3(-m_pivot.x * m_rect.width, (- m_pivot.y) * m_rect.height);
+            m_corners[1] = new Vector3(-m_pivot.x * m_rect.width, (1 - m_pivot.y) * m_rect.height);
+            m_corners[2] = new Vector3((1 - m_pivot.x) * m_rect.width, (1 - m_pivot.y) * m_rect.height);
+            m_corners[3] = new Vector3((1 - m_pivot.x) * m_rect.width, (- m_pivot.y) * m_rect.height);
+            //Debug.Log("Pivot " + m_pivot + "  Corners 0: " + m_corners[0] + "  1: " + m_corners[1] + "  2: " + m_corners[2] + "  3: " + m_corners[3]);
+
+            if (m_rectTransform != null)
+                m_rectTransform.pivot = m_pivot;
+        }
+
+
+        //private void UpdateWorldCorners()
+        //{
+        //    if (m_transform == null)
+        //        return;
+
+        //    Vector3 position = m_transform.position;
+        //    m_worldCorners[0] = position + m_transform.TransformDirection(m_corners[0]);
+        //    m_worldCorners[1] = position + m_transform.TransformDirection(m_corners[1]);
+        //    m_worldCorners[2] = position + m_transform.TransformDirection(m_corners[2]);
+        //    m_worldCorners[3] = position + m_transform.TransformDirection(m_corners[3]);
+
+        //    m_normal = Vector3.Cross(worldCorners[1] - worldCorners[0], worldCorners[3] - worldCorners[0]);
+        //}
+
+
+        //public Vector3[] GetWorldCorners()
+        //{
+        //    UpdateWorldCorners();
+
+        //    return m_worldCorners;
+        //}
+
+
+        Vector2 GetPivot(TextContainerAnchors anchor)
+        {
+            Vector2 pivot = Vector2.zero;
+
+            switch (anchor)
+            {
+                case TextContainerAnchors.TopLeft:
+                    pivot = new Vector2(0, 1);
+                    break;
+                case TextContainerAnchors.Top:
+                    pivot = new Vector2(0.5f, 1);
+                    break;
+                case TextContainerAnchors.TopRight:
+                    pivot = new Vector2(1, 1);
+                    break;
+                case TextContainerAnchors.Left:
+                    pivot = new Vector2(0, 0.5f);
+                    break;
+                case TextContainerAnchors.Middle:
+                    pivot = new Vector2(0.5f, 0.5f);
+                    break;
+                case TextContainerAnchors.Right:
+                    pivot = new Vector2(1, 0.5f);
+                    break;
+                case TextContainerAnchors.BottomLeft:
+                    pivot = new Vector2(0, 0);
+                    break;
+                case TextContainerAnchors.Bottom:
+                    pivot = new Vector2(0.5f, 0);
+                    break;
+                case TextContainerAnchors.BottomRight:
+                    pivot = new Vector2(1, 0);
+                    break;
+            }
+
+            return pivot;
+        }
+
+
+        // Method which returns the Anchor position based on pivot value.
+        TextContainerAnchors GetAnchorPosition(Vector2 pivot)
+        {
+
+            if (pivot == new Vector2(0, 1))
+                return TextContainerAnchors.TopLeft;
+            else if (pivot == new Vector2(0.5f, 1))
+                return TextContainerAnchors.Top;
+            else if (pivot == new Vector2(1f, 1))
+                return TextContainerAnchors.TopRight;
+            else if (pivot == new Vector2(0, 0.5f))
+                return TextContainerAnchors.Left;
+            else if (pivot == new Vector2(0.5f, 0.5f))
+                return TextContainerAnchors.Middle;
+            else if (pivot == new Vector2(1, 0.5f))
+                return TextContainerAnchors.Right;
+            else if (pivot == new Vector2(0, 0))
+                return TextContainerAnchors.BottomLeft;
+            else if (pivot == new Vector2(0.5f, 0))
+                return TextContainerAnchors.Bottom;
+            else if (pivot == new Vector2(1, 0))
+                return TextContainerAnchors.BottomRight;
+            else
+                return TextContainerAnchors.Custom;
+
+        }
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..8b8f26e767096ad75f88f6ad4e71f97f6dd87ef7
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextContainer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 32d40088a6124c578ad6b428df586e2e
+timeCreated: 1448498693
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -110
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs
new file mode 100644
index 0000000000000000000000000000000000000000..f6903225095a4cc651572e187e537f6f22a7a625
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs
@@ -0,0 +1,551 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.UI;
+
+namespace TMPro
+{
+
+    [DisallowMultipleComponent]
+    [RequireComponent(typeof(MeshRenderer))]
+    [RequireComponent(typeof(MeshFilter))] 
+    [AddComponentMenu("Mesh/TextMeshPro - Text")]
+    [ExecuteAlways]
+    public partial class TextMeshPro : TMP_Text, ILayoutElement
+    {
+        // Public Properties and Serializable Properties
+
+        /// <summary>
+        /// Sets the Renderer's sorting Layer ID
+        /// </summary>
+        public int sortingLayerID
+        {
+            get { return m_renderer.sortingLayerID; }
+            set { m_renderer.sortingLayerID = value; }
+        }
+
+        /// <summary>
+        /// Sets the Renderer's sorting order within the assigned layer.
+        /// </summary>
+        public int sortingOrder
+        {
+            get { return m_renderer.sortingOrder; }
+            set { m_renderer.sortingOrder = value; }
+        }
+
+        /// <summary>
+        /// Determines if the size of the text container will be adjusted to fit the text object when it is first created.
+        /// </summary>
+        public override bool autoSizeTextContainer
+        {
+            get { return m_autoSizeTextContainer; }
+
+            set { if (m_autoSizeTextContainer == value) return; m_autoSizeTextContainer = value; if (m_autoSizeTextContainer) { TMP_UpdateManager.RegisterTextElementForLayoutRebuild(this); SetLayoutDirty(); } }
+        }
+
+
+        /// <summary>
+        /// Returns a reference to the Text Container
+        /// </summary>
+        [Obsolete("The TextContainer is now obsolete. Use the RectTransform instead.")]
+        public TextContainer textContainer
+        {
+            get
+            {
+                return null;
+            }
+        }
+
+
+        /// <summary>
+        /// Returns a reference to the Transform
+        /// </summary>
+        public new Transform transform
+        {
+            get
+            {
+                if (m_transform == null)
+                    m_transform = GetComponent<Transform>();
+                
+                return m_transform;
+            }
+        }
+
+
+        #pragma warning disable 0108
+        /// <summary>
+        /// Returns the rendered assigned to the text object.
+        /// </summary>
+        public Renderer renderer
+        {
+            get
+            {
+                if (m_renderer == null)
+                    m_renderer = GetComponent<Renderer>();
+
+                return m_renderer;
+            }
+        }
+
+
+        /// <summary>
+        /// Returns the mesh assigned to the text object.
+        /// </summary>
+        public override Mesh mesh
+        {
+            get
+            {
+                if (m_mesh == null)
+                {
+                    m_mesh = new Mesh();
+                    m_mesh.hideFlags = HideFlags.HideAndDontSave;
+                    this.meshFilter.mesh = m_mesh;
+                }
+
+                return m_mesh;
+            }
+        }
+
+        /// <summary>
+        /// Returns the Mesh Filter of the text object.
+        /// </summary>
+        public MeshFilter meshFilter
+        {
+            get
+            {
+                if (m_meshFilter == null)
+                    m_meshFilter = GetComponent<MeshFilter>();
+
+                return m_meshFilter;
+            }
+        }
+
+        // MASKING RELATED PROPERTIES
+        /// <summary>
+        /// Sets the mask type 
+        /// </summary>
+        public MaskingTypes maskType
+        {
+            get { return m_maskType; }
+            set { m_maskType = value; SetMask(m_maskType); }
+        }
+
+
+        /// <summary>
+        /// Function used to set the mask type and coordinates in World Space
+        /// </summary>
+        /// <param name="type"></param>
+        /// <param name="maskCoords"></param>
+        public void SetMask(MaskingTypes type, Vector4 maskCoords)
+        {
+            SetMask(type);
+
+            SetMaskCoordinates(maskCoords);
+        }
+
+        /// <summary>
+        /// Function used to set the mask type, coordinates and softness
+        /// </summary>
+        /// <param name="type"></param>
+        /// <param name="maskCoords"></param>
+        /// <param name="softnessX"></param>
+        /// <param name="softnessY"></param>
+        public void SetMask(MaskingTypes type, Vector4 maskCoords, float softnessX, float softnessY)
+        {
+            SetMask(type);
+
+            SetMaskCoordinates(maskCoords, softnessX, softnessY);
+        }
+
+
+        /// <summary>
+        /// Schedule rebuilding of the text geometry.
+        /// </summary>
+        public override void SetVerticesDirty()
+        {
+            //Debug.Log("SetVerticesDirty()");
+
+            if (m_verticesAlreadyDirty || this == null || !this.IsActive())
+                return;
+
+            TMP_UpdateManager.RegisterTextElementForGraphicRebuild(this);
+            m_verticesAlreadyDirty = true;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetLayoutDirty()
+        {
+            m_isPreferredWidthDirty = true;
+            m_isPreferredHeightDirty = true;
+
+            if (m_layoutAlreadyDirty || this == null || !this.IsActive())
+                return;
+
+            //TMP_UpdateManager.RegisterTextElementForLayoutRebuild(this);
+            m_layoutAlreadyDirty = true;
+            //LayoutRebuilder.MarkLayoutForRebuild(this.rectTransform);
+            m_isLayoutDirty = true;
+        }
+
+
+        /// <summary>
+        /// Schedule updating of the material used by the text object.
+        /// </summary>
+        public override void SetMaterialDirty()
+        {
+            //Debug.Log("SetMaterialDirty()");
+
+            //if (!this.IsActive())
+            //    return;
+
+            //m_isMaterialDirty = true;
+            UpdateMaterial();
+            //TMP_UpdateManager.RegisterTextElementForGraphicRebuild(this);
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetAllDirty()
+        {
+            m_isInputParsingRequired = true;
+
+            SetLayoutDirty();
+            SetVerticesDirty();
+            SetMaterialDirty();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="update"></param>
+        public override void Rebuild(CanvasUpdate update)
+        {
+            if (this == null) return;
+
+            if (update == CanvasUpdate.Prelayout)
+            {
+                if (m_autoSizeTextContainer)
+                {
+                    m_rectTransform.sizeDelta = GetPreferredValues(Mathf.Infinity, Mathf.Infinity);
+                }
+            }
+            else if (update == CanvasUpdate.PreRender)
+            {
+                this.OnPreRenderObject();
+                m_verticesAlreadyDirty = false;
+                m_layoutAlreadyDirty = false;
+
+                if (!m_isMaterialDirty) return;
+
+                UpdateMaterial();
+                m_isMaterialDirty = false;
+            }
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void UpdateMaterial()
+        {
+            //Debug.Log("*** UpdateMaterial() ***");
+
+            //if (!this.IsActive())
+            //    return;
+
+            if (m_sharedMaterial == null)
+                return;
+
+            if (m_renderer == null) m_renderer = this.renderer;
+
+            // Only update the material if it has changed.
+            if (m_renderer.sharedMaterial.GetInstanceID() != m_sharedMaterial.GetInstanceID())
+                m_renderer.sharedMaterial = m_sharedMaterial;
+        }
+
+
+        /// <summary>
+        /// Function to be used to force recomputing of character padding when Shader / Material properties have been changed via script.
+        /// </summary>
+        public override void UpdateMeshPadding()
+        {
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_havePropertiesChanged = true;
+            checkPaddingRequired = false;
+
+            // Return if text object is not awake yet.
+            if (m_textInfo == null) return;
+
+            // Update sub text objects
+            for (int i = 1; i < m_textInfo.materialCount; i++)
+                m_subTextObjects[i].UpdateMeshPadding(m_enableExtraPadding, m_isUsingBold);
+        }
+
+
+        /// <summary>
+        /// Function to force regeneration of the mesh before its normal process time. This is useful when changes to the text object properties need to be applied immediately.
+        /// </summary>
+        public override void ForceMeshUpdate()
+        {
+            //Debug.Log("ForceMeshUpdate() called.");
+            m_havePropertiesChanged = true;
+            OnPreRenderObject();
+        }
+
+
+        /// <summary>
+        /// Function to force regeneration of the mesh before its normal process time. This is useful when changes to the text object properties need to be applied immediately.
+        /// </summary>
+        /// <param name="ignoreInactive">If set to true, the text object will be regenerated regardless of is active state.</param>
+        public override void ForceMeshUpdate(bool ignoreInactive)
+        {
+            m_havePropertiesChanged = true;
+            m_ignoreActiveState = true;
+            OnPreRenderObject();
+        }
+
+
+        /// <summary>
+        /// Function used to evaluate the length of a text string.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <returns></returns>
+        public override TMP_TextInfo GetTextInfo(string text)
+        {
+            StringToCharArray(text, ref m_TextParsingBuffer);
+            SetArraySizes(m_TextParsingBuffer);
+
+            m_renderMode = TextRenderFlags.DontRender;
+
+            ComputeMarginSize();
+
+            GenerateTextMesh();
+
+            m_renderMode = TextRenderFlags.Render;
+
+            return this.textInfo;
+        }
+
+
+        /// <summary>
+        /// Function to clear the geometry of the Primary and Sub Text objects.
+        /// </summary>
+        public override void ClearMesh(bool updateMesh)
+        {
+            if (m_textInfo.meshInfo[0].mesh == null) m_textInfo.meshInfo[0].mesh = m_mesh;
+
+            m_textInfo.ClearMeshInfo(updateMesh);
+        }
+
+
+        /// <summary>
+        /// Function to force the regeneration of the text object.
+        /// </summary>
+        /// <param name="flags"> Flags to control which portions of the geometry gets uploaded.</param>
+        //public override void ForceMeshUpdate(TMP_VertexDataUpdateFlags flags) { }
+
+
+        /// <summary>
+        /// Function to update the geometry of the main and sub text objects.
+        /// </summary>
+        /// <param name="mesh"></param>
+        /// <param name="index"></param>
+        public override void UpdateGeometry(Mesh mesh, int index)
+        {
+            mesh.RecalculateBounds();
+        }
+
+
+        /// <summary>
+        /// Function to upload the updated vertex data and renderer.
+        /// </summary>
+        public override void UpdateVertexData(TMP_VertexDataUpdateFlags flags)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                Mesh mesh;
+
+                if (i == 0)
+                    mesh = m_mesh;
+                else
+                {
+                    // Clear unused vertices
+                    // TODO: Causes issues when sorting geometry as last vertex data attribute get wiped out.
+                    //m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    mesh = m_subTextObjects[i].mesh;
+                }
+
+                //mesh.MarkDynamic();
+
+                if ((flags & TMP_VertexDataUpdateFlags.Vertices) == TMP_VertexDataUpdateFlags.Vertices)
+                    mesh.vertices = m_textInfo.meshInfo[i].vertices;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Uv0) == TMP_VertexDataUpdateFlags.Uv0)
+                    mesh.uv = m_textInfo.meshInfo[i].uvs0;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Uv2) == TMP_VertexDataUpdateFlags.Uv2)
+                    mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+
+                //if ((flags & TMP_VertexDataUpdateFlags.Uv4) == TMP_VertexDataUpdateFlags.Uv4)
+                //    mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Colors32) == TMP_VertexDataUpdateFlags.Colors32)
+                    mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                mesh.RecalculateBounds();
+            }
+        }
+
+
+        /// <summary>
+        /// Function to upload the updated vertex data and renderer.
+        /// </summary>
+        public override void UpdateVertexData()
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                Mesh mesh;
+
+                if (i == 0)
+                    mesh = m_mesh;
+                else
+                {
+                    // Clear unused vertices
+                    m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    mesh = m_subTextObjects[i].mesh;
+                }
+
+
+                //mesh.MarkDynamic();
+                mesh.vertices = m_textInfo.meshInfo[i].vertices;
+                mesh.uv = m_textInfo.meshInfo[i].uvs0;
+                mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+                //mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+                mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                mesh.RecalculateBounds();
+            }
+        }
+
+        public void UpdateFontAsset()
+        {
+            LoadFontAsset();
+        }
+
+
+        private bool m_currentAutoSizeMode;
+
+
+        public void CalculateLayoutInputHorizontal()
+        {
+            //Debug.Log("*** CalculateLayoutInputHorizontal() ***");
+
+            if (!this.gameObject.activeInHierarchy)
+                return;
+
+            //IsRectTransformDriven = true;
+
+            m_currentAutoSizeMode = m_enableAutoSizing;
+
+            if (m_isCalculateSizeRequired || m_rectTransform.hasChanged)
+            {
+                //Debug.Log("Calculating Layout Horizontal");
+
+                //m_LayoutPhase = AutoLayoutPhase.Horizontal;
+                //m_isRebuildingLayout = true;
+
+                m_minWidth = 0;
+                m_flexibleWidth = 0;
+
+                //m_renderMode = TextRenderFlags.GetPreferredSizes; // Set Text to not Render and exit early once we have new width values.
+
+                if (m_enableAutoSizing)
+                {
+                    m_fontSize = m_fontSizeMax;
+                }
+
+                // Set Margins to Infinity
+                m_marginWidth = k_LargePositiveFloat;
+                m_marginHeight = k_LargePositiveFloat;
+
+                if (m_isInputParsingRequired || m_isTextTruncated)
+                    ParseInputText();
+
+                GenerateTextMesh();
+
+                m_renderMode = TextRenderFlags.Render;
+
+                //m_preferredWidth = (int)m_preferredWidth + 1f;
+
+                ComputeMarginSize();
+
+                //Debug.Log("Preferred Width: " + m_preferredWidth + "  Margin Width: " + m_marginWidth + "  Preferred Height: " + m_preferredHeight + "  Margin Height: " + m_marginHeight + "  Rendered Width: " + m_renderedWidth + "  Height: " + m_renderedHeight + "  RectTransform Width: " + m_rectTransform.rect);
+
+                m_isLayoutDirty = true;
+            }
+        }
+
+
+        public void CalculateLayoutInputVertical()
+        {
+            //Debug.Log("*** CalculateLayoutInputVertical() ***");
+
+            // Check if object is active
+            if (!this.gameObject.activeInHierarchy) // || IsRectTransformDriven == false)
+                return;
+
+            //IsRectTransformDriven = true;
+
+            if (m_isCalculateSizeRequired || m_rectTransform.hasChanged)
+            {
+                //Debug.Log("Calculating Layout InputVertical");
+
+                //m_LayoutPhase = AutoLayoutPhase.Vertical;
+                //m_isRebuildingLayout = true;
+
+                m_minHeight = 0;
+                m_flexibleHeight = 0;
+
+                //m_renderMode = TextRenderFlags.GetPreferredSizes;
+
+                if (m_enableAutoSizing)
+                {
+                    m_currentAutoSizeMode = true;
+                    m_enableAutoSizing = false;
+                }
+
+                m_marginHeight = k_LargePositiveFloat;
+
+                GenerateTextMesh();
+
+                m_enableAutoSizing = m_currentAutoSizeMode;
+
+                m_renderMode = TextRenderFlags.Render;
+
+                //m_preferredHeight = (int)m_preferredHeight + 1f;
+
+                ComputeMarginSize();
+
+                //Debug.Log("Preferred Height: " + m_preferredHeight + "  Margin Height: " + m_marginHeight + "  Preferred Width: " + m_preferredWidth + "  Margin Width: " + m_marginWidth + "  Rendered Width: " + m_renderedWidth + "  Height: " + m_renderedHeight + "  RectTransform Width: " + m_rectTransform.rect);
+
+                m_isLayoutDirty = true;
+            }
+
+            m_isCalculateSizeRequired = false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3fbc12432e17321fa9c54e30a83eaa74b5330dc8
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshPro.cs.meta
@@ -0,0 +1,39 @@
+fileFormatVersion: 2
+guid: 9541d86e2fd84c1d9990edf0852d74ab
+labels:
+- Text
+- TextMesh
+- Mesh
+- Glow
+- Shadow
+- Outline
+- Bevel
+- Pro
+- TextMeshPro
+- Kerning
+- Distance
+- Field
+- Signed
+- Font
+- Atlas
+- Creator
+- Advanced
+- Rendering
+- TrueType
+- Dynamic
+- Layout
+- Style
+- Styles
+- Fonts
+- SDF
+- Scene
+- GUI
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -105
+  icon: {fileID: 2800000, guid: 2fd6421f253b4ef1a19526541f9ffc0c, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs
new file mode 100644
index 0000000000000000000000000000000000000000..be9ff8f1c39e0a5f592b4fbed453789a2bbb4c68
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs
@@ -0,0 +1,656 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+using UnityEngine.UI.CoroutineTween;
+
+
+#pragma warning disable 0414 // Disabled a few warnings related to serialized variables not used in this script but used in the editor.
+
+namespace TMPro
+{
+
+    [DisallowMultipleComponent]
+    [RequireComponent(typeof(RectTransform))]
+    [RequireComponent(typeof(CanvasRenderer))]
+    [AddComponentMenu("UI/TextMeshPro - Text (UI)", 11)]
+    [ExecuteAlways]
+    public partial class TextMeshProUGUI : TMP_Text, ILayoutElement
+    {
+        /// <summary>
+        /// Get the material that will be used for rendering.
+        /// </summary>
+        public override Material materialForRendering
+        {
+            get { return TMP_MaterialManager.GetMaterialForRendering(this, m_sharedMaterial); }
+        }
+
+        /// <summary>
+        /// Determines if the size of the text container will be adjusted to fit the text object when it is first created.
+        /// </summary>
+        public override bool autoSizeTextContainer
+        {
+            get { return m_autoSizeTextContainer; }
+
+            set { if (m_autoSizeTextContainer == value) return; m_autoSizeTextContainer = value; if (m_autoSizeTextContainer) { CanvasUpdateRegistry.RegisterCanvasElementForLayoutRebuild(this); SetLayoutDirty(); } }
+        }
+
+
+
+        /// <summary>
+        /// Reference to the Mesh used by the text object.
+        /// </summary>
+        public override Mesh mesh
+        {
+            get { return m_mesh; }
+        }
+
+
+        /// <summary>
+        /// Reference to the CanvasRenderer used by the text object.
+        /// </summary>
+        public new CanvasRenderer canvasRenderer
+        {
+            get
+            {
+                if (m_canvasRenderer == null) m_canvasRenderer = GetComponent<CanvasRenderer>();
+
+                return m_canvasRenderer;
+            }
+        }
+
+
+        /// <summary>
+        /// Anchor dampening prevents the anchor position from being adjusted unless the positional change exceeds about 40% of the width of the underline character. This essentially stabilizes the anchor position.
+        /// </summary>
+        //public bool anchorDampening
+        //{
+        //    get { return m_anchorDampening; }
+        //    set { if (m_anchorDampening != value) { havePropertiesChanged = true; m_anchorDampening = value; /* ScheduleUpdate(); */ } }
+        //}
+
+
+        private bool m_isRebuildingLayout = false;
+        //private bool m_isLayoutDirty = false;
+
+
+        /// <summary>
+        /// Function called by Unity when the horizontal layout needs to be recalculated.
+        /// </summary>
+        public void CalculateLayoutInputHorizontal()
+        {
+            //Debug.Log("*** CalculateLayoutHorizontal() ***"); // at Frame: " + Time.frameCount); // called on Object ID " + GetInstanceID());
+            
+            //// Check if object is active
+            if (!this.gameObject.activeInHierarchy)
+                return;
+
+            if (m_isCalculateSizeRequired || m_rectTransform.hasChanged)
+            {
+                m_preferredWidth = GetPreferredWidth();
+
+                ComputeMarginSize();
+
+                m_isLayoutDirty = true;
+            }
+        }
+
+
+        /// <summary>
+        /// Function called by Unity when the vertical layout needs to be recalculated.
+        /// </summary>
+        public void CalculateLayoutInputVertical()
+        {
+            //Debug.Log("*** CalculateLayoutInputVertical() ***"); // at Frame: " + Time.frameCount); // called on Object ID " + GetInstanceID());
+            
+            //// Check if object is active
+            if (!this.gameObject.activeInHierarchy) // || IsRectTransformDriven == false)
+                return;
+
+            if (m_isCalculateSizeRequired || m_rectTransform.hasChanged)
+            {
+                m_preferredHeight = GetPreferredHeight();
+
+                ComputeMarginSize();
+
+                m_isLayoutDirty = true;
+            }
+
+            m_isCalculateSizeRequired = false;
+        }
+
+
+        public override void SetVerticesDirty()
+        {
+            if (m_verticesAlreadyDirty || this == null || !this.IsActive() || CanvasUpdateRegistry.IsRebuildingGraphics())
+                return;
+
+            m_verticesAlreadyDirty = true;
+            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);
+
+            if (m_OnDirtyVertsCallback != null)
+                m_OnDirtyVertsCallback();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetLayoutDirty()
+        {
+            m_isPreferredWidthDirty = true;
+            m_isPreferredHeightDirty = true;
+
+            if ( m_layoutAlreadyDirty || this == null || !this.IsActive())
+                return;
+
+            m_layoutAlreadyDirty = true;
+            LayoutRebuilder.MarkLayoutForRebuild(this.rectTransform);
+
+            m_isLayoutDirty = true;
+
+            if (m_OnDirtyLayoutCallback != null)
+                m_OnDirtyLayoutCallback();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetMaterialDirty()
+        {
+            //Debug.Log("SetMaterialDirty()");
+
+            if (this == null || !this.IsActive() || CanvasUpdateRegistry.IsRebuildingGraphics())
+                return;
+
+            m_isMaterialDirty = true;
+            CanvasUpdateRegistry.RegisterCanvasElementForGraphicRebuild((ICanvasElement)this);
+
+            if (m_OnDirtyMaterialCallback != null)
+                m_OnDirtyMaterialCallback();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public override void SetAllDirty()
+        {
+            m_isInputParsingRequired = true;
+
+            SetLayoutDirty();
+            SetVerticesDirty();
+            SetMaterialDirty();
+        }
+
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="update"></param>
+        public override void Rebuild(CanvasUpdate update)
+        {
+            if (this == null) return;
+
+            if (update == CanvasUpdate.Prelayout)
+            {
+                if (m_autoSizeTextContainer)
+                {
+                    m_rectTransform.sizeDelta = GetPreferredValues(Mathf.Infinity, Mathf.Infinity);
+                }
+            }
+            else if (update == CanvasUpdate.PreRender)
+            {
+                OnPreRenderCanvas();
+
+                m_verticesAlreadyDirty = false;
+                m_layoutAlreadyDirty = false;
+
+                if (!m_isMaterialDirty) return;
+
+                UpdateMaterial();
+                m_isMaterialDirty = false;
+            }
+        }
+
+
+        /// <summary>
+        /// Method to keep the pivot of the sub text objects in sync with the parent pivot.
+        /// </summary>
+        private void UpdateSubObjectPivot()
+        {
+            if (m_textInfo == null) return;
+
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+            {
+                m_subTextObjects[i].SetPivotDirty();
+            }
+            //m_isPivotDirty = false;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="baseMaterial"></param>
+        /// <returns></returns>
+        public override Material GetModifiedMaterial(Material baseMaterial)
+        {
+            Material mat = baseMaterial;
+
+            if (m_ShouldRecalculateStencil)
+            {
+                m_stencilID = TMP_MaterialManager.GetStencilID(gameObject);
+                m_ShouldRecalculateStencil = false;
+            }
+
+            // Release masking material
+            //if (m_MaskMaterial != null)
+            //    MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+
+            if (m_stencilID > 0)
+            {
+                mat = TMP_MaterialManager.GetStencilMaterial(baseMaterial, m_stencilID);
+                if (m_MaskMaterial != null)
+                    TMP_MaterialManager.ReleaseStencilMaterial(m_MaskMaterial);
+
+                m_MaskMaterial = mat;
+            }
+
+            return mat;
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void UpdateMaterial()
+        {
+            //Debug.Log("*** UpdateMaterial() ***");
+
+            //if (!this.IsActive())
+            //    return;
+
+            if (m_sharedMaterial == null) return;
+
+            if (m_canvasRenderer == null) m_canvasRenderer = this.canvasRenderer;
+
+            m_canvasRenderer.materialCount = 1;
+            m_canvasRenderer.SetMaterial(materialForRendering, 0);
+        }
+
+
+        //public override void OnRebuildRequested()
+        //{
+        //    //Debug.Log("OnRebuildRequested");
+
+        //    base.OnRebuildRequested();
+        //}
+
+
+
+        //public override bool Raycast(Vector2 sp, Camera eventCamera)
+        //{
+        //    //Debug.Log("Raycast Event. ScreenPoint: " + sp);
+        //    return base.Raycast(sp, eventCamera);
+        //}
+
+
+        // MASKING RELATED PROPERTIES
+        /// <summary>
+        /// Sets the masking offset from the bounds of the object
+        /// </summary>
+        public Vector4 maskOffset
+        {
+            get { return m_maskOffset; }
+            set { m_maskOffset = value; UpdateMask(); m_havePropertiesChanged = true; }
+        }
+
+
+        //public override Material defaultMaterial 
+        //{
+        //    get { Debug.Log("Default Material called."); return m_sharedMaterial; }
+        //}
+
+
+
+        //protected override void OnCanvasHierarchyChanged()
+        //{
+        //    //Debug.Log("OnCanvasHierarchyChanged...");
+        //}
+
+
+        // IClippable implementation
+        /// <summary>
+        /// Method called when the state of a parent changes.
+        /// </summary>
+        public override void RecalculateClipping()
+        {
+            //Debug.Log("***** RecalculateClipping() *****");
+
+            base.RecalculateClipping();
+        }
+
+        // IMaskable Implementation
+        /// <summary>
+        /// Method called when Stencil Mask needs to be updated on this element and parents.
+        /// </summary>
+        public override void RecalculateMasking()
+        {
+            //Debug.Log("***** RecalculateMasking() *****");
+
+            this.m_ShouldRecalculateStencil = true;
+            SetMaterialDirty();
+        }
+
+        /// <summary>
+        /// Override of the Cull function to provide for the ability to override the culling of the text object.
+        /// </summary>
+        /// <param name="clipRect"></param>
+        /// <param name="validRect"></param>
+        public override void Cull(Rect clipRect, bool validRect)
+        {
+            if (m_ignoreRectMaskCulling) return;
+
+            base.Cull(clipRect, validRect);
+        }
+
+
+        //protected override void UpdateGeometry()
+        //{
+        //    //Debug.Log("UpdateGeometry");
+        //    //base.UpdateGeometry();
+        //}
+
+
+        //protected override void UpdateMaterial()
+        //{
+        //    //Debug.Log("UpdateMaterial called.");
+        ////    base.UpdateMaterial();
+        //}
+
+
+        /*
+        /// <summary>
+        /// Sets the mask type 
+        /// </summary>
+        public MaskingTypes mask
+        {
+            get { return m_mask; }
+            set { m_mask = value; havePropertiesChanged = true; isMaskUpdateRequired = true; }
+        }
+
+        /// <summary>
+        /// Set the masking offset mode (as percentage or pixels)
+        /// </summary>
+        public MaskingOffsetMode maskOffsetMode
+        {
+            get { return m_maskOffsetMode; }
+            set { m_maskOffsetMode = value; havePropertiesChanged = true; isMaskUpdateRequired = true; }
+        }
+        */
+
+
+
+        /*
+        /// <summary>
+        /// Sets the softness of the mask
+        /// </summary>
+        public Vector2 maskSoftness
+        {
+            get { return m_maskSoftness; }
+            set { m_maskSoftness = value; havePropertiesChanged = true; isMaskUpdateRequired = true; }
+        }
+
+        /// <summary>
+        /// Allows to move / offset the mesh vertices by a set amount
+        /// </summary>
+        public Vector2 vertexOffset
+        {
+            get { return m_vertexOffset; }
+            set { m_vertexOffset = value; havePropertiesChanged = true; isMaskUpdateRequired = true; }
+        }
+        */
+
+
+        /// <summary>
+        /// Function to be used to force recomputing of character padding when Shader / Material properties have been changed via script.
+        /// </summary>
+        public override void UpdateMeshPadding()
+        {
+            m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, m_enableExtraPadding, m_isUsingBold);
+            m_isMaskingEnabled = ShaderUtilities.IsMaskingEnabled(m_sharedMaterial);
+            m_havePropertiesChanged = true;
+            checkPaddingRequired = false;
+
+            // Return if text object is not awake yet.
+            if (m_textInfo == null) return;
+
+            // Update sub text objects
+            for (int i = 1; i < m_textInfo.materialCount; i++)
+                m_subTextObjects[i].UpdateMeshPadding(m_enableExtraPadding, m_isUsingBold);
+        }
+
+
+        /// <summary>
+        /// Tweens the CanvasRenderer color associated with this Graphic.
+        /// </summary>
+        /// <param name="targetColor">Target color.</param>
+        /// <param name="duration">Tween duration.</param>
+        /// <param name="ignoreTimeScale">Should ignore Time.scale?</param>
+        /// <param name="useAlpha">Should also Tween the alpha channel?</param>
+        protected override void InternalCrossFadeColor(Color targetColor, float duration, bool ignoreTimeScale, bool useAlpha)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 1; i < materialCount; i++)
+            {
+                m_subTextObjects[i].CrossFadeColor(targetColor, duration, ignoreTimeScale, useAlpha);
+            }
+        }
+
+
+        /// <summary>
+        /// Tweens the alpha of the CanvasRenderer color associated with this Graphic.
+        /// </summary>
+        /// <param name="alpha">Target alpha.</param>
+        /// <param name="duration">Duration of the tween in seconds.</param>
+        /// <param name="ignoreTimeScale">Should ignore Time.scale?</param>
+        protected override void InternalCrossFadeAlpha(float alpha, float duration, bool ignoreTimeScale)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 1; i < materialCount; i++)
+            {
+                m_subTextObjects[i].CrossFadeAlpha(alpha, duration, ignoreTimeScale);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to force regeneration of the mesh before its normal process time. This is useful when changes to the text object properties need to be applied immediately.
+        /// </summary>
+        public override void ForceMeshUpdate()
+        {
+            //if (m_isEnabled == false) this.OnEnable();
+
+            m_havePropertiesChanged = true;
+            OnPreRenderCanvas();
+        }
+
+
+        /// <summary>
+        /// Function to force regeneration of the mesh before its normal process time. This is useful when changes to the text object properties need to be applied immediately.
+        /// </summary>
+        /// <param name="ignoreInactive">If set to true, the text object will be regenerated regardless of is active state.</param>
+        public override void ForceMeshUpdate(bool ignoreInactive)
+        {
+            m_havePropertiesChanged = true;
+            m_ignoreActiveState = true;
+            OnPreRenderCanvas();
+        }
+
+
+        /// <summary>
+        /// Function used to evaluate the length of a text string.
+        /// </summary>
+        /// <param name="text"></param>
+        /// <returns></returns>
+        public override TMP_TextInfo GetTextInfo(string text)
+        {
+            StringToCharArray(text, ref m_TextParsingBuffer);
+            SetArraySizes(m_TextParsingBuffer);
+
+            m_renderMode = TextRenderFlags.DontRender;
+
+            ComputeMarginSize();
+
+            // Need to make sure we have a valid reference to a Canvas.
+            if (m_canvas == null) m_canvas = this.canvas;
+
+            GenerateTextMesh();
+
+            m_renderMode = TextRenderFlags.Render;
+
+            return this.textInfo;
+        }
+
+        /// <summary>
+        /// Function to clear the geometry of the Primary and Sub Text objects.
+        /// </summary>
+        public override void ClearMesh()
+        {
+            m_canvasRenderer.SetMesh(null);
+
+            for (int i = 1; i < m_subTextObjects.Length && m_subTextObjects[i] != null; i++)
+                m_subTextObjects[i].canvasRenderer.SetMesh(null);
+
+            //if (m_linkedTextComponent != null)
+            //   m_linkedTextComponent.ClearMesh();
+        }
+
+
+        /// <summary>
+        /// Function to force the regeneration of the text object.
+        /// </summary>
+        /// <param name="flags"> Flags to control which portions of the geometry gets uploaded.</param>
+        //public override void ForceMeshUpdate(TMP_VertexDataUpdateFlags flags) { }
+
+
+        /// <summary>
+        /// Function to update the geometry of the main and sub text objects.
+        /// </summary>
+        /// <param name="mesh"></param>
+        /// <param name="index"></param>
+        public override void UpdateGeometry(Mesh mesh, int index)
+        {
+            mesh.RecalculateBounds();
+
+            if (index == 0)
+            {
+                m_canvasRenderer.SetMesh(mesh);
+            }
+            else
+            {
+                m_subTextObjects[index].canvasRenderer.SetMesh(mesh);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to upload the updated vertex data and renderer.
+        /// </summary>
+        public override void UpdateVertexData(TMP_VertexDataUpdateFlags flags)
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                Mesh mesh;
+
+                if (i == 0)
+                    mesh = m_mesh;
+                else
+                {
+                    // Clear unused vertices
+                    // TODO: Causes issues when sorting geometry as last vertex data attribute get wiped out.
+                    //m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    mesh = m_subTextObjects[i].mesh;
+                }
+
+                if ((flags & TMP_VertexDataUpdateFlags.Vertices) == TMP_VertexDataUpdateFlags.Vertices)
+                    mesh.vertices = m_textInfo.meshInfo[i].vertices;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Uv0) == TMP_VertexDataUpdateFlags.Uv0)
+                    mesh.uv = m_textInfo.meshInfo[i].uvs0;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Uv2) == TMP_VertexDataUpdateFlags.Uv2)
+                    mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+
+                //if ((flags & TMP_VertexDataUpdateFlags.Uv4) == TMP_VertexDataUpdateFlags.Uv4)
+                //    mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+
+                if ((flags & TMP_VertexDataUpdateFlags.Colors32) == TMP_VertexDataUpdateFlags.Colors32)
+                    mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                mesh.RecalculateBounds();
+
+                if (i == 0)
+                    m_canvasRenderer.SetMesh(mesh);
+                else
+                    m_subTextObjects[i].canvasRenderer.SetMesh(mesh);
+            }
+        }
+
+
+        /// <summary>
+        /// Function to upload the updated vertex data and renderer.
+        /// </summary>
+        public override void UpdateVertexData()
+        {
+            int materialCount = m_textInfo.materialCount;
+
+            for (int i = 0; i < materialCount; i++)
+            {
+                Mesh mesh;
+
+                if (i == 0)
+                    mesh = m_mesh;
+                else
+                {
+                    // Clear unused vertices
+                    m_textInfo.meshInfo[i].ClearUnusedVertices();
+
+                    mesh = m_subTextObjects[i].mesh;
+                }
+
+                //mesh.MarkDynamic();
+                mesh.vertices = m_textInfo.meshInfo[i].vertices;
+                mesh.uv = m_textInfo.meshInfo[i].uvs0;
+                mesh.uv2 = m_textInfo.meshInfo[i].uvs2;
+                //mesh.uv4 = m_textInfo.meshInfo[i].uvs4;
+                mesh.colors32 = m_textInfo.meshInfo[i].colors32;
+
+                mesh.RecalculateBounds();
+
+                if (i == 0)
+                    m_canvasRenderer.SetMesh(mesh);
+                else
+                    m_subTextObjects[i].canvasRenderer.SetMesh(mesh);
+            }
+        }
+
+
+        public void UpdateFontAsset()
+        {        
+            LoadFontAsset();
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3ad5c46869cf44de008f825f43e3de072d1d8259
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/TextMeshProUGUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f4688fdb7df04437aeb418b961361dc5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -100
+  icon: {fileID: 2800000, guid: 2fd6421f253b4ef1a19526541f9ffc0c, type: 3}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..fafc7ed5cffd138691df46df45ca0fa1621a88fc
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef
@@ -0,0 +1,7 @@
+{
+    "name": "Unity.TextMeshPro",
+    "references": [],
+    "optionalUnityReferences": [],
+    "includePlatforms": [],
+    "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..6cd3a478771adb35b6aac7e9033fb75bb21d7823
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Scripts/Runtime/Unity.TextMeshPro.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6055be8ebefd69e48b49212b09b47b2f
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests.meta
new file mode 100644
index 0000000000000000000000000000000000000000..3ff34706ed4b7c882848a466d30e623e26b5b228
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2ce4bbcc4722440890a03312706037fe
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor.meta
new file mode 100644
index 0000000000000000000000000000000000000000..81925d1a108bda143ee41127a255f176f8151534
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 28542eca5f1b4c64813acfbd512524b6
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a31a640a2821a98ace3f6f98719f7afaf7d81295
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs
@@ -0,0 +1,209 @@
+using UnityEngine;
+using UnityEditor;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+using System.IO;
+using System.Collections;
+
+
+namespace TMPro
+{
+    [Category("Text Parsing & Layout")]
+    class TMP_EditorTests
+    {
+        private TextMeshPro m_TextComponent;
+
+        // Characters: 22  Spaces: 4  Words: 5  Lines:
+        private const string m_TextBlock_00 = "A simple line of text.";
+
+        // Characters: 104  Spaces: 14  Words: 15  Lines:
+        private const string m_TextBlock_01 = "Unity 2017 introduces new features that help teams of artists and developers build experiences together.";
+
+        // Characters: 1500  Spaces: 228  Words: 241 
+        private const string m_TextBlock_02 = "The European languages are members of the same family. Their separate existence is a myth. For science, music, sport, etc, Europe uses the same vocabulary. The languages only differ in their grammar, their pronunciation and their most common words." +
+            "Everyone realizes why a new common language would be desirable: one could refuse to pay expensive translators.To achieve this, it would be necessary to have uniform grammar, pronunciation and more common words.If several languages coalesce, the grammar of the resulting language is more simple and regular than that of the individual languages." +
+            "The new common language will be more simple and regular than the existing European languages.It will be as simple as Occidental; in fact, it will be Occidental.To an English person, it will seem like simplified English, as a skeptical Cambridge friend of mine told me what Occidental is. The European languages are members of the same family." +
+            "Their separate existence is a myth. For science, music, sport, etc, Europe uses the same vocabulary.The languages only differ in their grammar, their pronunciation and their most common words.Everyone realizes why a new common language would be desirable: one could refuse to pay expensive translators.To achieve this, it would be necessary to" +
+            "have uniform grammar, pronunciation and more common words.If several languages coalesce, the grammar of the resulting language is more simple and regular than that of the individual languages.The new common language will be";
+
+        // Characters: 2500  Spaces: 343  Words: 370
+        private const string m_TextBlock_03 = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. " +
+            "Nullam dictum felis eu pede mollis pretium.Integer tincidunt.Cras dapibus.Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.Phasellus viverra nulla ut metus varius laoreet.Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.Curabitur ullamcorper ultricies nisi. " +
+            "Nam eget dui.Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum.Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.Maecenas nec odio et ante tincidunt tempus.Donec vitae sapien ut libero venenatis faucibus.Nullam quis ante.Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. " +
+            "Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus.Nullam accumsan lorem in dui.Cras ultricies mi eu turpis hendrerit fringilla.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. " +
+            "Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris.Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris.Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc.Nunc nonummy metus.Vestibulum volutpat pretium libero. Cras id dui.Aenean ut eros et nisl sagittis vestibulum.Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede.Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. " +
+            "Etiam imperdiet imperdiet orci. Nunc nec neque.Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.Maecenas malesuada. Praesent nan. The end of this of this long block of text.";
+
+        // Characters: 3423  Spaces: 453  Words: 500
+        private const string m_TextBlock_04 = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.Aenean commodo ligula eget dolor.Aenean massa.Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.Nulla consequat massa quis enim.Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.Nullam dictum felis eu pede mollis pretium.Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus." +
+            "Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.Phasellus viverra nulla ut metus varius laoreet.Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.Curabitur ullamcorper ultricies nisi. Nam eget dui.Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum.Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.Maecenas nec odio et ante tincidunt tempus.Donec vitae sapien ut libero venenatis faucibus.Nullam quis ante." +
+            "Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus.Nullam accumsan lorem in dui.Cras ultricies mi eu turpis hendrerit fringilla.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.Nam pretium turpis et arcu." +
+            "Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris.Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris.Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc.Nunc nonummy metus.Vestibulum volutpat pretium libero. Cras id dui.Aenean ut eros et nisl sagittis vestibulum.Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede.Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis.Etiam imperdiet imperdiet orci. Nunc nec neque." +
+            "Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.Maecenas malesuada. Praesent congue erat at massa.Sed cursus turpis vitae tortor.Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci.Phasellus consectetuer vestibulum elit.Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.Vestibulum fringilla pede sit amet augue." +
+            "In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis.Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus.Ut varius tincidunt libero.Phasellus dolor.Maecenas vestibulum mollis";
+
+        // 
+        private const string m_TextBlock_05 = "This block of text contains <b>bold</b> and <i>italicized</i> characters.";
+
+        private const string m_TextBlock_06 = "<align=center><style=H1><#ffffff><u>Multiple<#80f0ff> Alignment</color> per text object</u></color></style></align><line-height=2em>\n" +
+            "</line-height> The <<#ffffa0>align</color>> tag in TextMesh<#40a0ff>Pro</color> provides the ability to control the alignment of lines and paragraphs which is essential when working with text.\n" +
+            "<align=left> You may want some block of text to be<#80f0ff>left aligned</color> <<#ffffa0>align=<#80f0ff>left</color></color>> which is sort of the standard.</align>\n" +
+            "<style=Quote><#ffffa0>\"Using <#80f0ff>Center Alignment</color> <<#ffffa0>align=<#80f0ff>center</color></color>> for a title or displaying a quote is another good example of text alignment.\"</color></style>\n" +
+            "<align=right><#80f0ff>Right Alignment</color> <<#ffffa0>align=<#80f0ff>right</color></color>> can be useful to create contrast between lines and paragraphs of text.\n" +
+            "<align=justified><#80f0ff>Justified Alignment</color> <<#ffffa0>align=<#80f0ff>justified</color></color>> results in text that is flush on both the left and right margins. Used well, justified type can look clean and classy.\n" +
+            "<style=Quote><align=left><#ffffa0>\"Text formatting and alignment has a huge impact on how people will read and perceive your text.\"</color>\n" +
+            "<size=65%><align=right> -Stephan Bouchard</style>";
+
+        private readonly string[] testStrings = new string[] { m_TextBlock_00, m_TextBlock_01, m_TextBlock_02, m_TextBlock_03, m_TextBlock_04, m_TextBlock_05, m_TextBlock_06 };
+
+
+        [OneTimeSetUp]
+        public void Setup()
+        {
+            if (Directory.Exists(Path.GetFullPath("Assets/TextMesh Pro")) || Directory.Exists(Path.GetFullPath("Packages/com.unity.textmeshpro.tests/TextMesh Pro")))
+            {
+                GameObject textObject = new GameObject("Text Object");
+                m_TextComponent = textObject.AddComponent<TextMeshPro>();
+
+                m_TextComponent.fontSize = 18;
+            }
+            else
+            {
+                Debug.Log("Skipping over Editor tests as TMP Essential Resources are missing from the current test project.");
+                Assert.Ignore();
+
+                return;
+            }
+        }
+
+
+        [Test]
+        [TestCase("/Package Resources/TMP Essential Resources.unitypackage", "ce4ff17ca867d2b48b5c8a4181611901")]
+        [TestCase("/Package Resources/TMP Examples & Extras.unitypackage", "bc00e25696e4132499f56528d3fed2e3")]
+        [TestCase("/PackageConversionData.json", "05f5bfd584002f948982a1498890f9a9")]
+        public void InternalResourceCheck(string filePath, string guid)
+        {
+            string packageRelativePath = EditorUtilities.TMP_EditorUtility.packageRelativePath;
+            string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath;
+
+            Assert.AreEqual(AssetDatabase.AssetPathToGUID(packageRelativePath + filePath), guid);
+            Assert.IsTrue(System.IO.File.Exists(packageFullPath + filePath));
+
+        }
+
+
+        [Test]
+        [TestCase(4, 3423, 453, 500, 1)]
+        [TestCase(3, 2500, 343, 370, 1)]
+        [TestCase(2, 1500, 228, 241, 1)]
+        [TestCase(1, 104, 14, 15, 1)]
+        [TestCase(0, 22, 4, 5, 1)]
+        public void TextParsing_TextInfoTest_WordWrappingDisabled(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = false;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(50, 5);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        [Test]
+        [TestCase(4, 3423, 453, 500, 29)]
+        [TestCase(3, 2500, 343, 370, 21)]
+        [TestCase(2, 1500, 228, 241, 13)]
+        [TestCase(1, 104, 14, 15, 1)]
+        [TestCase(0, 22, 4, 5, 1)]
+        public void TextParsing_TextInfoTest_WordWrappingEnabled(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(100, 50);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        [Test]
+        [TestCase(4, 3423, 453, 500, 27)]
+        [TestCase(3, 2500, 343, 370, 20)]
+        [TestCase(2, 1500, 228, 241, 13)]
+        public void TextParsing_TextInfoTest_TopJustifiedAlignment(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopJustified;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(100, 50);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        [Test]
+        [TestCase(6, 768, 124, 126, 14)]
+        [TestCase(5, 59, 8, 9, 1)]
+        public void TextParsing_TextInfoTest_RichText(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(70, 35);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        // Add tests that check position of individual characters in a complex block of text.
+        // These test also use the data contained inside the TMP_TextInfo class.
+
+
+        //[OneTimeTearDown]
+        //public void Cleanup()
+        //{
+        //    // Remove TMP Essential Resources if they were imported in the project as a result of running tests.
+        //    if (TMPro_EventManager.temporaryResourcesImported == true)
+        //    {
+        //        if (Directory.Exists(Path.GetFullPath("Assets/TextMesh Pro")))
+        //        {
+        //            AssetDatabase.DeleteAsset("Assets/TextMesh Pro");
+        //            TMPro_EventManager.temporaryResourcesImported = false;
+        //        }
+        //    }
+        //}
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..99b09c856748e79736583250fd7d0395fcd76728
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/TMP_EditorTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 592f7288ed0df2c4b884e2cd9baac023
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..3f090505a14e2cf838079198e88851be8e1b1dc1
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef
@@ -0,0 +1,14 @@
+{
+    "name": "Unity.TextMeshPro.Editor.Tests",
+    "references": [
+        "Unity.TextMeshPro",
+        "Unity.TextMeshPro.Editor"
+    ],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ddfe991f56762feb1a881f97a278ec02449b8daa
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Editor/Unity.TextMeshPro.Editor.Tests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 656e461844099ae43a609ff6109b0877
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime.meta
new file mode 100644
index 0000000000000000000000000000000000000000..811f0a6c8d119a88f5c59eff2ae5e9ff750c4c4a
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f5600e6ae5a1464da659eca36bef9d64
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7b1834d2c9f72cd1b9171e955d37474d89afa988
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs
@@ -0,0 +1,207 @@
+using UnityEngine;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace TMPro
+{
+    [Category("Text Parsing & Layout")]
+    class TMP_RuntimeTests
+    {
+        private TextMeshPro m_TextComponent;
+
+        // Characters: 22  Spaces: 4  Words: 5  Lines:
+        private const string m_TextBlock_00 = "A simple line of text.";
+
+        // Characters: 104  Spaces: 14  Words: 15  Lines:
+        private const string m_TextBlock_01 = "Unity 2017 introduces new features that help teams of artists and developers build experiences together.";
+
+        // Characters: 1500  Spaces: 228  Words: 241 
+        private const string m_TextBlock_02 = "The European languages are members of the same family. Their separate existence is a myth. For science, music, sport, etc, Europe uses the same vocabulary. The languages only differ in their grammar, their pronunciation and their most common words." +
+            "Everyone realizes why a new common language would be desirable: one could refuse to pay expensive translators.To achieve this, it would be necessary to have uniform grammar, pronunciation and more common words.If several languages coalesce, the grammar of the resulting language is more simple and regular than that of the individual languages." +
+            "The new common language will be more simple and regular than the existing European languages.It will be as simple as Occidental; in fact, it will be Occidental.To an English person, it will seem like simplified English, as a skeptical Cambridge friend of mine told me what Occidental is. The European languages are members of the same family." +
+            "Their separate existence is a myth. For science, music, sport, etc, Europe uses the same vocabulary.The languages only differ in their grammar, their pronunciation and their most common words.Everyone realizes why a new common language would be desirable: one could refuse to pay expensive translators.To achieve this, it would be necessary to" +
+            "have uniform grammar, pronunciation and more common words.If several languages coalesce, the grammar of the resulting language is more simple and regular than that of the individual languages.The new common language will be";
+
+        // Characters: 2500  Spaces: 343  Words: 370
+        private const string m_TextBlock_03 = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. " +
+            "Nullam dictum felis eu pede mollis pretium.Integer tincidunt.Cras dapibus.Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.Phasellus viverra nulla ut metus varius laoreet.Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.Curabitur ullamcorper ultricies nisi. " +
+            "Nam eget dui.Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum.Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.Maecenas nec odio et ante tincidunt tempus.Donec vitae sapien ut libero venenatis faucibus.Nullam quis ante.Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. " +
+            "Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus.Nullam accumsan lorem in dui.Cras ultricies mi eu turpis hendrerit fringilla.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. " +
+            "Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris.Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris.Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc.Nunc nonummy metus.Vestibulum volutpat pretium libero. Cras id dui.Aenean ut eros et nisl sagittis vestibulum.Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede.Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. " +
+            "Etiam imperdiet imperdiet orci. Nunc nec neque.Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.Maecenas malesuada. Praesent nan. The end of this of this long block of text.";
+
+        // Characters: 3423  Spaces: 453  Words: 500
+        private const string m_TextBlock_04 = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.Aenean commodo ligula eget dolor.Aenean massa.Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem.Nulla consequat massa quis enim.Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.Nullam dictum felis eu pede mollis pretium.Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus." +
+            "Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim.Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus.Phasellus viverra nulla ut metus varius laoreet.Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.Curabitur ullamcorper ultricies nisi. Nam eget dui.Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum.Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem.Maecenas nec odio et ante tincidunt tempus.Donec vitae sapien ut libero venenatis faucibus.Nullam quis ante." +
+            "Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus.Nullam accumsan lorem in dui.Cras ultricies mi eu turpis hendrerit fringilla.Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.Nam pretium turpis et arcu." +
+            "Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris.Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris.Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc.Nunc nonummy metus.Vestibulum volutpat pretium libero. Cras id dui.Aenean ut eros et nisl sagittis vestibulum.Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede.Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis.Etiam imperdiet imperdiet orci. Nunc nec neque." +
+            "Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo.Maecenas malesuada. Praesent congue erat at massa.Sed cursus turpis vitae tortor.Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci.Phasellus consectetuer vestibulum elit.Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc.Vestibulum fringilla pede sit amet augue." +
+            "In turpis. Pellentesque posuere. Praesent turpis. Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis.Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus.Ut varius tincidunt libero.Phasellus dolor.Maecenas vestibulum mollis";
+
+        // 
+        private const string m_TextBlock_05 = "This block of text contains <b>bold</b> and <i>italicized</i> characters.";
+
+        private const string m_TextBlock_06 = "<align=center><style=H1><#ffffff><u>Multiple<#80f0ff> Alignment</color> per text object</u></color></style></align><line-height=2em>\n" +
+            "</line-height> The <<#ffffa0>align</color>> tag in TextMesh<#40a0ff>Pro</color> provides the ability to control the alignment of lines and paragraphs which is essential when working with text.\n" +
+            "<align=left> You may want some block of text to be<#80f0ff>left aligned</color> <<#ffffa0>align=<#80f0ff>left</color></color>> which is sort of the standard.</align>\n" +
+            "<style=Quote><#ffffa0>\"Using <#80f0ff>Center Alignment</color> <<#ffffa0>align=<#80f0ff>center</color></color>> for a title or displaying a quote is another good example of text alignment.\"</color></style>\n" +
+            "<align=right><#80f0ff>Right Alignment</color> <<#ffffa0>align=<#80f0ff>right</color></color>> can be useful to create contrast between lines and paragraphs of text.\n" +
+            "<align=justified><#80f0ff>Justified Alignment</color> <<#ffffa0>align=<#80f0ff>justified</color></color>> results in text that is flush on both the left and right margins. Used well, justified type can look clean and classy.\n" +
+            "<style=Quote><align=left><#ffffa0>\"Text formatting and alignment has a huge impact on how people will read and perceive your text.\"</color>\n" +
+            "<size=65%><align=right> -Stephan Bouchard</style>";
+
+        private readonly string[] testStrings = new string[] { m_TextBlock_00, m_TextBlock_01, m_TextBlock_02, m_TextBlock_03, m_TextBlock_04, m_TextBlock_05, m_TextBlock_06 };
+
+        [OneTimeSetUp]
+        public void Setup()
+        {
+            if (Directory.Exists(Path.GetFullPath("Assets/TextMesh Pro")) || Directory.Exists(Path.GetFullPath("Packages/com.unity.textmeshpro.tests/TextMesh Pro")))
+            {
+                GameObject textObject = new GameObject("Text Object");
+                m_TextComponent = textObject.AddComponent<TextMeshPro>();
+
+                m_TextComponent.fontSize = 18;
+            }
+            else
+            {
+                Debug.Log("Skipping over Editor tests as TMP Essential Resources are missing from the current test project.");
+                Assert.Ignore();
+
+                return;
+            }
+        }
+
+        public static IEnumerable<object[]> TestCases_Parsing_TextInfo_WordWrapDisabled()
+        {
+            yield return new object[] { 0, 22, 4, 5, 1 };
+            yield return new object[] { 1, 104, 14, 15, 1 };
+            yield return new object[] { 2, 1500, 228, 241, 1 };
+            yield return new object[] { 3, 2500, 343, 370, 1 };
+            yield return new object[] { 4, 3423, 453, 500, 1 };
+        }
+
+        [Test, TestCaseSource("TestCases_Parsing_TextInfo_WordWrapDisabled")]
+        public void Parsing_TextInfo_WordWrapDisabled(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = false;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(50, 5);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        public static IEnumerable<object[]> TestCases_Parsing_TextInfo_WordWrapEnabled()
+        {
+            yield return new object[] { 0, 22, 4, 5, 1 };
+            yield return new object[] { 1, 104, 14, 15, 1 };
+            yield return new object[] { 2, 1500, 228, 241, 13 };
+            yield return new object[] { 3, 2500, 343, 370, 21 };
+            yield return new object[] { 4, 3423, 453, 500, 29 };
+        }
+
+        [Test, TestCaseSource("TestCases_Parsing_TextInfo_WordWrapEnabled")]
+        public void Parsing_TextInfo_WordWrapEnabled(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(100, 50);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        public static IEnumerable<object[]> TestCases_Parsing_TextInfo_AlignmentTopJustified()
+        {
+            yield return new object[] { 2, 1500, 228, 241, 13 };
+            yield return new object[] { 3, 2500, 343, 370, 20 };
+            yield return new object[] { 4, 3423, 453, 500, 27 };
+        }
+
+        [Test, TestCaseSource("TestCases_Parsing_TextInfo_AlignmentTopJustified")]
+        public void Parsing_TextInfo_AlignmentTopJustified(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopJustified;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(100, 50);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        public static IEnumerable<object[]> TestCases_Parsing_TextInfo_RichText()
+        {
+            yield return new object[] { 5, 59, 8, 9, 1 };
+            yield return new object[] { 6, 768, 124, 126, 14 };
+        }
+
+        [Test, TestCaseSource("TestCases_Parsing_TextInfo_RichText")]
+        public void Parsing_TextInfo_RichText(int sourceTextIndex, int characterCount, int spaceCount, int wordCount, int lineCount)
+        {
+            m_TextComponent.text = testStrings[sourceTextIndex];
+            m_TextComponent.enableWordWrapping = true;
+            m_TextComponent.alignment = TextAlignmentOptions.TopLeft;
+
+            // Size the RectTransform
+            m_TextComponent.rectTransform.sizeDelta = new Vector2(70, 35);
+
+            // Force text generation to populate the TextInfo data structure.
+            m_TextComponent.ForceMeshUpdate();
+
+            Assert.AreEqual(m_TextComponent.textInfo.characterCount, characterCount);
+            Assert.AreEqual(m_TextComponent.textInfo.spaceCount, spaceCount);
+            Assert.AreEqual(m_TextComponent.textInfo.wordCount, wordCount);
+            Assert.AreEqual(m_TextComponent.textInfo.lineCount, lineCount);
+        }
+
+
+        //[OneTimeTearDown]
+        //public void Cleanup()
+        //{
+        //    // Remove TMP Essential Resources if they were imported in the project as a result of running tests.
+        //    if (TMPro_EventManager.temporaryResourcesImported == true)
+        //    {
+        //        string testResourceFolderPath = Path.GetFullPath("Assets/TextMesh Pro");
+
+        //        if (Directory.Exists(testResourceFolderPath))
+        //        {
+        //            Directory.Delete(testResourceFolderPath);
+        //            File.Delete(Path.GetFullPath("Assets/TextMesh Pro.meta"));
+        //        }
+
+        //        TMPro_EventManager.temporaryResourcesImported = false;
+        //    }
+        //}
+
+    }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..e004fed6722cae1c0fb3add293e4cbdcf52b9dd5
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/TMP_RuntimeTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9de24983a2c6cbe4f925c3e98a79b804
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef
new file mode 100644
index 0000000000000000000000000000000000000000..9fef4d66e00d60bea98a5e067b602a487c8eaac6
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef
@@ -0,0 +1,11 @@
+{
+    "name": "Unity.TextMeshPro.Tests",
+    "references": [
+        "Unity.TextMeshPro"
+    ],
+    "optionalUnityReferences": [
+        "TestAssemblies"
+    ],
+    "includePlatforms": [],
+    "excludePlatforms": []
+}
\ No newline at end of file
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef.meta
new file mode 100644
index 0000000000000000000000000000000000000000..9b4d7a1b1a53245f7e2446d7a6862de037ca7626
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/Tests/Runtime/Unity.TextMeshPro.Tests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bb05cab7d802aa5468f8f2f86840d984
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json b/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9f25072e7227d77d27d32047daf69c476f3ae073
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "com.unity.textmeshpro",
+  "displayName": "TextMesh Pro",
+  "version": "1.4.1",
+  "unity": "2018.3",
+  "description": "TextMesh Pro is the ultimate text solution for Unity. It's the perfect replacement for Unity's UI Text and the legacy Text Mesh.\n\nPowerful and easy to use, TextMesh Pro uses Advanced Text Rendering techniques along with a set of custom shaders; delivering substantial visual quality improvements while giving users incredible flexibility when it comes to text styling and texturing.\n\nTextMesh Pro provides Improved Control over text formatting and layout with features like character, word, line and paragraph spacing, kerning, justified text, Links, over 30 Rich Text Tags available, support for Multi Font & Sprites, Custom Styles and more.\n\nGreat performance. Since the geometry created by TextMesh Pro uses two triangles per character just like Unity's text components, this improved visual quality and flexibility comes at no additional performance cost.",
+  "keywords": [
+    "TextMeshPro",
+    "TextMesh Pro",
+    "Text",
+    "SDF"
+  ],
+  "category": "Text Rendering",
+  "dependencies": {},
+  "repository": {
+    "type": "git",
+    "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/text/com.unity.textmeshpro.git",
+    "revision": "42654af0"
+  }
+}
diff --git a/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json.meta b/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json.meta
new file mode 100644
index 0000000000000000000000000000000000000000..b1dc0d196b0c26ada5000d82d11f9766ae01364b
--- /dev/null
+++ b/Library/PackageCache/com.unity.textmeshpro@1.4.1/package.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 220e9325710f4235a43492dd1ee4980d
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/Assembly-CSharp.dll b/Library/PlayerDataCache/Win64/Data/Managed/Assembly-CSharp.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b7f5f568d4c928b8229585f7c0eb2d130ed83189
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/Assembly-CSharp.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/Mono.Security.dll b/Library/PlayerDataCache/Win64/Data/Managed/Mono.Security.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ae935dd3c03c575b814142df411cf87ef76c4e41
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/Mono.Security.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.ComponentModel.Composition.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.ComponentModel.Composition.dll
new file mode 100644
index 0000000000000000000000000000000000000000..fff314f52396203334396588e3727df08b62cb70
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.ComponentModel.Composition.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Configuration.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Configuration.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4154033a9ddeeb0688b8c45cd9ffe8bcd6f69ea2
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Configuration.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Core.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Core.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4b6267a0ad8839acc720b4b0cf189da2f7686c2a
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Core.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Data.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Data.dll
new file mode 100644
index 0000000000000000000000000000000000000000..0f2c0ec4627271ccc6a566d5dfd312f5820a1739
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Data.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Diagnostics.StackTrace.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Diagnostics.StackTrace.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f517a4f634a340d7229816ac5a1afa71dce5331e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Diagnostics.StackTrace.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Drawing.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Drawing.dll
new file mode 100644
index 0000000000000000000000000000000000000000..41b9a99b8f9004d3c0ddc43ee78d4289ec2e8ae7
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Drawing.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.EnterpriseServices.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.EnterpriseServices.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cee1f28515a040b4edd7cec13b99b79263f7ae4e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.EnterpriseServices.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Globalization.Extensions.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Globalization.Extensions.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c46ea47c2358fc1af5db8a8534eb65d7a6abc5d1
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Globalization.Extensions.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.FileSystem.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.FileSystem.dll
new file mode 100644
index 0000000000000000000000000000000000000000..662167be574862bf38c2d089bf7def37efbd60be
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.FileSystem.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e81fcbd69533c29af010ccd68a26d33bb8eca1b2
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.IO.Compression.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Net.Http.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Net.Http.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c4472a7d7ae4651b595f91f6cde29d1d4cb59d41
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Net.Http.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Numerics.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Numerics.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9149abba5c5aa66035f62a7446bacfcd6c1fed08
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Numerics.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.Xml.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.Xml.dll
new file mode 100644
index 0000000000000000000000000000000000000000..5fe9cdf00c5facd13d7463e6c6f836a47e571291
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.Xml.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ebb3769babf960d062643b9bf94dd66735d154f6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Runtime.Serialization.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.ServiceModel.Internals.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.ServiceModel.Internals.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d53cca1e5bbbc00e76ecde2d56c3e9f560b34fe7
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.ServiceModel.Internals.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Transactions.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Transactions.dll
new file mode 100644
index 0000000000000000000000000000000000000000..065d7577e2528beb57fed7392c51e17f5e670b29
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Transactions.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.Linq.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.Linq.dll
new file mode 100644
index 0000000000000000000000000000000000000000..aa4bc4844bef480326764b10aa51a9f709e5e154
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.Linq.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.XPath.XDocument.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.XPath.XDocument.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7049c114328f5ec51f72e23c3077cba464599009
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.XPath.XDocument.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e2964e3dffb3facb0c150cdef5575d468296a856
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.Xml.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/System.dll b/Library/PlayerDataCache/Win64/Data/Managed/System.dll
new file mode 100644
index 0000000000000000000000000000000000000000..03e554ccf88fa7fc66e790651e68276dc0a2d2b8
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/System.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.DataPrivacy.dll b/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.DataPrivacy.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9c0b919e185f08d6403e62e1c02c6b89d84f2146
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.DataPrivacy.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.StandardEvents.dll b/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.StandardEvents.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b8e7ea791e2a61daf289a0ba6ce50b93b10d0e47
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/Unity.Analytics.StandardEvents.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/Unity.TextMeshPro.dll b/Library/PlayerDataCache/Win64/Data/Managed/Unity.TextMeshPro.dll
new file mode 100644
index 0000000000000000000000000000000000000000..306e6790d6628aeb963e21476383a3f2f23c0d18
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/Unity.TextMeshPro.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AIModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9aae0a0c9f78d5dff253c7b26ac0fb0a67568e6d
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AIModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ARModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ARModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9963d2234bf5498d60a144a00004e4fe554eb2ae
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ARModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AccessibilityModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AccessibilityModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b928cba163ef699f3a6ac3869e8063dde88753be
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AccessibilityModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AnimationModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AnimationModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ca211014674700e91383ec57580475ec513e8da6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AnimationModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AssetBundleModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AssetBundleModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..bb9e09b7322265181fb799fa31ea78f5af4ed115
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AssetBundleModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AudioModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AudioModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..95dad103ae7f8e7d29f4f127918207221913fb70
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.AudioModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.BaselibModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.BaselibModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c947b97652ddf92b4e21cadcd6bd31a99bc14205
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.BaselibModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClothModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClothModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..12924742d2f8c79ae2d70f8b3093fdca228df6ee
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClothModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterInputModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterInputModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3449bd013e121bc65268faf984bd4798464504bd
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterInputModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterRendererModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterRendererModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a64ac454afde774f7e5efaa322874138853ed8f5
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ClusterRendererModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CoreModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CoreModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..30f02d78bdba3c6df7bd0e3c7e99b0e789f48b47
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CoreModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CrashReportingModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CrashReportingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2cf7ec549a03163fafe2f57b24a6c56c8e3e946a
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.CrashReportingModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.DirectorModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.DirectorModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6bf71388fb9ef961c2463238d708e5fbea9cf19f
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.DirectorModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.FileSystemHttpModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.FileSystemHttpModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ad9c9a01641b447298559b7f1b8f9e60bf388809
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.FileSystemHttpModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GameCenterModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GameCenterModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d4e71729b1676e62a74019b7e7ee258c51b881e4
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GameCenterModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GridModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GridModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d4ab8a804beb822ae188b8c0e662d4b3c3de601e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.GridModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.HotReloadModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.HotReloadModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..0420a425622a4f78ae8eb35cb08515879f76f89a
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.HotReloadModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.IMGUIModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.IMGUIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..469d9aaae501f812cbdf72e7ff0623e7515d8e78
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.IMGUIModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ImageConversionModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ImageConversionModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..54629f7aa0aef0089a3156393fa2296042efcd50
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ImageConversionModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.InputModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.InputModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b9bf3fdb2a684d4b510902cb14336f2e917eb2f9
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.InputModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.JSONSerializeModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.JSONSerializeModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dbe606bfa9858d546af44c1c93c9e6561fc69acb
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.JSONSerializeModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.LocalizationModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.LocalizationModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..85d22b61fa3f35a07c1789b217bf4de2c3f6dbc6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.LocalizationModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Networking.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Networking.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e8d08e90447e61869d26c2809ee947d64abbbe40
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Networking.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ParticleSystemModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ParticleSystemModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b80ba29d5a9fa51bd5ca7040ced913b730fa5c6e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ParticleSystemModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PerformanceReportingModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PerformanceReportingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..39e261f85519027fc8154084365f4530335325c1
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PerformanceReportingModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Physics2DModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Physics2DModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a4fc4b0b81c15478df8b2eba584f6220c2fb53a6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Physics2DModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PhysicsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PhysicsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..bc73d6bbe0dd33c9bd6bab7b1d3f2a1c168ef703
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.PhysicsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ProfilerModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ProfilerModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..faa7b88fb16fd9eea150c085232caf3afe477e7b
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ProfilerModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ScreenCaptureModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ScreenCaptureModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d19fb01d3d031ea96017d47f608c6012f066554c
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.ScreenCaptureModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SharedInternalsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SharedInternalsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..147b2ba19629d2e13f4fb80790e2a1b2cf0e97a7
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SharedInternalsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpatialTracking.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpatialTracking.dll
new file mode 100644
index 0000000000000000000000000000000000000000..434116d9b1c013fbe27f63fd45c4a96750977107
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpatialTracking.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteMaskModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteMaskModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..63fe37f3cbb348602377b9e613244c60266753f5
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteMaskModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteShapeModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteShapeModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..21388e7daeb1074614c781c782dd9f6bdaafe3bb
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SpriteShapeModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StreamingModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StreamingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7af1e6095d88f6f1dbc08d779f855e60a279132
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StreamingModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StyleSheetsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StyleSheetsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c782175752bd1c8bde83fa27d36b4cd3fd17b9c2
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.StyleSheetsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SubstanceModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SubstanceModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7879adee7fdfb46fa49f92369a5193ba455898a
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.SubstanceModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TLSModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TLSModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6ffbccd51a42570c1bd0db0dcc11ffd7071c19e3
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TLSModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b79ad007f7f44bd137d802bd59290864dee61d8e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainPhysicsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainPhysicsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f3c956d8f3144396ef9036d8badcf76f5a6104e1
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TerrainPhysicsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextCoreModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextCoreModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dbcd8e1a6d9470a5a8293a6a112e117d73903750
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextCoreModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextRenderingModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextRenderingModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cc1eb8fe7cf1b2905aa364f2a0cf98016ca26770
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TextRenderingModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TilemapModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TilemapModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a3712ec9f5c38d307265ad972daaea7b72341f36
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TilemapModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Timeline.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Timeline.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a555e786397b7193040e8183f30d27c05893fe3a
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.Timeline.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TimelineModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TimelineModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2c57729e96719348e191285a0645519081dfacc9
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.TimelineModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UI.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UI.dll
new file mode 100644
index 0000000000000000000000000000000000000000..dedad84745ae8ca5c9bbdc7bce33819ebf058e43
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UI.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIElementsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIElementsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ccef2a5c96e5a74016253816d143f933518a2fe4
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIElementsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d76fd3a47dd2cc945a8e203422344fbb9ee71cb4
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UIModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UNETModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UNETModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8282190b47a1e71b44bab1e22bd6ea6cf9bc0e43
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UNETModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UmbraModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UmbraModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..68ef7e8fabbb70b54d4cab53bc8cd631d73070bc
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UmbraModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityAnalyticsModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityAnalyticsModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7f34e4d180348cfe9f0b1b18091d1e347a90748c
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityAnalyticsModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityConnectModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityConnectModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..966460882d4f9fd9c4987bfc5eddc51059ef7126
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityConnectModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityTestProtocolModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityTestProtocolModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..734ab318fa38be5fc9d93ed9f5f4b21bb52ce2e1
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityTestProtocolModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8a44ab43c4f966a509c51c9884b1f05de9b846ca
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c7161cb5a5070df4b0fefe5409e20c3cbcd47caf
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..613a33793c5611bce593d9b073ebaec91edf4114
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d50377151e3d22472de76cad075874c84406cb64
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7bb4eeecabc806300d88898ed128d7ff955c3082
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VFXModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VFXModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..86df7facf8fee3a23d4b95efd46d9921f15e9b07
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VFXModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VRModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VRModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6d345f66f7ea27450ec60884e2f3ce179bbed295
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VRModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VehiclesModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VehiclesModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ba6f51fc2652b08bddb3d035fc89a3e475761f60
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VehiclesModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VideoModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VideoModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..488b50853786e08df238adf6bbe066bdeec89f41
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.VideoModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.WindModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.WindModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d9158d4878d9af085542a332de5392120f1d46fb
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.WindModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.XRModule.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.XRModule.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a10519696c0c8027adcceeab92b2e06ae6170b90
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.XRModule.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.dll b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.dll
new file mode 100644
index 0000000000000000000000000000000000000000..970093f919431b119f713a85d10ea85ad977e50b
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/UnityEngine.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/mscorlib.dll b/Library/PlayerDataCache/Win64/Data/Managed/mscorlib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e29f404b7dcb5bc6884240651ef5073d3ecc74e5
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/mscorlib.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Managed/netstandard.dll b/Library/PlayerDataCache/Win64/Data/Managed/netstandard.dll
new file mode 100644
index 0000000000000000000000000000000000000000..250cf817385cd5d2ea5cb8e72f00c5f5cab50ee6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Managed/netstandard.dll differ
diff --git a/Library/PlayerDataCache/Win64/Data/Resources/unity_builtin_extra b/Library/PlayerDataCache/Win64/Data/Resources/unity_builtin_extra
new file mode 100644
index 0000000000000000000000000000000000000000..1775866837af8b455626531a200a2bb9cd96b0fc
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/Resources/unity_builtin_extra differ
diff --git a/Library/PlayerDataCache/Win64/Data/boot.config b/Library/PlayerDataCache/Win64/Data/boot.config
new file mode 100644
index 0000000000000000000000000000000000000000..6af17a9a79dbfac7a9846d1fe79f90c9bae9613d
--- /dev/null
+++ b/Library/PlayerDataCache/Win64/Data/boot.config
@@ -0,0 +1,5 @@
+gfx-enable-native-gfx-jobs=
+wait-for-native-debugger=0
+scripting-runtime-version=latest
+vr-enabled=0
+hdr-display-enabled=0
diff --git a/Library/PlayerDataCache/Win64/Data/globalgamemanagers b/Library/PlayerDataCache/Win64/Data/globalgamemanagers
new file mode 100644
index 0000000000000000000000000000000000000000..f983ce476332234c3ba17bf4455ad28821183ba2
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/globalgamemanagers differ
diff --git a/Library/PlayerDataCache/Win64/Data/globalgamemanagers.assets b/Library/PlayerDataCache/Win64/Data/globalgamemanagers.assets
new file mode 100644
index 0000000000000000000000000000000000000000..2fa6bcaaebf43edc1fedd6431d669ee61eadeb63
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/globalgamemanagers.assets differ
diff --git a/Library/PlayerDataCache/Win64/Data/level0 b/Library/PlayerDataCache/Win64/Data/level0
new file mode 100644
index 0000000000000000000000000000000000000000..b720ab61bb3b36ac344df875c335147ddd0a6ac5
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/level0 differ
diff --git a/Library/PlayerDataCache/Win64/Data/level1 b/Library/PlayerDataCache/Win64/Data/level1
new file mode 100644
index 0000000000000000000000000000000000000000..0716f406a0212f6ded19eb980a538f621dd1e274
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/level1 differ
diff --git a/Library/PlayerDataCache/Win64/Data/level2 b/Library/PlayerDataCache/Win64/Data/level2
new file mode 100644
index 0000000000000000000000000000000000000000..e4dad68664c3d2112ca3f1dba0834e26e0901df9
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/level2 differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets0.assets b/Library/PlayerDataCache/Win64/Data/sharedassets0.assets
new file mode 100644
index 0000000000000000000000000000000000000000..68aaa3a5b51f10599c40b587bdfe3138242c9f9f
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets0.assets differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets0.assets.resS b/Library/PlayerDataCache/Win64/Data/sharedassets0.assets.resS
new file mode 100644
index 0000000000000000000000000000000000000000..a6dc4cab96e56d295a8acebc8b0961c90d5038dd
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets0.assets.resS differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets1.assets b/Library/PlayerDataCache/Win64/Data/sharedassets1.assets
new file mode 100644
index 0000000000000000000000000000000000000000..1d477d1765c25e03058a14659ac1acad15de0032
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets1.assets differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets1.assets.resS b/Library/PlayerDataCache/Win64/Data/sharedassets1.assets.resS
new file mode 100644
index 0000000000000000000000000000000000000000..569b4570d7158cff3d13defc0bd65f461b21f3b3
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets1.assets.resS differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets1.resource b/Library/PlayerDataCache/Win64/Data/sharedassets1.resource
new file mode 100644
index 0000000000000000000000000000000000000000..0e7bddecf738be4c54a2cb0b86e765da2a77c48e
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets1.resource differ
diff --git a/Library/PlayerDataCache/Win64/Data/sharedassets2.assets b/Library/PlayerDataCache/Win64/Data/sharedassets2.assets
new file mode 100644
index 0000000000000000000000000000000000000000..b339b2e5853ea1c75e175496b65c8e16bdbf10d6
Binary files /dev/null and b/Library/PlayerDataCache/Win64/Data/sharedassets2.assets differ
diff --git a/Library/PlayerDataCache/Win64/ScriptLayoutHashes.txt b/Library/PlayerDataCache/Win64/ScriptLayoutHashes.txt
new file mode 100644
index 0000000000000000000000000000000000000000..714c5fe9b9f7c3f6c013a93d6f5bb83e7ae6a5ef
--- /dev/null
+++ b/Library/PlayerDataCache/Win64/ScriptLayoutHashes.txt
@@ -0,0 +1,174 @@
+Win64
+PlayerPath?
+C:/Users/alamh/2D Shooter/Build/2D Shooter.exe
+SceneListBegin?
+Assets/Scenes/MainMenu.unity
+Assets/Scenes/SampleScene.unity
+Assets/Scenes/Scoreboard.unity
+SceneListEnd?
+3c08375166df118bd1801438fc36b92f Unity.TextMeshPro.dll:TMPro.TMP_SelectionCaret
+949e000bf794baf1888e2a9545a30047 Assembly-CSharp.dll:.PlayerMovement
+77c21079ace8d76ce6e941d3dabbfe6e Unity.TextMeshPro.dll:TMPro.TMP_Dropdown
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Timeline.dll:UnityEngine.Timeline.ActivationPlayableAsset
+06f0fef534ca4c1d6064fd77a26bf722 UnityEngine.Timeline.dll:UnityEngine.Timeline.ActivationTrack
+780e8f682b3221346c034a6712a0fd25 UnityEngine.Timeline.dll:UnityEngine.Timeline.AnimationPlayableAsset
+bfe92276ffffff8b72df49ef40f0c1ea UnityEngine.Timeline.dll:UnityEngine.Timeline.AnimationTrack
+1b3bcc00907f1f74e346e850f93a79c2 UnityEngine.Timeline.dll:UnityEngine.Timeline.AudioPlayableAsset
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.AudioTrack
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Timeline.dll:UnityEngine.Timeline.BasicPlayableBehaviour
+0fb27be807aa299702f28ad0bcad1f46 UnityEngine.Timeline.dll:UnityEngine.Timeline.ControlPlayableAsset
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.ControlTrack
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.GroupTrack
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.PlayableTrack
+201e3fde670b00545944bb3db215c80a UnityEngine.Timeline.dll:UnityEngine.Timeline.TimelineAsset
+7c22393e45271ad5167bda34514e53e8 Assembly-CSharp.dll:.EnemyMovement
+e7a73f5f78ba6445195ec23b74a1ce2d Unity.TextMeshPro.dll:TMPro.TMP_ScrollbarEventHandler
+32b765ee92b549f2ac1790da890c933d Assembly-CSharp.dll:.PlayerHealth
+71bb6a6b6c8f052f948db64c7dd3ca4f Assembly-CSharp.dll:.StartGameScript
+4ce15e99c635d2567873d27549d1f16f Assembly-CSharp.dll:.ScoreManager
+cf9f5cf2c3145a37ac07f00e50e460f9 UnityEngine.UI.dll:UnityEngine.UI.AspectRatioFitter
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.EventSystems.BaseInput
+507174d46dacbc5fe45e28485db5dd1e UnityEngine.UI.dll:UnityEngine.UI.Button
+4bc4346a71a8df53a6b106f68ef3a190 UnityEngine.UI.dll:UnityEngine.UI.CanvasScaler
+8aa3d6ccbcb54ee8db6c1229854adaaa UnityEngine.UI.dll:UnityEngine.UI.ContentSizeFitter
+f177f23b109d6ac24444ebc63c4c4960 UnityEngine.UI.dll:UnityEngine.UI.Dropdown
+cc4274b586df3c02688bac01b88bd16c UnityEngine.UI.dll:UnityEngine.EventSystems.EventSystem
+b47e22071eeae83b05ff8ad406dc0f23 UnityEngine.UI.dll:UnityEngine.EventSystems.EventTrigger
+ae83e830e7a90c0aff918c4c2e520825 UnityEngine.UI.dll:UnityEngine.UI.GraphicRaycaster
+7ab0e790220bdca831fdd886b339039d UnityEngine.UI.dll:UnityEngine.UI.GridLayoutGroup
+64e54c0cbb0177c5ea26f340efb9ff85 UnityEngine.UI.dll:UnityEngine.UI.HorizontalLayoutGroup
+e6baf3ef68d60bd0901dfb91c02bc1c3 UnityEngine.UI.dll:UnityEngine.UI.Image
+b886e3dc05811a7a8ace9275d00f0859 UnityEngine.UI.dll:UnityEngine.UI.InputField
+0dbc3be398b4869a5c8d0d8481ee402c UnityEngine.UI.dll:UnityEngine.UI.LayoutElement
+aba7b2852ef61d175dd9602e7723d5e5 UnityEngine.UI.dll:UnityEngine.UI.Mask
+caa533b001ae39b864ba8425019e2268 UnityEngine.UI.dll:UnityEngine.UI.Outline
+18c222bef9ae745ce69ddde9b74337ca UnityEngine.UI.dll:UnityEngine.EventSystems.Physics2DRaycaster
+18c222bef9ae745ce69ddde9b74337ca UnityEngine.UI.dll:UnityEngine.EventSystems.PhysicsRaycaster
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.UI.PositionAsUV1
+feb9a5a121d15fa3654d4e50a5233045 UnityEngine.UI.dll:UnityEngine.UI.RawImage
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.UI.RectMask2D
+8030207f57d12fb62fa9786aee3cc49f UnityEngine.UI.dll:UnityEngine.UI.Scrollbar
+d4020bafcd3ccbb5601a6e6c8ac78be0 UnityEngine.UI.dll:UnityEngine.UI.ScrollRect
+7dcd94d58f97daac9bf499d9dbae1af8 UnityEngine.UI.dll:UnityEngine.UI.Selectable
+caa533b001ae39b864ba8425019e2268 UnityEngine.UI.dll:UnityEngine.UI.Shadow
+aa165095bcf0f4d99594ea33df01c81b UnityEngine.UI.dll:UnityEngine.UI.Slider
+748dd2a2a28da4e618912da5ac45684b UnityEngine.UI.dll:UnityEngine.EventSystems.StandaloneInputModule
+72712369a7c681ad84fc255a5ec0b333 UnityEngine.UI.dll:UnityEngine.UI.Text
+06cb1bb98d1aeb23695b6b732ec291d7 UnityEngine.UI.dll:UnityEngine.UI.Toggle
+0fd6822f6177297bd0eb4d83cc7a9030 UnityEngine.UI.dll:UnityEngine.UI.ToggleGroup
+abf1930d8126d0b2e00e9449129a0190 UnityEngine.UI.dll:UnityEngine.EventSystems.TouchInputModule
+64e54c0cbb0177c5ea26f340efb9ff85 UnityEngine.UI.dll:UnityEngine.UI.VerticalLayoutGroup
+d3c76b14a25eebd3a3323dd43297919c Unity.TextMeshPro.dll:TMPro.TMP_InputField
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Advertisements.dll:UnityEngine.Advertisements.CallbackExecutor
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Advertisements.dll:UnityEngine.Advertisements.Editor.Placeholder
+cf9f5cf2c3145a37ac07f00e50e460f9 UnityEngine.UI.dll:UnityEngine.UI.AspectRatioFitter
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.EventSystems.BaseInput
+507174d46dacbc5fe45e28485db5dd1e UnityEngine.UI.dll:UnityEngine.UI.Button
+4bc4346a71a8df53a6b106f68ef3a190 UnityEngine.UI.dll:UnityEngine.UI.CanvasScaler
+8aa3d6ccbcb54ee8db6c1229854adaaa UnityEngine.UI.dll:UnityEngine.UI.ContentSizeFitter
+f177f23b109d6ac24444ebc63c4c4960 UnityEngine.UI.dll:UnityEngine.UI.Dropdown
+cc4274b586df3c02688bac01b88bd16c UnityEngine.UI.dll:UnityEngine.EventSystems.EventSystem
+b47e22071eeae83b05ff8ad406dc0f23 UnityEngine.UI.dll:UnityEngine.EventSystems.EventTrigger
+ae83e830e7a90c0aff918c4c2e520825 UnityEngine.UI.dll:UnityEngine.UI.GraphicRaycaster
+7ab0e790220bdca831fdd886b339039d UnityEngine.UI.dll:UnityEngine.UI.GridLayoutGroup
+64e54c0cbb0177c5ea26f340efb9ff85 UnityEngine.UI.dll:UnityEngine.UI.HorizontalLayoutGroup
+e6baf3ef68d60bd0901dfb91c02bc1c3 UnityEngine.UI.dll:UnityEngine.UI.Image
+b886e3dc05811a7a8ace9275d00f0859 UnityEngine.UI.dll:UnityEngine.UI.InputField
+0dbc3be398b4869a5c8d0d8481ee402c UnityEngine.UI.dll:UnityEngine.UI.LayoutElement
+aba7b2852ef61d175dd9602e7723d5e5 UnityEngine.UI.dll:UnityEngine.UI.Mask
+caa533b001ae39b864ba8425019e2268 UnityEngine.UI.dll:UnityEngine.UI.Outline
+18c222bef9ae745ce69ddde9b74337ca UnityEngine.UI.dll:UnityEngine.EventSystems.Physics2DRaycaster
+18c222bef9ae745ce69ddde9b74337ca UnityEngine.UI.dll:UnityEngine.EventSystems.PhysicsRaycaster
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.UI.PositionAsUV1
+feb9a5a121d15fa3654d4e50a5233045 UnityEngine.UI.dll:UnityEngine.UI.RawImage
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.UI.dll:UnityEngine.UI.RectMask2D
+8030207f57d12fb62fa9786aee3cc49f UnityEngine.UI.dll:UnityEngine.UI.Scrollbar
+d4020bafcd3ccbb5601a6e6c8ac78be0 UnityEngine.UI.dll:UnityEngine.UI.ScrollRect
+7dcd94d58f97daac9bf499d9dbae1af8 UnityEngine.UI.dll:UnityEngine.UI.Selectable
+caa533b001ae39b864ba8425019e2268 UnityEngine.UI.dll:UnityEngine.UI.Shadow
+aa165095bcf0f4d99594ea33df01c81b UnityEngine.UI.dll:UnityEngine.UI.Slider
+748dd2a2a28da4e618912da5ac45684b UnityEngine.UI.dll:UnityEngine.EventSystems.StandaloneInputModule
+72712369a7c681ad84fc255a5ec0b333 UnityEngine.UI.dll:UnityEngine.UI.Text
+06cb1bb98d1aeb23695b6b732ec291d7 UnityEngine.UI.dll:UnityEngine.UI.Toggle
+0fd6822f6177297bd0eb4d83cc7a9030 UnityEngine.UI.dll:UnityEngine.UI.ToggleGroup
+abf1930d8126d0b2e00e9449129a0190 UnityEngine.UI.dll:UnityEngine.EventSystems.TouchInputModule
+64e54c0cbb0177c5ea26f340efb9ff85 UnityEngine.UI.dll:UnityEngine.UI.VerticalLayoutGroup
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Timeline.dll:UnityEngine.Timeline.ActivationPlayableAsset
+06f0fef534ca4c1d6064fd77a26bf722 UnityEngine.Timeline.dll:UnityEngine.Timeline.ActivationTrack
+780e8f682b3221346c034a6712a0fd25 UnityEngine.Timeline.dll:UnityEngine.Timeline.AnimationPlayableAsset
+bfe92276ffffff8b72df49ef40f0c1ea UnityEngine.Timeline.dll:UnityEngine.Timeline.AnimationTrack
+1b3bcc00907f1f74e346e850f93a79c2 UnityEngine.Timeline.dll:UnityEngine.Timeline.AudioPlayableAsset
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.AudioTrack
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Timeline.dll:UnityEngine.Timeline.BasicPlayableBehaviour
+0fb27be807aa299702f28ad0bcad1f46 UnityEngine.Timeline.dll:UnityEngine.Timeline.ControlPlayableAsset
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.ControlTrack
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.GroupTrack
+e1bbf0ab858085e38fae6b12ebbdcd35 UnityEngine.Timeline.dll:UnityEngine.Timeline.PlayableTrack
+201e3fde670b00545944bb3db215c80a UnityEngine.Timeline.dll:UnityEngine.Timeline.TimelineAsset
+4e9333594897a1fb8b136ad2eae996c7 Unity.TextMeshPro.dll:TMPro.TMP_SubMeshUI
+e6ae40841db498b6e673877ac45ad208 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkAnimator
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Networking.dll:UnityEngine.Networking.NetworkBehaviour
+1dcb82730d983b77cec736c6ef19f814 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkDiscovery
+eafb77726b67b7571818a7210a3ce11e UnityEngine.Networking.dll:UnityEngine.Networking.NetworkIdentity
+265cf27ba050d55ff33a8acab4ded6c0 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkLobbyManager
+5bd9a19c7b5f76c563418e28f48a561b UnityEngine.Networking.dll:UnityEngine.Networking.NetworkLobbyPlayer
+21e871d89bbce53c038fc75ad1b7c7f3 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkManager
+e0ee4b3d4e27318934cc940a969d3d96 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkManagerHUD
+318c6c13a19c9fac98135ae14889de1b UnityEngine.Networking.dll:UnityEngine.Networking.NetworkMigrationManager
+3f0b469d844365c00a63de0437c9b29e UnityEngine.Networking.dll:UnityEngine.Networking.NetworkProximityChecker
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Networking.dll:UnityEngine.Networking.NetworkStartPosition
+ad9173d3a69d99153f38ed4b62226129 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransform
+9b895dcabbc1faf095c000c32d471fd0 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransformChild
+5887ef1bc706b22b773d253fd443ceef UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransformVisualizer
+d251bf88db6c95a6b1aa0b69298da9ef UnityEngine.SpatialTracking.dll:UnityEngine.SpatialTracking.TrackedPoseDriver
+71bb6a6b6c8f052f948db64c7dd3ca4f Assembly-CSharp.dll:.CustomSceneManager
+b8a5e8091ab0b8861d2add371082c5e0 Unity.TextMeshPro.dll:TMPro.TMP_SpriteAsset
+71bb6a6b6c8f052f948db64c7dd3ca4f Assembly-CSharp.dll:.ScoreboardButton
+b3ab2106268377ffe25dd18ac23dca28 Unity.TextMeshPro.dll:TMPro.TMP_Asset
+71bb6a6b6c8f052f948db64c7dd3ca4f Unity.TextMeshPro.dll:TMPro.TMP_SpriteAnimator
+22a048b476ffc0b726517b6e0d816dcd Assembly-CSharp.dll:.CameraFollow
+4fd8bf02e3089425d3502e26c44ba31a Unity.TextMeshPro.dll:TMPro.TextContainer
+512f7b6014d954ec11f4708d46178a95 Assembly-CSharp.dll:.EnemySpawnManager
+5d071595ff406ad7334c76ca43c5e893 Assembly-CSharp.dll:.EnemyAttack
+e6ae40841db498b6e673877ac45ad208 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkAnimator
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Networking.dll:UnityEngine.Networking.NetworkBehaviour
+1dcb82730d983b77cec736c6ef19f814 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkDiscovery
+eafb77726b67b7571818a7210a3ce11e UnityEngine.Networking.dll:UnityEngine.Networking.NetworkIdentity
+265cf27ba050d55ff33a8acab4ded6c0 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkLobbyManager
+5bd9a19c7b5f76c563418e28f48a561b UnityEngine.Networking.dll:UnityEngine.Networking.NetworkLobbyPlayer
+21e871d89bbce53c038fc75ad1b7c7f3 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkManager
+e0ee4b3d4e27318934cc940a969d3d96 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkManagerHUD
+318c6c13a19c9fac98135ae14889de1b UnityEngine.Networking.dll:UnityEngine.Networking.NetworkMigrationManager
+3f0b469d844365c00a63de0437c9b29e UnityEngine.Networking.dll:UnityEngine.Networking.NetworkProximityChecker
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.Networking.dll:UnityEngine.Networking.NetworkStartPosition
+ad9173d3a69d99153f38ed4b62226129 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransform
+9b895dcabbc1faf095c000c32d471fd0 UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransformChild
+5887ef1bc706b22b773d253fd443ceef UnityEngine.Networking.dll:UnityEngine.Networking.NetworkTransformVisualizer
+35a9693c388776aaf487636491a20f11 Unity.TextMeshPro.dll:TMPro.TMP_FontAsset
+e1300922cc039f41ab46a47f4cb05898 Unity.TextMeshPro.dll:TMPro.TMP_Settings
+88cc9df3c6fc697bfbeacd24c0d6f2d7 UnityEngine.TestRunner.dll:UnityEngine.TestTools.BeforeAfterTestCommandState
+88cc9df3c6fc697bfbeacd24c0d6f2d7 UnityEngine.TestRunner.dll:UnityEngine.TestTools.EnumerableSetUpTearDownCommandState
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.TestRunner.dll:UnityEngine.TestTools.TestRunner.Callbacks.PlayModeRunnerCallback
+7a25fcb81bf8eb2f157d591103c1dd7b UnityEngine.TestRunner.dll:UnityEngine.TestTools.TestRunner.PlaymodeTestsController
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.TestRunner.dll:UnityEngine.TestTools.TestRunner.Callbacks.RemoteTestResultSender
+71bb6a6b6c8f052f948db64c7dd3ca4f UnityEngine.TestRunner.dll:UnityEngine.TestTools.TestRunner.Callbacks.TestResultRendererCallback
+931f489e44eadf809e9310429c99dde5 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioListenerExtension
+fb6a1ea36b4f6ef5948d283d93760765 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioRoom
+5b0391b7e3d9ea9db6c0a8fbd0ca23f6 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioSoundfieldExtension
+5b0391b7e3d9ea9db6c0a8fbd0ca23f6 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioSourceExtension
+931f489e44eadf809e9310429c99dde5 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioListenerExtension
+fb6a1ea36b4f6ef5948d283d93760765 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioRoom
+5b0391b7e3d9ea9db6c0a8fbd0ca23f6 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioSoundfieldExtension
+5b0391b7e3d9ea9db6c0a8fbd0ca23f6 UnityEngine.GoogleAudioSpatializer.dll:UnityEngine.Experimental.Audio.Google.GvrAudioSourceExtension
+71bb6a6b6c8f052f948db64c7dd3ca4f Assembly-CSharp.dll:.JsonExample
+9365a5f1a60940c987fa86b0a2fceeeb Assembly-CSharp.dll:.EnemyHealth
+3b760e6526e13f7504f59e210145899a Unity.TextMeshPro.dll:TMPro.TextMeshProUGUI
+507174d46dacbc5fe45e28485db5dd1e Unity.Analytics.DataPrivacy.dll:UnityEngine.Analytics.DataPrivacyButton
+d251bf88db6c95a6b1aa0b69298da9ef UnityEngine.SpatialTracking.dll:UnityEngine.SpatialTracking.TrackedPoseDriver
+dc93c88df926b7a9b7ff661aab69035b Assembly-CSharp.dll:.PlayerAttack
+d791aa6007fa3640be1164ea75bb087d Unity.TextMeshPro.dll:TMPro.TMP_StyleSheet
+71bb6a6b6c8f052f948db64c7dd3ca4f Assembly-CSharp.dll:.BackButton
+df434544c9f7b33d1cc7e635b180d279 Unity.TextMeshPro.dll:TMPro.TextMeshPro
+3165968ba45c74472d279ba04455fccb Unity.TextMeshPro.dll:TMPro.TMP_ColorGradient
+8649814970b42d345b89944b862453cc Unity.TextMeshPro.dll:TMPro.TMP_SubMesh
+4ce15e99c635d2567873d27549d1f16f Assembly-CSharp.dll:.ScoreboardManager
diff --git a/Library/ProjectSettings.asset b/Library/ProjectSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..5d652244a8765193ebb7757aadd8569022c0e5a3
--- /dev/null
+++ b/Library/ProjectSettings.asset
@@ -0,0 +1,602 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!129 &1
+PlayerSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 18
+  productGUID: 8f32abdf76a257248974fe5018ff8281
+  AndroidProfiler: 0
+  AndroidFilterTouchesWhenObscured: 0
+  AndroidEnableSustainedPerformanceMode: 0
+  defaultScreenOrientation: 4
+  targetDevice: 2
+  useOnDemandResources: 0
+  accelerometerFrequency: 60
+  companyName: DefaultCompany
+  productName: 2D Shooter
+  defaultCursor: {fileID: 0}
+  cursorHotspot: {x: 0, y: 0}
+  m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
+  m_ShowUnitySplashScreen: 1
+  m_ShowUnitySplashLogo: 1
+  m_SplashScreenOverlayOpacity: 1
+  m_SplashScreenAnimation: 1
+  m_SplashScreenLogoStyle: 1
+  m_SplashScreenDrawMode: 0
+  m_SplashScreenBackgroundAnimationZoom: 1
+  m_SplashScreenLogoAnimationZoom: 1
+  m_SplashScreenBackgroundLandscapeAspect: 1
+  m_SplashScreenBackgroundPortraitAspect: 1
+  m_SplashScreenBackgroundLandscapeUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenBackgroundPortraitUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenLogos: []
+  m_VirtualRealitySplashScreen: {fileID: 0}
+  m_HolographicTrackingLossScreen: {fileID: 0}
+  defaultScreenWidth: 1024
+  defaultScreenHeight: 768
+  defaultScreenWidthWeb: 960
+  defaultScreenHeightWeb: 600
+  m_StereoRenderingPath: 0
+  m_ActiveColorSpace: 0
+  m_MTRendering: 1
+  m_StackTraceTypes: 010000000100000001000000010000000100000001000000
+  iosShowActivityIndicatorOnLoading: -1
+  androidShowActivityIndicatorOnLoading: -1
+  displayResolutionDialog: 1
+  iosUseCustomAppBackgroundBehavior: 0
+  iosAllowHTTPDownload: 1
+  allowedAutorotateToPortrait: 1
+  allowedAutorotateToPortraitUpsideDown: 1
+  allowedAutorotateToLandscapeRight: 1
+  allowedAutorotateToLandscapeLeft: 1
+  useOSAutorotation: 1
+  use32BitDisplayBuffer: 1
+  preserveFramebufferAlpha: 0
+  disableDepthAndStencilBuffers: 0
+  androidStartInFullscreen: 1
+  androidRenderOutsideSafeArea: 0
+  androidBlitType: 0
+  defaultIsNativeResolution: 1
+  macRetinaSupport: 1
+  runInBackground: 1
+  captureSingleScreen: 0
+  muteOtherAudioSources: 0
+  Prepare IOS For Recording: 0
+  Force IOS Speakers When Recording: 0
+  deferSystemGesturesMode: 0
+  hideHomeButton: 0
+  submitAnalytics: 1
+  usePlayerLog: 1
+  bakeCollisionMeshes: 0
+  forceSingleInstance: 0
+  resizableWindow: 0
+  useMacAppStoreValidation: 0
+  macAppStoreCategory: public.app-category.games
+  gpuSkinning: 0
+  graphicsJobs: 0
+  xboxPIXTextureCapture: 0
+  xboxEnableAvatar: 0
+  xboxEnableKinect: 0
+  xboxEnableKinectAutoTracking: 0
+  xboxEnableFitness: 0
+  visibleInBackground: 1
+  allowFullscreenSwitch: 1
+  graphicsJobMode: 0
+  fullscreenMode: 1
+  xboxSpeechDB: 0
+  xboxEnableHeadOrientation: 0
+  xboxEnableGuest: 0
+  xboxEnablePIXSampling: 0
+  metalFramebufferOnly: 0
+  xboxOneResolution: 0
+  xboxOneSResolution: 0
+  xboxOneXResolution: 3
+  xboxOneMonoLoggingLevel: 0
+  xboxOneLoggingLevel: 1
+  xboxOneDisableEsram: 0
+  xboxOneEnableTypeOptimization: 0
+  xboxOnePresentImmediateThreshold: 0
+  switchQueueCommandMemory: 0
+  switchQueueControlMemory: 16384
+  switchQueueComputeMemory: 262144
+  switchNVNShaderPoolsGranularity: 33554432
+  switchNVNDefaultPoolsGranularity: 16777216
+  switchNVNOtherPoolsGranularity: 16777216
+  vulkanEnableSetSRGBWrite: 0
+  m_SupportedAspectRatios:
+    4:3: 1
+    5:4: 1
+    16:10: 1
+    16:9: 1
+    Others: 1
+  bundleVersion: 0.1
+  preloadedAssets: []
+  metroInputSource: 0
+  wsaTransparentSwapchain: 0
+  m_HolographicPauseOnTrackingLoss: 1
+  xboxOneDisableKinectGpuReservation: 1
+  xboxOneEnable7thCore: 1
+  isWsaHolographicRemotingEnabled: 0
+  vrSettings:
+    cardboard:
+      depthFormat: 0
+      enableTransitionView: 0
+    daydream:
+      depthFormat: 0
+      useSustainedPerformanceMode: 0
+      enableVideoLayer: 0
+      useProtectedVideoMemory: 0
+      minimumSupportedHeadTracking: 0
+      maximumSupportedHeadTracking: 1
+    hololens:
+      depthFormat: 1
+      depthBufferSharingEnabled: 1
+    oculus:
+      sharedDepthBuffer: 1
+      dashSupport: 1
+      lowOverheadMode: 0
+      protectedContext: 0
+      v2Signing: 0
+    enable360StereoCapture: 0
+  protectGraphicsMemory: 0
+  enableFrameTimingStats: 0
+  useHDRDisplay: 0
+  m_ColorGamuts: 00000000
+  targetPixelDensity: 30
+  resolutionScalingMode: 0
+  androidSupportedAspectRatio: 1
+  androidMaxAspectRatio: 2.1
+  applicationIdentifier:
+    Standalone: com.Company.ProductName
+  buildNumber: {}
+  AndroidBundleVersionCode: 1
+  AndroidMinSdkVersion: 16
+  AndroidTargetSdkVersion: 0
+  AndroidPreferredInstallLocation: 1
+  aotOptions: 
+  stripEngineCode: 1
+  iPhoneStrippingLevel: 0
+  iPhoneScriptCallOptimization: 0
+  ForceInternetPermission: 0
+  ForceSDCardPermission: 0
+  CreateWallpaper: 0
+  APKExpansionFiles: 0
+  keepLoadedShadersAlive: 0
+  StripUnusedMeshComponents: 1
+  VertexChannelCompressionMask: 4054
+  iPhoneSdkVersion: 988
+  iOSTargetOSVersionString: 9.0
+  tvOSSdkVersion: 0
+  tvOSRequireExtendedGameController: 0
+  tvOSTargetOSVersionString: 9.0
+  uIPrerenderedIcon: 0
+  uIRequiresPersistentWiFi: 0
+  uIRequiresFullScreen: 1
+  uIStatusBarHidden: 1
+  uIExitOnSuspend: 0
+  uIStatusBarStyle: 0
+  iPhoneSplashScreen: {fileID: 0}
+  iPhoneHighResSplashScreen: {fileID: 0}
+  iPhoneTallHighResSplashScreen: {fileID: 0}
+  iPhone47inSplashScreen: {fileID: 0}
+  iPhone55inPortraitSplashScreen: {fileID: 0}
+  iPhone55inLandscapeSplashScreen: {fileID: 0}
+  iPhone58inPortraitSplashScreen: {fileID: 0}
+  iPhone58inLandscapeSplashScreen: {fileID: 0}
+  iPadPortraitSplashScreen: {fileID: 0}
+  iPadHighResPortraitSplashScreen: {fileID: 0}
+  iPadLandscapeSplashScreen: {fileID: 0}
+  iPadHighResLandscapeSplashScreen: {fileID: 0}
+  appleTVSplashScreen: {fileID: 0}
+  appleTVSplashScreen2x: {fileID: 0}
+  tvOSSmallIconLayers: []
+  tvOSSmallIconLayers2x: []
+  tvOSLargeIconLayers: []
+  tvOSLargeIconLayers2x: []
+  tvOSTopShelfImageLayers: []
+  tvOSTopShelfImageLayers2x: []
+  tvOSTopShelfImageWideLayers: []
+  tvOSTopShelfImageWideLayers2x: []
+  iOSLaunchScreenType: 0
+  iOSLaunchScreenPortrait: {fileID: 0}
+  iOSLaunchScreenLandscape: {fileID: 0}
+  iOSLaunchScreenBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreenFillPct: 100
+  iOSLaunchScreenSize: 100
+  iOSLaunchScreenCustomXibPath: 
+  iOSLaunchScreeniPadType: 0
+  iOSLaunchScreeniPadImage: {fileID: 0}
+  iOSLaunchScreeniPadBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreeniPadFillPct: 100
+  iOSLaunchScreeniPadSize: 100
+  iOSLaunchScreeniPadCustomXibPath: 
+  iOSUseLaunchScreenStoryboard: 0
+  iOSLaunchScreenCustomStoryboardPath: 
+  iOSDeviceRequirements: []
+  iOSURLSchemes: []
+  iOSBackgroundModes: 0
+  iOSMetalForceHardShadows: 0
+  metalEditorSupport: 1
+  metalAPIValidation: 1
+  iOSRenderExtraFrameOnPause: 0
+  appleDeveloperTeamID: 
+  iOSManualSigningProvisioningProfileID: 
+  tvOSManualSigningProvisioningProfileID: 
+  iOSManualSigningProvisioningProfileType: 0
+  tvOSManualSigningProvisioningProfileType: 0
+  appleEnableAutomaticSigning: 0
+  iOSRequireARKit: 0
+  iOSAutomaticallyDetectAndAddCapabilities: 1
+  appleEnableProMotion: 0
+  clonedFromGUID: 5f34be1353de5cf4398729fda238591b
+  templatePackageId: com.unity.template.2d@1.3.0
+  templateDefaultScene: Assets/Scenes/SampleScene.unity
+  AndroidTargetArchitectures: 5
+  AndroidSplashScreenScale: 0
+  androidSplashScreen: {fileID: 0}
+  AndroidKeystoreName: 
+  AndroidKeyaliasName: 
+  AndroidBuildApkPerCpuArchitecture: 0
+  AndroidTVCompatibility: 1
+  AndroidIsGame: 1
+  AndroidEnableTango: 0
+  androidEnableBanner: 1
+  androidUseLowAccuracyLocation: 0
+  m_AndroidBanners:
+  - width: 320
+    height: 180
+    banner: {fileID: 0}
+  androidGamepadSupportLevel: 0
+  resolutionDialogBanner: {fileID: 0}
+  m_BuildTargetIcons: []
+  m_BuildTargetPlatformIcons: []
+  m_BuildTargetBatching: []
+  m_BuildTargetGraphicsAPIs: []
+  m_BuildTargetVRSettings: []
+  m_BuildTargetEnableVuforiaSettings: []
+  openGLRequireES31: 0
+  openGLRequireES31AEP: 0
+  m_TemplateCustomTags: {}
+  mobileMTRendering:
+    Android: 1
+    iPhone: 1
+    tvOS: 1
+  m_BuildTargetGroupLightmapEncodingQuality: []
+  m_BuildTargetGroupLightmapSettings: []
+  playModeTestRunnerEnabled: 0
+  runPlayModeTestAsEditModeTest: 0
+  actionOnDotNetUnhandledException: 1
+  enableInternalProfiler: 0
+  logObjCUncaughtExceptions: 1
+  enableCrashReportAPI: 0
+  cameraUsageDescription: 
+  locationUsageDescription: 
+  microphoneUsageDescription: 
+  switchNetLibKey: 
+  switchSocketMemoryPoolSize: 6144
+  switchSocketAllocatorPoolSize: 128
+  switchSocketConcurrencyLimit: 14
+  switchScreenResolutionBehavior: 2
+  switchUseCPUProfiler: 0
+  switchApplicationID: 0x01004b9000490000
+  switchNSODependencies: 
+  switchTitleNames_0: 
+  switchTitleNames_1: 
+  switchTitleNames_2: 
+  switchTitleNames_3: 
+  switchTitleNames_4: 
+  switchTitleNames_5: 
+  switchTitleNames_6: 
+  switchTitleNames_7: 
+  switchTitleNames_8: 
+  switchTitleNames_9: 
+  switchTitleNames_10: 
+  switchTitleNames_11: 
+  switchTitleNames_12: 
+  switchTitleNames_13: 
+  switchTitleNames_14: 
+  switchPublisherNames_0: 
+  switchPublisherNames_1: 
+  switchPublisherNames_2: 
+  switchPublisherNames_3: 
+  switchPublisherNames_4: 
+  switchPublisherNames_5: 
+  switchPublisherNames_6: 
+  switchPublisherNames_7: 
+  switchPublisherNames_8: 
+  switchPublisherNames_9: 
+  switchPublisherNames_10: 
+  switchPublisherNames_11: 
+  switchPublisherNames_12: 
+  switchPublisherNames_13: 
+  switchPublisherNames_14: 
+  switchIcons_0: {fileID: 0}
+  switchIcons_1: {fileID: 0}
+  switchIcons_2: {fileID: 0}
+  switchIcons_3: {fileID: 0}
+  switchIcons_4: {fileID: 0}
+  switchIcons_5: {fileID: 0}
+  switchIcons_6: {fileID: 0}
+  switchIcons_7: {fileID: 0}
+  switchIcons_8: {fileID: 0}
+  switchIcons_9: {fileID: 0}
+  switchIcons_10: {fileID: 0}
+  switchIcons_11: {fileID: 0}
+  switchIcons_12: {fileID: 0}
+  switchIcons_13: {fileID: 0}
+  switchIcons_14: {fileID: 0}
+  switchSmallIcons_0: {fileID: 0}
+  switchSmallIcons_1: {fileID: 0}
+  switchSmallIcons_2: {fileID: 0}
+  switchSmallIcons_3: {fileID: 0}
+  switchSmallIcons_4: {fileID: 0}
+  switchSmallIcons_5: {fileID: 0}
+  switchSmallIcons_6: {fileID: 0}
+  switchSmallIcons_7: {fileID: 0}
+  switchSmallIcons_8: {fileID: 0}
+  switchSmallIcons_9: {fileID: 0}
+  switchSmallIcons_10: {fileID: 0}
+  switchSmallIcons_11: {fileID: 0}
+  switchSmallIcons_12: {fileID: 0}
+  switchSmallIcons_13: {fileID: 0}
+  switchSmallIcons_14: {fileID: 0}
+  switchManualHTML: 
+  switchAccessibleURLs: 
+  switchLegalInformation: 
+  switchMainThreadStackSize: 1048576
+  switchPresenceGroupId: 
+  switchLogoHandling: 0
+  switchReleaseVersion: 0
+  switchDisplayVersion: 1.0.0
+  switchStartupUserAccount: 0
+  switchTouchScreenUsage: 0
+  switchSupportedLanguagesMask: 0
+  switchLogoType: 0
+  switchApplicationErrorCodeCategory: 
+  switchUserAccountSaveDataSize: 0
+  switchUserAccountSaveDataJournalSize: 0
+  switchApplicationAttribute: 0
+  switchCardSpecSize: -1
+  switchCardSpecClock: -1
+  switchRatingsMask: 0
+  switchRatingsInt_0: 0
+  switchRatingsInt_1: 0
+  switchRatingsInt_2: 0
+  switchRatingsInt_3: 0
+  switchRatingsInt_4: 0
+  switchRatingsInt_5: 0
+  switchRatingsInt_6: 0
+  switchRatingsInt_7: 0
+  switchRatingsInt_8: 0
+  switchRatingsInt_9: 0
+  switchRatingsInt_10: 0
+  switchRatingsInt_11: 0
+  switchRatingsInt_12: 0
+  switchLocalCommunicationIds_0: 
+  switchLocalCommunicationIds_1: 
+  switchLocalCommunicationIds_2: 
+  switchLocalCommunicationIds_3: 
+  switchLocalCommunicationIds_4: 
+  switchLocalCommunicationIds_5: 
+  switchLocalCommunicationIds_6: 
+  switchLocalCommunicationIds_7: 
+  switchParentalControl: 0
+  switchAllowsScreenshot: 1
+  switchAllowsVideoCapturing: 1
+  switchAllowsRuntimeAddOnContentInstall: 0
+  switchDataLossConfirmation: 0
+  switchUserAccountLockEnabled: 0
+  switchSystemResourceMemory: 16777216
+  switchSupportedNpadStyles: 3
+  switchNativeFsCacheSize: 32
+  switchIsHoldTypeHorizontal: 0
+  switchSupportedNpadCount: 8
+  switchSocketConfigEnabled: 0
+  switchTcpInitialSendBufferSize: 32
+  switchTcpInitialReceiveBufferSize: 64
+  switchTcpAutoSendBufferSizeMax: 256
+  switchTcpAutoReceiveBufferSizeMax: 256
+  switchUdpSendBufferSize: 9
+  switchUdpReceiveBufferSize: 42
+  switchSocketBufferEfficiency: 4
+  switchSocketInitializeEnabled: 1
+  switchNetworkInterfaceManagerInitializeEnabled: 1
+  switchPlayerConnectionEnabled: 1
+  ps4NPAgeRating: 12
+  ps4NPTitleSecret: 
+  ps4NPTrophyPackPath: 
+  ps4ParentalLevel: 11
+  ps4ContentID: ED1633-NPXX51362_00-0000000000000000
+  ps4Category: 0
+  ps4MasterVersion: 01.00
+  ps4AppVersion: 01.00
+  ps4AppType: 0
+  ps4ParamSfxPath: 
+  ps4VideoOutPixelFormat: 0
+  ps4VideoOutInitialWidth: 1920
+  ps4VideoOutBaseModeInitialWidth: 1920
+  ps4VideoOutReprojectionRate: 60
+  ps4PronunciationXMLPath: 
+  ps4PronunciationSIGPath: 
+  ps4BackgroundImagePath: 
+  ps4StartupImagePath: 
+  ps4StartupImagesFolder: 
+  ps4IconImagesFolder: 
+  ps4SaveDataImagePath: 
+  ps4SdkOverride: 
+  ps4BGMPath: 
+  ps4ShareFilePath: 
+  ps4ShareOverlayImagePath: 
+  ps4PrivacyGuardImagePath: 
+  ps4NPtitleDatPath: 
+  ps4RemotePlayKeyAssignment: -1
+  ps4RemotePlayKeyMappingDir: 
+  ps4PlayTogetherPlayerCount: 0
+  ps4EnterButtonAssignment: 1
+  ps4ApplicationParam1: 0
+  ps4ApplicationParam2: 0
+  ps4ApplicationParam3: 0
+  ps4ApplicationParam4: 0
+  ps4DownloadDataSize: 0
+  ps4GarlicHeapSize: 2048
+  ps4ProGarlicHeapSize: 2560
+  ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
+  ps4pnSessions: 1
+  ps4pnPresence: 1
+  ps4pnFriends: 1
+  ps4pnGameCustomData: 1
+  playerPrefsSupport: 0
+  enableApplicationExit: 0
+  resetTempFolder: 1
+  restrictedAudioUsageRights: 0
+  ps4UseResolutionFallback: 0
+  ps4ReprojectionSupport: 0
+  ps4UseAudio3dBackend: 0
+  ps4SocialScreenEnabled: 0
+  ps4ScriptOptimizationLevel: 0
+  ps4Audio3dVirtualSpeakerCount: 14
+  ps4attribCpuUsage: 0
+  ps4PatchPkgPath: 
+  ps4PatchLatestPkgPath: 
+  ps4PatchChangeinfoPath: 
+  ps4PatchDayOne: 0
+  ps4attribUserManagement: 0
+  ps4attribMoveSupport: 0
+  ps4attrib3DSupport: 0
+  ps4attribShareSupport: 0
+  ps4attribExclusiveVR: 0
+  ps4disableAutoHideSplash: 0
+  ps4videoRecordingFeaturesUsed: 0
+  ps4contentSearchFeaturesUsed: 0
+  ps4attribEyeToEyeDistanceSettingVR: 0
+  ps4IncludedModules: []
+  monoEnv: 
+  splashScreenBackgroundSourceLandscape: {fileID: 0}
+  splashScreenBackgroundSourcePortrait: {fileID: 0}
+  spritePackerPolicy: 
+  webGLMemorySize: 256
+  webGLExceptionSupport: 1
+  webGLNameFilesAsHashes: 0
+  webGLDataCaching: 1
+  webGLDebugSymbols: 0
+  webGLEmscriptenArgs: 
+  webGLModulesDirectory: 
+  webGLTemplate: APPLICATION:Default
+  webGLAnalyzeBuildSize: 0
+  webGLUseEmbeddedResources: 0
+  webGLCompressionFormat: 1
+  webGLLinkerTarget: 1
+  webGLThreadsSupport: 0
+  scriptingDefineSymbols: {}
+  platformArchitecture: {}
+  scriptingBackend: {}
+  il2cppCompilerConfiguration: {}
+  managedStrippingLevel: {}
+  incrementalIl2cppBuild: {}
+  allowUnsafeCode: 0
+  additionalIl2CppArgs: 
+  scriptingRuntimeVersion: 1
+  apiCompatibilityLevelPerPlatform: {}
+  m_RenderingPath: 1
+  m_MobileRenderingPath: 1
+  metroPackageName: Template_2D
+  metroPackageVersion: 
+  metroCertificatePath: 
+  metroCertificatePassword: 
+  metroCertificateSubject: 
+  metroCertificateIssuer: 
+  metroCertificateNotAfter: 0000000000000000
+  metroApplicationDescription: Template_2D
+  wsaImages: {}
+  metroTileShortName: 
+  metroTileShowName: 0
+  metroMediumTileShowName: 0
+  metroLargeTileShowName: 0
+  metroWideTileShowName: 0
+  metroSupportStreamingInstall: 0
+  metroLastRequiredScene: 0
+  metroDefaultTileSize: 1
+  metroTileForegroundText: 2
+  metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
+  metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628,
+    a: 1}
+  metroSplashScreenUseBackgroundColor: 0
+  platformCapabilities: {}
+  metroTargetDeviceFamilies: {}
+  metroFTAName: 
+  metroFTAFileTypes: []
+  metroProtocolName: 
+  metroCompilationOverrides: 1
+  XboxOneProductId: 
+  XboxOneUpdateKey: 
+  XboxOneSandboxId: 
+  XboxOneContentId: 
+  XboxOneTitleId: 
+  XboxOneSCId: 
+  XboxOneGameOsOverridePath: 
+  XboxOnePackagingOverridePath: 
+  XboxOneAppManifestOverridePath: 
+  XboxOneVersion: 1.0.0.0
+  XboxOnePackageEncryption: 0
+  XboxOnePackageUpdateGranularity: 2
+  XboxOneDescription: 
+  XboxOneLanguage:
+  - enus
+  XboxOneCapability: []
+  XboxOneGameRating: {}
+  XboxOneIsContentPackage: 0
+  XboxOneEnableGPUVariability: 1
+  XboxOneSockets: {}
+  XboxOneSplashScreen: {fileID: 0}
+  XboxOneAllowedProductIds: []
+  XboxOnePersistentLocalStorageSize: 0
+  XboxOneXTitleMemory: 8
+  xboxOneScriptCompiler: 1
+  XboxOneOverrideIdentityName: 
+  vrEditorSettings:
+    daydream:
+      daydreamIconForeground: {fileID: 0}
+      daydreamIconBackground: {fileID: 0}
+  cloudServicesEnabled:
+    UNet: 1
+  luminIcon:
+    m_Name: 
+    m_ModelFolderPath: 
+    m_PortalFolderPath: 
+  luminCert:
+    m_CertPath: 
+    m_PrivateKeyPath: 
+  luminIsChannelApp: 0
+  luminVersion:
+    m_VersionCode: 1
+    m_VersionName: 
+  facebookSdkVersion: 7.9.4
+  facebookAppId: 
+  facebookCookies: 1
+  facebookLogging: 1
+  facebookStatus: 1
+  facebookXfbml: 0
+  facebookFrictionlessRequests: 1
+  apiCompatibilityLevel: 6
+  cloudProjectId: f2c43b2d-63da-41e3-ba97-c49f3dedf495
+  framebufferDepthMemorylessMode: 0
+  projectName: 2D Shooter
+  organizationId: alamhasabie165
+  cloudEnabled: 0
+  enableNativePlatformBackendsForNewInputSystem: 0
+  disableOldInputManagerSupport: 0
+  legacyClampBlendShapeWeights: 0
diff --git a/Library/ScriptAssemblies/Assembly-CSharp.dll b/Library/ScriptAssemblies/Assembly-CSharp.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4fa40f6d849d07ff0c8cc23ed1657594b174daa0
Binary files /dev/null and b/Library/ScriptAssemblies/Assembly-CSharp.dll differ
diff --git a/Library/ScriptAssemblies/Assembly-CSharp.pdb b/Library/ScriptAssemblies/Assembly-CSharp.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..103856b3c53c6d7d4ceec66812ce35f917bb2b6b
Binary files /dev/null and b/Library/ScriptAssemblies/Assembly-CSharp.pdb differ
diff --git a/Library/ScriptAssemblies/BuiltinAssemblies.stamp b/Library/ScriptAssemblies/BuiltinAssemblies.stamp
new file mode 100644
index 0000000000000000000000000000000000000000..20ab3e2feee8d8b34feb3bb117e807bf87c93413
--- /dev/null
+++ b/Library/ScriptAssemblies/BuiltinAssemblies.stamp
@@ -0,0 +1 @@
+08d7b6e4a0a23c00.08d7b6e4a1d36900
\ No newline at end of file
diff --git a/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.dll b/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3b25ba3e84eb709bfc4b44aded20bbfffc91179f
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.dll differ
diff --git a/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.pdb b/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..838cb4d031c2c8d1fd711391d045bf6934504cb2
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.Analytics.DataPrivacy.pdb differ
diff --git a/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll b/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9d67143d1a1726af30ce31d3041a52ee49f0e474
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.CollabProxy.Editor.dll differ
diff --git a/Library/ScriptAssemblies/Unity.CollabProxy.Editor.pdb b/Library/ScriptAssemblies/Unity.CollabProxy.Editor.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..e388b73a6c77464a8cc0fe7d60992f930e98f9d6
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.CollabProxy.Editor.pdb differ
diff --git a/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.dll b/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.dll
new file mode 100644
index 0000000000000000000000000000000000000000..117a17e3dcc0fa1eb33fe78570c3372fd97bba6e
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.dll differ
diff --git a/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.pdb b/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..0c02acc47d0e6303d87ce9e5485acdb0f2c14bfc
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.PackageManagerUI.Editor.pdb differ
diff --git a/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll b/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2b3680fff58fd756aa3fcab1434f3006148f0f0e
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.dll differ
diff --git a/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.pdb b/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..4f0b97eb0040d7b661f32be47591b9dd3d215598
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.TextMeshPro.Editor.pdb differ
diff --git a/Library/ScriptAssemblies/Unity.TextMeshPro.dll b/Library/ScriptAssemblies/Unity.TextMeshPro.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ea9ab66fafaa5088de6365daca85a53b2f5f0663
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.TextMeshPro.dll differ
diff --git a/Library/ScriptAssemblies/Unity.TextMeshPro.pdb b/Library/ScriptAssemblies/Unity.TextMeshPro.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..ec9bff9c518a6181913374d695de8592a95a953e
Binary files /dev/null and b/Library/ScriptAssemblies/Unity.TextMeshPro.pdb differ
diff --git a/Library/ScriptMapper b/Library/ScriptMapper
new file mode 100644
index 0000000000000000000000000000000000000000..ed3ff0cb187957b36c5bcb0f2ff4be929c98f785
Binary files /dev/null and b/Library/ScriptMapper differ
diff --git a/Library/ShaderCache.db b/Library/ShaderCache.db
new file mode 100644
index 0000000000000000000000000000000000000000..93f0bb989e3b90d0827199cf545b87b9f8594b7a
Binary files /dev/null and b/Library/ShaderCache.db differ
diff --git a/Library/ShaderCache/0/00af7136db1400e90187e47e16fb6f3b.bin b/Library/ShaderCache/0/00af7136db1400e90187e47e16fb6f3b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7e05114278feeb5e8cfb1e883e2596bc25dcf616
Binary files /dev/null and b/Library/ShaderCache/0/00af7136db1400e90187e47e16fb6f3b.bin differ
diff --git a/Library/ShaderCache/0/01818b9a13d735f18953cbddad050239.bin b/Library/ShaderCache/0/01818b9a13d735f18953cbddad050239.bin
new file mode 100644
index 0000000000000000000000000000000000000000..00581dcfb45e478d6330c6bb4c323ba9170f8a78
Binary files /dev/null and b/Library/ShaderCache/0/01818b9a13d735f18953cbddad050239.bin differ
diff --git a/Library/ShaderCache/0/01b859884657811d82100908a62dea5f.bin b/Library/ShaderCache/0/01b859884657811d82100908a62dea5f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b264eb90af4d2c48214ef9d06e5c0fe9cf5a9ed9
Binary files /dev/null and b/Library/ShaderCache/0/01b859884657811d82100908a62dea5f.bin differ
diff --git a/Library/ShaderCache/0/02a6409001301f9b2e6b0efe531dbddd.bin b/Library/ShaderCache/0/02a6409001301f9b2e6b0efe531dbddd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..52568f9af789af24cdad362ca614436406d446d5
Binary files /dev/null and b/Library/ShaderCache/0/02a6409001301f9b2e6b0efe531dbddd.bin differ
diff --git a/Library/ShaderCache/0/02ffb36645657334b65a152525a7763b.bin b/Library/ShaderCache/0/02ffb36645657334b65a152525a7763b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fef95ada798be78c31f56c0b1cc6e550759d6fb8
Binary files /dev/null and b/Library/ShaderCache/0/02ffb36645657334b65a152525a7763b.bin differ
diff --git a/Library/ShaderCache/0/03b553faf093e4c4abbecfedd7a0f0f5.bin b/Library/ShaderCache/0/03b553faf093e4c4abbecfedd7a0f0f5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3aaab667b96f1232c2225b7e98b7cb44d94956a8
Binary files /dev/null and b/Library/ShaderCache/0/03b553faf093e4c4abbecfedd7a0f0f5.bin differ
diff --git a/Library/ShaderCache/0/04865c0aac79f220e3ca7528a716efe1.bin b/Library/ShaderCache/0/04865c0aac79f220e3ca7528a716efe1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c8bb591661d379ce60776fa7677d15c0980df809
Binary files /dev/null and b/Library/ShaderCache/0/04865c0aac79f220e3ca7528a716efe1.bin differ
diff --git a/Library/ShaderCache/0/05f32547db581a367627d9675f218e78.bin b/Library/ShaderCache/0/05f32547db581a367627d9675f218e78.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c46c5d6c5746cd6fd1dd9142aa61b0c26ce3b217
Binary files /dev/null and b/Library/ShaderCache/0/05f32547db581a367627d9675f218e78.bin differ
diff --git a/Library/ShaderCache/0/06aeedcd686aa9da99dcf81419c36c0b.bin b/Library/ShaderCache/0/06aeedcd686aa9da99dcf81419c36c0b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0787e2ae4ffb043778c332829aae81fda1caaf2f
Binary files /dev/null and b/Library/ShaderCache/0/06aeedcd686aa9da99dcf81419c36c0b.bin differ
diff --git a/Library/ShaderCache/0/072895d9ab393fb50bc53e76007a0f35.bin b/Library/ShaderCache/0/072895d9ab393fb50bc53e76007a0f35.bin
new file mode 100644
index 0000000000000000000000000000000000000000..572f05c216c8cacfb3399642dc4dbe9ef293593e
Binary files /dev/null and b/Library/ShaderCache/0/072895d9ab393fb50bc53e76007a0f35.bin differ
diff --git a/Library/ShaderCache/0/0738ad147257dbf0287619aea0484605.bin b/Library/ShaderCache/0/0738ad147257dbf0287619aea0484605.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ebbc5ff16a86b1dbfeac3dbdc0992e7e2fb1bfdc
Binary files /dev/null and b/Library/ShaderCache/0/0738ad147257dbf0287619aea0484605.bin differ
diff --git a/Library/ShaderCache/0/081fbdd205d4d92a10f0923432d834cd.bin b/Library/ShaderCache/0/081fbdd205d4d92a10f0923432d834cd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..da476623cdabeb2c85e6bc8624b2101db6834525
Binary files /dev/null and b/Library/ShaderCache/0/081fbdd205d4d92a10f0923432d834cd.bin differ
diff --git a/Library/ShaderCache/0/089f880ef4dde2f4d9ed37106e2a8dd6.bin b/Library/ShaderCache/0/089f880ef4dde2f4d9ed37106e2a8dd6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..710659139999f760665c148d2db0a39048e9d569
Binary files /dev/null and b/Library/ShaderCache/0/089f880ef4dde2f4d9ed37106e2a8dd6.bin differ
diff --git a/Library/ShaderCache/0/08aefc2d82496dbf902798fe0b56059d.bin b/Library/ShaderCache/0/08aefc2d82496dbf902798fe0b56059d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..30c522010ca5c57aede24b69d9c045d5646c7685
Binary files /dev/null and b/Library/ShaderCache/0/08aefc2d82496dbf902798fe0b56059d.bin differ
diff --git a/Library/ShaderCache/0/09e2f76f0cce75a22327ec67bb5f8059.bin b/Library/ShaderCache/0/09e2f76f0cce75a22327ec67bb5f8059.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bff4933455e54227df014fc90c870e7616dfcdde
Binary files /dev/null and b/Library/ShaderCache/0/09e2f76f0cce75a22327ec67bb5f8059.bin differ
diff --git a/Library/ShaderCache/0/09fdc78627877d33ef5f9be36966a632.bin b/Library/ShaderCache/0/09fdc78627877d33ef5f9be36966a632.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7f623df9734c4c91e2b97d56f77b0ab61c85c5fb
Binary files /dev/null and b/Library/ShaderCache/0/09fdc78627877d33ef5f9be36966a632.bin differ
diff --git a/Library/ShaderCache/0/0ad696261c918a0000419914aa6958ac.bin b/Library/ShaderCache/0/0ad696261c918a0000419914aa6958ac.bin
new file mode 100644
index 0000000000000000000000000000000000000000..384c152894ddf1b8fc336f34688997b2c4b0769a
Binary files /dev/null and b/Library/ShaderCache/0/0ad696261c918a0000419914aa6958ac.bin differ
diff --git a/Library/ShaderCache/0/0c7b6f2ae97e08b0ae7a5a755c094667.bin b/Library/ShaderCache/0/0c7b6f2ae97e08b0ae7a5a755c094667.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a3052516f703586c0aaffca0f8ad6d74ba91eb43
Binary files /dev/null and b/Library/ShaderCache/0/0c7b6f2ae97e08b0ae7a5a755c094667.bin differ
diff --git a/Library/ShaderCache/0/0d7e4f7ba490d8e812dc43e194713d81.bin b/Library/ShaderCache/0/0d7e4f7ba490d8e812dc43e194713d81.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7adeb826e53ad2a07e7a4a21faf245b1d10946f9
Binary files /dev/null and b/Library/ShaderCache/0/0d7e4f7ba490d8e812dc43e194713d81.bin differ
diff --git a/Library/ShaderCache/0/0e11a41cb35b04d8c87db35e932848c4.bin b/Library/ShaderCache/0/0e11a41cb35b04d8c87db35e932848c4.bin
new file mode 100644
index 0000000000000000000000000000000000000000..887a32b5c5850cd626f6105dab311a49a337b62d
Binary files /dev/null and b/Library/ShaderCache/0/0e11a41cb35b04d8c87db35e932848c4.bin differ
diff --git a/Library/ShaderCache/0/0e31c7d1232eb5028953eba17f1e68f5.bin b/Library/ShaderCache/0/0e31c7d1232eb5028953eba17f1e68f5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1df4cb7afb61631dddd3229567daceea9db1e911
Binary files /dev/null and b/Library/ShaderCache/0/0e31c7d1232eb5028953eba17f1e68f5.bin differ
diff --git a/Library/ShaderCache/0/0e767b2344e5c18eee598b05b95f78a7.bin b/Library/ShaderCache/0/0e767b2344e5c18eee598b05b95f78a7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..866fa9329a94795fdc88b802284bad6c789d858c
Binary files /dev/null and b/Library/ShaderCache/0/0e767b2344e5c18eee598b05b95f78a7.bin differ
diff --git a/Library/ShaderCache/0/0e9eba81a69ccc4b9cc51022dcd86f9d.bin b/Library/ShaderCache/0/0e9eba81a69ccc4b9cc51022dcd86f9d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6e278f9c016d800e8dcdf9e154321301bb22eb6e
Binary files /dev/null and b/Library/ShaderCache/0/0e9eba81a69ccc4b9cc51022dcd86f9d.bin differ
diff --git a/Library/ShaderCache/1/10a4840adbb6b4ee86a8fbb37aa816d6.bin b/Library/ShaderCache/1/10a4840adbb6b4ee86a8fbb37aa816d6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f907283e8f60101efcf2075b706f69bff53804ee
Binary files /dev/null and b/Library/ShaderCache/1/10a4840adbb6b4ee86a8fbb37aa816d6.bin differ
diff --git a/Library/ShaderCache/1/11f064c952b2d7a44749eb5907c52247.bin b/Library/ShaderCache/1/11f064c952b2d7a44749eb5907c52247.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6d01b57941ebc8ab72030c04cab4cc0f74272f32
Binary files /dev/null and b/Library/ShaderCache/1/11f064c952b2d7a44749eb5907c52247.bin differ
diff --git a/Library/ShaderCache/1/123c5dd892d4a8fb1ce8c1852a4e362f.bin b/Library/ShaderCache/1/123c5dd892d4a8fb1ce8c1852a4e362f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2d7c3223f82bca9d040f4eb1580093aa74af48e2
Binary files /dev/null and b/Library/ShaderCache/1/123c5dd892d4a8fb1ce8c1852a4e362f.bin differ
diff --git a/Library/ShaderCache/1/13a462b800395c740a8bbcd8b557c63d.bin b/Library/ShaderCache/1/13a462b800395c740a8bbcd8b557c63d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..99e4467eec1fc06fb60ee10ec39d93e90a65fc4a
Binary files /dev/null and b/Library/ShaderCache/1/13a462b800395c740a8bbcd8b557c63d.bin differ
diff --git a/Library/ShaderCache/1/13cea76e794f9096f15d49fc49130bcf.bin b/Library/ShaderCache/1/13cea76e794f9096f15d49fc49130bcf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c9c402cb7ef9ff6da0f0490d8f6b1cdb0daef50f
Binary files /dev/null and b/Library/ShaderCache/1/13cea76e794f9096f15d49fc49130bcf.bin differ
diff --git a/Library/ShaderCache/1/13fc84ce60659c5b230729f26fb6273b.bin b/Library/ShaderCache/1/13fc84ce60659c5b230729f26fb6273b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a88a269897164fa1797d6f9d430bd0392ce30c20
Binary files /dev/null and b/Library/ShaderCache/1/13fc84ce60659c5b230729f26fb6273b.bin differ
diff --git a/Library/ShaderCache/1/142f34959370d1de8cd07d94868ccbac.bin b/Library/ShaderCache/1/142f34959370d1de8cd07d94868ccbac.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6dccfd4f21eac38361d2801526426e1dc03b9f0c
Binary files /dev/null and b/Library/ShaderCache/1/142f34959370d1de8cd07d94868ccbac.bin differ
diff --git a/Library/ShaderCache/1/144fbf2a000612ff53ec8e082d1f207d.bin b/Library/ShaderCache/1/144fbf2a000612ff53ec8e082d1f207d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..949a795c5178689c4178770feca870186d70b381
Binary files /dev/null and b/Library/ShaderCache/1/144fbf2a000612ff53ec8e082d1f207d.bin differ
diff --git a/Library/ShaderCache/1/14cd5f63495ff49c87072210396855bd.bin b/Library/ShaderCache/1/14cd5f63495ff49c87072210396855bd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..937cab867af958621d4a3210942182529478e46c
Binary files /dev/null and b/Library/ShaderCache/1/14cd5f63495ff49c87072210396855bd.bin differ
diff --git a/Library/ShaderCache/1/15197eb39bb6d0465f3278d31b5839de.bin b/Library/ShaderCache/1/15197eb39bb6d0465f3278d31b5839de.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f15e0fa466c34efdb156c1be0d33ef1d7ea7668e
Binary files /dev/null and b/Library/ShaderCache/1/15197eb39bb6d0465f3278d31b5839de.bin differ
diff --git a/Library/ShaderCache/1/1608384122120536b5578ca526eb71a8.bin b/Library/ShaderCache/1/1608384122120536b5578ca526eb71a8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..35407a8ee3b6bf8f0b2cde7d6094c7ed991d99f8
Binary files /dev/null and b/Library/ShaderCache/1/1608384122120536b5578ca526eb71a8.bin differ
diff --git a/Library/ShaderCache/1/1713744cbe1f2056b2fee35e755abb1c.bin b/Library/ShaderCache/1/1713744cbe1f2056b2fee35e755abb1c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7cbdd761e0f309d27bc69998b2b1bccd31e2eff6
Binary files /dev/null and b/Library/ShaderCache/1/1713744cbe1f2056b2fee35e755abb1c.bin differ
diff --git a/Library/ShaderCache/1/1727f4db8961f292676ea6e4c297dead.bin b/Library/ShaderCache/1/1727f4db8961f292676ea6e4c297dead.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/1/1727f4db8961f292676ea6e4c297dead.bin differ
diff --git a/Library/ShaderCache/1/1769309ed69185b873f4602c4a6eac04.bin b/Library/ShaderCache/1/1769309ed69185b873f4602c4a6eac04.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3f0194ef9e6144148595bebadc8ae214afa3dc23
Binary files /dev/null and b/Library/ShaderCache/1/1769309ed69185b873f4602c4a6eac04.bin differ
diff --git a/Library/ShaderCache/1/189d8a0a8d00e185c4c44c39ce88b654.bin b/Library/ShaderCache/1/189d8a0a8d00e185c4c44c39ce88b654.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b848de8d19d8d46b3e6a509eb8ec5ae666379807
Binary files /dev/null and b/Library/ShaderCache/1/189d8a0a8d00e185c4c44c39ce88b654.bin differ
diff --git a/Library/ShaderCache/1/1949cf62c8198d02651ba655190ae546.bin b/Library/ShaderCache/1/1949cf62c8198d02651ba655190ae546.bin
new file mode 100644
index 0000000000000000000000000000000000000000..07904dfc12983993f7df36905684c32406db8277
Binary files /dev/null and b/Library/ShaderCache/1/1949cf62c8198d02651ba655190ae546.bin differ
diff --git a/Library/ShaderCache/1/19565e5fff896a3d3cf9038f2b574504.bin b/Library/ShaderCache/1/19565e5fff896a3d3cf9038f2b574504.bin
new file mode 100644
index 0000000000000000000000000000000000000000..32f45cd92a1be703f26255c3bafe531dcb666e62
Binary files /dev/null and b/Library/ShaderCache/1/19565e5fff896a3d3cf9038f2b574504.bin differ
diff --git a/Library/ShaderCache/1/1956ede2d9e2e6251a442c9c4ee6493d.bin b/Library/ShaderCache/1/1956ede2d9e2e6251a442c9c4ee6493d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d088632dc4c82ce3bec1e8ebd65d5e1d14e6c8bf
Binary files /dev/null and b/Library/ShaderCache/1/1956ede2d9e2e6251a442c9c4ee6493d.bin differ
diff --git a/Library/ShaderCache/1/19be8776eca8685f5470ebd048a92ff8.bin b/Library/ShaderCache/1/19be8776eca8685f5470ebd048a92ff8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ccac1dda05cd6210c9af2e495ea6854a4007b83b
Binary files /dev/null and b/Library/ShaderCache/1/19be8776eca8685f5470ebd048a92ff8.bin differ
diff --git a/Library/ShaderCache/1/1a9e0e66112390376657bf356bb03bca.bin b/Library/ShaderCache/1/1a9e0e66112390376657bf356bb03bca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..276301456a49d37ea48828717f63a724bbb38d04
Binary files /dev/null and b/Library/ShaderCache/1/1a9e0e66112390376657bf356bb03bca.bin differ
diff --git a/Library/ShaderCache/1/1b23aac6dc4802e977f81cb14d95bb08.bin b/Library/ShaderCache/1/1b23aac6dc4802e977f81cb14d95bb08.bin
new file mode 100644
index 0000000000000000000000000000000000000000..29c066b3aabdb5c4af382f6fbd8afee412d19eac
Binary files /dev/null and b/Library/ShaderCache/1/1b23aac6dc4802e977f81cb14d95bb08.bin differ
diff --git a/Library/ShaderCache/1/1bd2f4ee546c65e3a65e40c3d9c1b8ed.bin b/Library/ShaderCache/1/1bd2f4ee546c65e3a65e40c3d9c1b8ed.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8bf55bfaffb3b56b3a6394a00f8667cd2742a55a
Binary files /dev/null and b/Library/ShaderCache/1/1bd2f4ee546c65e3a65e40c3d9c1b8ed.bin differ
diff --git a/Library/ShaderCache/1/1c8f70d4dc68b42efbbea170c3e83766.bin b/Library/ShaderCache/1/1c8f70d4dc68b42efbbea170c3e83766.bin
new file mode 100644
index 0000000000000000000000000000000000000000..084ab713b28e1dcd58987c10513c8d22cca1976a
Binary files /dev/null and b/Library/ShaderCache/1/1c8f70d4dc68b42efbbea170c3e83766.bin differ
diff --git a/Library/ShaderCache/1/1db0852213c1fa30f77c0f9b327d6fc1.bin b/Library/ShaderCache/1/1db0852213c1fa30f77c0f9b327d6fc1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..262a52165844bde7e700ade2fa324afcb7c43509
Binary files /dev/null and b/Library/ShaderCache/1/1db0852213c1fa30f77c0f9b327d6fc1.bin differ
diff --git a/Library/ShaderCache/1/1dbf6c59cdd0a5057ec4555546944280.bin b/Library/ShaderCache/1/1dbf6c59cdd0a5057ec4555546944280.bin
new file mode 100644
index 0000000000000000000000000000000000000000..28ff16cec79ca9a5f52a5f7f6fea1e5eb965328e
Binary files /dev/null and b/Library/ShaderCache/1/1dbf6c59cdd0a5057ec4555546944280.bin differ
diff --git a/Library/ShaderCache/1/1dfa4dac42d0390c36ab1709d396a616.bin b/Library/ShaderCache/1/1dfa4dac42d0390c36ab1709d396a616.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b7ffe379803fb3274c21b13e9b74c8711151de94
Binary files /dev/null and b/Library/ShaderCache/1/1dfa4dac42d0390c36ab1709d396a616.bin differ
diff --git a/Library/ShaderCache/1/1e2c886913d0d1fb53ade7cea762873d.bin b/Library/ShaderCache/1/1e2c886913d0d1fb53ade7cea762873d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d77af78709c3a2c9a507cae40333f85b294aff13
Binary files /dev/null and b/Library/ShaderCache/1/1e2c886913d0d1fb53ade7cea762873d.bin differ
diff --git a/Library/ShaderCache/1/1e4f6210c2373dfe2db73284be43cdbf.bin b/Library/ShaderCache/1/1e4f6210c2373dfe2db73284be43cdbf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f588043b2c74a834886c67288d182f6d4c708622
Binary files /dev/null and b/Library/ShaderCache/1/1e4f6210c2373dfe2db73284be43cdbf.bin differ
diff --git a/Library/ShaderCache/1/1e941d1d61444f452b1669535baa48e9.bin b/Library/ShaderCache/1/1e941d1d61444f452b1669535baa48e9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..98e091eef77f8da2e69a5cdb5a04fb414c495c8e
Binary files /dev/null and b/Library/ShaderCache/1/1e941d1d61444f452b1669535baa48e9.bin differ
diff --git a/Library/ShaderCache/1/1ed32f819c535008fa752071e07898d6.bin b/Library/ShaderCache/1/1ed32f819c535008fa752071e07898d6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7bd6ad6a9bca7231c96fa08f51bc450841146abc
Binary files /dev/null and b/Library/ShaderCache/1/1ed32f819c535008fa752071e07898d6.bin differ
diff --git a/Library/ShaderCache/1/1eedfde32db4c356b781da893a215cf1.bin b/Library/ShaderCache/1/1eedfde32db4c356b781da893a215cf1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..693d6f3888c3ee3b01123ba486c4df187d8096a8
Binary files /dev/null and b/Library/ShaderCache/1/1eedfde32db4c356b781da893a215cf1.bin differ
diff --git a/Library/ShaderCache/1/1f61302ae1327c04ba4d0dcc8107df45.bin b/Library/ShaderCache/1/1f61302ae1327c04ba4d0dcc8107df45.bin
new file mode 100644
index 0000000000000000000000000000000000000000..568f591e4fdd9667d433fc2b6eafc96fe1cc74ab
Binary files /dev/null and b/Library/ShaderCache/1/1f61302ae1327c04ba4d0dcc8107df45.bin differ
diff --git a/Library/ShaderCache/1/1f740f7f4ed5a2a0f7ab44ee27e12c8e.bin b/Library/ShaderCache/1/1f740f7f4ed5a2a0f7ab44ee27e12c8e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b812cc115d0df2c2ddfd2314f90443021a8b670d
Binary files /dev/null and b/Library/ShaderCache/1/1f740f7f4ed5a2a0f7ab44ee27e12c8e.bin differ
diff --git a/Library/ShaderCache/1/1fb138fa056bc723725cb3cb6f36066a.bin b/Library/ShaderCache/1/1fb138fa056bc723725cb3cb6f36066a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cc072f98bebcf3b80bcc2e011cdd43a6e8514ef5
Binary files /dev/null and b/Library/ShaderCache/1/1fb138fa056bc723725cb3cb6f36066a.bin differ
diff --git a/Library/ShaderCache/2/200520cf408ab9cb205874406c862df9.bin b/Library/ShaderCache/2/200520cf408ab9cb205874406c862df9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cb8208e4a72c67e935065dd46f15cf3f92562b47
Binary files /dev/null and b/Library/ShaderCache/2/200520cf408ab9cb205874406c862df9.bin differ
diff --git a/Library/ShaderCache/2/208018487373361ee32d94ed3617e50b.bin b/Library/ShaderCache/2/208018487373361ee32d94ed3617e50b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7908fba5b8ca005e7e3e92dcecc9b445eda303d2
Binary files /dev/null and b/Library/ShaderCache/2/208018487373361ee32d94ed3617e50b.bin differ
diff --git a/Library/ShaderCache/2/21969b5707984d6260842e2d503c19b3.bin b/Library/ShaderCache/2/21969b5707984d6260842e2d503c19b3.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ab1d67f153478c09f1c30794cfe7aa4ed648b9aa
Binary files /dev/null and b/Library/ShaderCache/2/21969b5707984d6260842e2d503c19b3.bin differ
diff --git a/Library/ShaderCache/2/21cab4babd02a7e4fde754f6b8dcfbac.bin b/Library/ShaderCache/2/21cab4babd02a7e4fde754f6b8dcfbac.bin
new file mode 100644
index 0000000000000000000000000000000000000000..787377739b55c7f52892f5684e2f27d2d9e7ce6f
Binary files /dev/null and b/Library/ShaderCache/2/21cab4babd02a7e4fde754f6b8dcfbac.bin differ
diff --git a/Library/ShaderCache/2/222373a8df956a6ebde751ff9a47810b.bin b/Library/ShaderCache/2/222373a8df956a6ebde751ff9a47810b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b917a82fcb25c298b7e365b0c6a4452bbd7101dc
Binary files /dev/null and b/Library/ShaderCache/2/222373a8df956a6ebde751ff9a47810b.bin differ
diff --git a/Library/ShaderCache/2/227e85c57d33de98e6fd05bac170ab4d.bin b/Library/ShaderCache/2/227e85c57d33de98e6fd05bac170ab4d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..87e73ffd2b28c5eadec8da3483deff7f3379ac95
Binary files /dev/null and b/Library/ShaderCache/2/227e85c57d33de98e6fd05bac170ab4d.bin differ
diff --git a/Library/ShaderCache/2/23805148b872414de001523de764c9a0.bin b/Library/ShaderCache/2/23805148b872414de001523de764c9a0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..80a558ef3f2a8678f3d31767ec4f45e61a348a4e
Binary files /dev/null and b/Library/ShaderCache/2/23805148b872414de001523de764c9a0.bin differ
diff --git a/Library/ShaderCache/2/23b5cf334e5f8b0b2078e707c3ccf93c.bin b/Library/ShaderCache/2/23b5cf334e5f8b0b2078e707c3ccf93c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9360b892afd2f1a6b9dd4323bd773ccf2d3e08db
Binary files /dev/null and b/Library/ShaderCache/2/23b5cf334e5f8b0b2078e707c3ccf93c.bin differ
diff --git a/Library/ShaderCache/2/2494eb957e51b88e0fdfb35fa1c62c6e.bin b/Library/ShaderCache/2/2494eb957e51b88e0fdfb35fa1c62c6e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ab1d67f153478c09f1c30794cfe7aa4ed648b9aa
Binary files /dev/null and b/Library/ShaderCache/2/2494eb957e51b88e0fdfb35fa1c62c6e.bin differ
diff --git a/Library/ShaderCache/2/265379d36585cf2a2e380f889d41e729.bin b/Library/ShaderCache/2/265379d36585cf2a2e380f889d41e729.bin
new file mode 100644
index 0000000000000000000000000000000000000000..89f98f18c2beb93b602efa8d23d36a74134330db
Binary files /dev/null and b/Library/ShaderCache/2/265379d36585cf2a2e380f889d41e729.bin differ
diff --git a/Library/ShaderCache/2/26f34cb74217f877745db6dc35962747.bin b/Library/ShaderCache/2/26f34cb74217f877745db6dc35962747.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0a10c59087d119af78ccf908156536d8e8cfe768
Binary files /dev/null and b/Library/ShaderCache/2/26f34cb74217f877745db6dc35962747.bin differ
diff --git a/Library/ShaderCache/2/27228423d086fcdf0ba2d3e7b11a727d.bin b/Library/ShaderCache/2/27228423d086fcdf0ba2d3e7b11a727d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9222b40bf5ac59dc8a2c58f778d638caa9ba6d9d
Binary files /dev/null and b/Library/ShaderCache/2/27228423d086fcdf0ba2d3e7b11a727d.bin differ
diff --git a/Library/ShaderCache/2/27580dd540b42fa521dd67c562aa9259.bin b/Library/ShaderCache/2/27580dd540b42fa521dd67c562aa9259.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bd61282dd1c1c5d4f924ae6cc7b693273458aaa1
Binary files /dev/null and b/Library/ShaderCache/2/27580dd540b42fa521dd67c562aa9259.bin differ
diff --git a/Library/ShaderCache/2/27a7854d9ba53fdc47719c64b611cc1f.bin b/Library/ShaderCache/2/27a7854d9ba53fdc47719c64b611cc1f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5200b4551eec6650a17d813ab3fd6f505d613758
Binary files /dev/null and b/Library/ShaderCache/2/27a7854d9ba53fdc47719c64b611cc1f.bin differ
diff --git a/Library/ShaderCache/2/29c979fc91c43e11cef948d568278fef.bin b/Library/ShaderCache/2/29c979fc91c43e11cef948d568278fef.bin
new file mode 100644
index 0000000000000000000000000000000000000000..16addc00e288f898d0228e0d279d0cf4007f38d5
Binary files /dev/null and b/Library/ShaderCache/2/29c979fc91c43e11cef948d568278fef.bin differ
diff --git a/Library/ShaderCache/2/2ad53590801d1e69925e98b26e6b7062.bin b/Library/ShaderCache/2/2ad53590801d1e69925e98b26e6b7062.bin
new file mode 100644
index 0000000000000000000000000000000000000000..71ccd60f81e6bd4850fe349999dc4a003c077f60
Binary files /dev/null and b/Library/ShaderCache/2/2ad53590801d1e69925e98b26e6b7062.bin differ
diff --git a/Library/ShaderCache/2/2b6ed29be8510ffe42c7ab7b20e49851.bin b/Library/ShaderCache/2/2b6ed29be8510ffe42c7ab7b20e49851.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a9d2b3aa3123a2cfb9e60113742304b9705bfa88
Binary files /dev/null and b/Library/ShaderCache/2/2b6ed29be8510ffe42c7ab7b20e49851.bin differ
diff --git a/Library/ShaderCache/2/2ca5b2b86c94c31189530e13722cc935.bin b/Library/ShaderCache/2/2ca5b2b86c94c31189530e13722cc935.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b4acee36935c587329b9533ca2f71a6625c20e0b
Binary files /dev/null and b/Library/ShaderCache/2/2ca5b2b86c94c31189530e13722cc935.bin differ
diff --git a/Library/ShaderCache/2/2cd28f936186c2928d925eddc6ee04ab.bin b/Library/ShaderCache/2/2cd28f936186c2928d925eddc6ee04ab.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6c2c8cb8f4b7ce032cc3df84485bbf41d9ddeb62
Binary files /dev/null and b/Library/ShaderCache/2/2cd28f936186c2928d925eddc6ee04ab.bin differ
diff --git a/Library/ShaderCache/2/2db2c034d9aeaccbbbda63af9cb097f2.bin b/Library/ShaderCache/2/2db2c034d9aeaccbbbda63af9cb097f2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f29f24f7062c0d8f9f06c302359af159d72d6165
Binary files /dev/null and b/Library/ShaderCache/2/2db2c034d9aeaccbbbda63af9cb097f2.bin differ
diff --git a/Library/ShaderCache/2/2ebf6d2e5906f9a5105a53b41b1fea3d.bin b/Library/ShaderCache/2/2ebf6d2e5906f9a5105a53b41b1fea3d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..36114496aaa3b0246fe45b18a85521ee1f2d1a59
Binary files /dev/null and b/Library/ShaderCache/2/2ebf6d2e5906f9a5105a53b41b1fea3d.bin differ
diff --git a/Library/ShaderCache/2/2f5959e60d73afacf121e2cd56e93c3d.bin b/Library/ShaderCache/2/2f5959e60d73afacf121e2cd56e93c3d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bc9188689dabaaad6f70aa0db4e1e4eec74828d1
Binary files /dev/null and b/Library/ShaderCache/2/2f5959e60d73afacf121e2cd56e93c3d.bin differ
diff --git a/Library/ShaderCache/2/2f74176af0870f42fea3b39fd633a160.bin b/Library/ShaderCache/2/2f74176af0870f42fea3b39fd633a160.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4912fcc21815eef1a3feb7b5e9430ede5e332e32
Binary files /dev/null and b/Library/ShaderCache/2/2f74176af0870f42fea3b39fd633a160.bin differ
diff --git a/Library/ShaderCache/3/3089b08ba96f27b2aaf3815c50c269cd.bin b/Library/ShaderCache/3/3089b08ba96f27b2aaf3815c50c269cd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b9bd49dc053fa943c529839ba80b68de5a46a227
Binary files /dev/null and b/Library/ShaderCache/3/3089b08ba96f27b2aaf3815c50c269cd.bin differ
diff --git a/Library/ShaderCache/3/30f0c7da461967a6594a0e18815a8e56.bin b/Library/ShaderCache/3/30f0c7da461967a6594a0e18815a8e56.bin
new file mode 100644
index 0000000000000000000000000000000000000000..efe2b64f6641c2c527115d554917dd221f0f197b
Binary files /dev/null and b/Library/ShaderCache/3/30f0c7da461967a6594a0e18815a8e56.bin differ
diff --git a/Library/ShaderCache/3/31449d5ff30ba5526b7e5df4bc4ea359.bin b/Library/ShaderCache/3/31449d5ff30ba5526b7e5df4bc4ea359.bin
new file mode 100644
index 0000000000000000000000000000000000000000..12aeef1bd937d676e2812d38f36d892dcdd9537c
Binary files /dev/null and b/Library/ShaderCache/3/31449d5ff30ba5526b7e5df4bc4ea359.bin differ
diff --git a/Library/ShaderCache/3/31a743377179417fb9ce8b84b5fb1721.bin b/Library/ShaderCache/3/31a743377179417fb9ce8b84b5fb1721.bin
new file mode 100644
index 0000000000000000000000000000000000000000..57654e94dffa63e2f5baea8509bcb6fceabd7805
Binary files /dev/null and b/Library/ShaderCache/3/31a743377179417fb9ce8b84b5fb1721.bin differ
diff --git a/Library/ShaderCache/3/320c708d2e6794d49a072335d7e090e8.bin b/Library/ShaderCache/3/320c708d2e6794d49a072335d7e090e8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ed33638d48fdaff18bd140a7fc9f2b6139ccf7ff
Binary files /dev/null and b/Library/ShaderCache/3/320c708d2e6794d49a072335d7e090e8.bin differ
diff --git a/Library/ShaderCache/3/321bd1c12544e83ca6634011b2a6ca62.bin b/Library/ShaderCache/3/321bd1c12544e83ca6634011b2a6ca62.bin
new file mode 100644
index 0000000000000000000000000000000000000000..73a2b4785724f14fa34178124141548c33486832
Binary files /dev/null and b/Library/ShaderCache/3/321bd1c12544e83ca6634011b2a6ca62.bin differ
diff --git a/Library/ShaderCache/3/34714c147294907cc0572de78465cfe2.bin b/Library/ShaderCache/3/34714c147294907cc0572de78465cfe2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0b6100c8020cf74b974b9596cfb949cf3d226ac5
Binary files /dev/null and b/Library/ShaderCache/3/34714c147294907cc0572de78465cfe2.bin differ
diff --git a/Library/ShaderCache/3/3472d98cbfefd8dc1416ca4c7f27806a.bin b/Library/ShaderCache/3/3472d98cbfefd8dc1416ca4c7f27806a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..81c74478fba47388433e24d52139976ce4e260bb
Binary files /dev/null and b/Library/ShaderCache/3/3472d98cbfefd8dc1416ca4c7f27806a.bin differ
diff --git a/Library/ShaderCache/3/35448171d9b929eb3a679215d5aa3df1.bin b/Library/ShaderCache/3/35448171d9b929eb3a679215d5aa3df1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..333b1188b098821fdbf1389430a623b6cfe95ae7
Binary files /dev/null and b/Library/ShaderCache/3/35448171d9b929eb3a679215d5aa3df1.bin differ
diff --git a/Library/ShaderCache/3/357952e8bca5962e485991345229ca44.bin b/Library/ShaderCache/3/357952e8bca5962e485991345229ca44.bin
new file mode 100644
index 0000000000000000000000000000000000000000..223878317d49fa1d1deaefecefd88e105b4d8faf
Binary files /dev/null and b/Library/ShaderCache/3/357952e8bca5962e485991345229ca44.bin differ
diff --git a/Library/ShaderCache/3/35a3363e4a3690d3c0bc64452e20ea36.bin b/Library/ShaderCache/3/35a3363e4a3690d3c0bc64452e20ea36.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3c7b9102a69b900fa67503f52a543beb1bac83cb
Binary files /dev/null and b/Library/ShaderCache/3/35a3363e4a3690d3c0bc64452e20ea36.bin differ
diff --git a/Library/ShaderCache/3/35d0d727edd490a4a973edb8f62aad93.bin b/Library/ShaderCache/3/35d0d727edd490a4a973edb8f62aad93.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d684cfb8676265947191fc90bc3b5fdbf5eac9b8
Binary files /dev/null and b/Library/ShaderCache/3/35d0d727edd490a4a973edb8f62aad93.bin differ
diff --git a/Library/ShaderCache/3/35d7faac388dbaa915aabe0fd8bd0bb2.bin b/Library/ShaderCache/3/35d7faac388dbaa915aabe0fd8bd0bb2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3f1c0333ba66ee529773c89c9cd7fce47d303b78
Binary files /dev/null and b/Library/ShaderCache/3/35d7faac388dbaa915aabe0fd8bd0bb2.bin differ
diff --git a/Library/ShaderCache/3/360dd2e00ad5865f384c7b6370744788.bin b/Library/ShaderCache/3/360dd2e00ad5865f384c7b6370744788.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c67d51121b8815c5d70917d41a71ce267e77badb
Binary files /dev/null and b/Library/ShaderCache/3/360dd2e00ad5865f384c7b6370744788.bin differ
diff --git a/Library/ShaderCache/3/36ccf94c5db0d914526f21b4e0c92846.bin b/Library/ShaderCache/3/36ccf94c5db0d914526f21b4e0c92846.bin
new file mode 100644
index 0000000000000000000000000000000000000000..60aa40057f34bd8e0ef2f8eedd3686f56d1cee54
Binary files /dev/null and b/Library/ShaderCache/3/36ccf94c5db0d914526f21b4e0c92846.bin differ
diff --git a/Library/ShaderCache/3/36e865e7daf37f6b4b11e527c6dfd91e.bin b/Library/ShaderCache/3/36e865e7daf37f6b4b11e527c6dfd91e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1c0f1dd5a5482bf82d7f347d831272f80f8f5503
Binary files /dev/null and b/Library/ShaderCache/3/36e865e7daf37f6b4b11e527c6dfd91e.bin differ
diff --git a/Library/ShaderCache/3/3731a0dc1be483b5e8342e86291db360.bin b/Library/ShaderCache/3/3731a0dc1be483b5e8342e86291db360.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b8e515fe369e401d5aeed279d7acf6bd5e49c45f
Binary files /dev/null and b/Library/ShaderCache/3/3731a0dc1be483b5e8342e86291db360.bin differ
diff --git a/Library/ShaderCache/3/373cdd50d114fe522430d2527ed641ed.bin b/Library/ShaderCache/3/373cdd50d114fe522430d2527ed641ed.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ee2472bc4521507fbc79cbb3479fc438d6bf658a
Binary files /dev/null and b/Library/ShaderCache/3/373cdd50d114fe522430d2527ed641ed.bin differ
diff --git a/Library/ShaderCache/3/3b95ebb6b5986474c727f72aa6cef4b0.bin b/Library/ShaderCache/3/3b95ebb6b5986474c727f72aa6cef4b0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..65445329777f02d4f133a24f6699a80a2e521b85
Binary files /dev/null and b/Library/ShaderCache/3/3b95ebb6b5986474c727f72aa6cef4b0.bin differ
diff --git a/Library/ShaderCache/3/3bc4077de8d6c3f6dd475e0af7bf10d7.bin b/Library/ShaderCache/3/3bc4077de8d6c3f6dd475e0af7bf10d7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5c467a214daef917754bf8cdd51a9b4813f6ce50
Binary files /dev/null and b/Library/ShaderCache/3/3bc4077de8d6c3f6dd475e0af7bf10d7.bin differ
diff --git a/Library/ShaderCache/3/3c82853c9cf2f2568ce462ed23eeeb7f.bin b/Library/ShaderCache/3/3c82853c9cf2f2568ce462ed23eeeb7f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5aaf122612ea8a796e6591809e4eb51ff09992c3
Binary files /dev/null and b/Library/ShaderCache/3/3c82853c9cf2f2568ce462ed23eeeb7f.bin differ
diff --git a/Library/ShaderCache/3/3cdcd5b264fd754dd4180111de3e469e.bin b/Library/ShaderCache/3/3cdcd5b264fd754dd4180111de3e469e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2e113a4deb4bb54580942a5fac5ddc210a00546c
Binary files /dev/null and b/Library/ShaderCache/3/3cdcd5b264fd754dd4180111de3e469e.bin differ
diff --git a/Library/ShaderCache/3/3d6d3b5554b82592df41f291ab759e48.bin b/Library/ShaderCache/3/3d6d3b5554b82592df41f291ab759e48.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24188abb15a9f382567eb688388c909e4e2844f5
Binary files /dev/null and b/Library/ShaderCache/3/3d6d3b5554b82592df41f291ab759e48.bin differ
diff --git a/Library/ShaderCache/3/3dece11b4f513e19c4c280fdc6fe7fea.bin b/Library/ShaderCache/3/3dece11b4f513e19c4c280fdc6fe7fea.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6f38ff8e2edbe62387ad1fda1b32378e9bc5f4a1
Binary files /dev/null and b/Library/ShaderCache/3/3dece11b4f513e19c4c280fdc6fe7fea.bin differ
diff --git a/Library/ShaderCache/3/3e33c89052f70dff1d2127facbcd8df8.bin b/Library/ShaderCache/3/3e33c89052f70dff1d2127facbcd8df8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fbb1c556d7abb36d556bf9999dfdfeb95799fd7a
Binary files /dev/null and b/Library/ShaderCache/3/3e33c89052f70dff1d2127facbcd8df8.bin differ
diff --git a/Library/ShaderCache/3/3fc0d2db58e6feebe18bbaa8418f753a.bin b/Library/ShaderCache/3/3fc0d2db58e6feebe18bbaa8418f753a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a831aa3ae0004673f3f7289c5784b137edc0c96f
Binary files /dev/null and b/Library/ShaderCache/3/3fc0d2db58e6feebe18bbaa8418f753a.bin differ
diff --git a/Library/ShaderCache/3/3fcc1f9b3c4609ba077c8ca284474159.bin b/Library/ShaderCache/3/3fcc1f9b3c4609ba077c8ca284474159.bin
new file mode 100644
index 0000000000000000000000000000000000000000..db3a91e5e0872d933c0ef7eeda0e4a54cab0c18b
Binary files /dev/null and b/Library/ShaderCache/3/3fcc1f9b3c4609ba077c8ca284474159.bin differ
diff --git a/Library/ShaderCache/3/3ff6e872e568993cf36b8461980b8c32.bin b/Library/ShaderCache/3/3ff6e872e568993cf36b8461980b8c32.bin
new file mode 100644
index 0000000000000000000000000000000000000000..325bd0e289ba78a3e6af1139386186c4cb7a63fb
Binary files /dev/null and b/Library/ShaderCache/3/3ff6e872e568993cf36b8461980b8c32.bin differ
diff --git a/Library/ShaderCache/4/4068a273f1490305a5dcc4c0c363c77c.bin b/Library/ShaderCache/4/4068a273f1490305a5dcc4c0c363c77c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..07bd13aaae984744a2462894fe60cb51543e3ef5
Binary files /dev/null and b/Library/ShaderCache/4/4068a273f1490305a5dcc4c0c363c77c.bin differ
diff --git a/Library/ShaderCache/4/40a351d7fa2dfdbdca4564ef0cc88c19.bin b/Library/ShaderCache/4/40a351d7fa2dfdbdca4564ef0cc88c19.bin
new file mode 100644
index 0000000000000000000000000000000000000000..19507009cc17fa4a9f2f6f207669f6654ebb6543
Binary files /dev/null and b/Library/ShaderCache/4/40a351d7fa2dfdbdca4564ef0cc88c19.bin differ
diff --git a/Library/ShaderCache/4/413c4087fb78443a0dd92172c94d6762.bin b/Library/ShaderCache/4/413c4087fb78443a0dd92172c94d6762.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fdd988e8e1c344118e9774a1e00d812b555f956c
Binary files /dev/null and b/Library/ShaderCache/4/413c4087fb78443a0dd92172c94d6762.bin differ
diff --git a/Library/ShaderCache/4/414fbedbd124f1c856817401598429b9.bin b/Library/ShaderCache/4/414fbedbd124f1c856817401598429b9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1df4cb7afb61631dddd3229567daceea9db1e911
Binary files /dev/null and b/Library/ShaderCache/4/414fbedbd124f1c856817401598429b9.bin differ
diff --git a/Library/ShaderCache/4/41923c9e37051a6a0168a6dfe344750e.bin b/Library/ShaderCache/4/41923c9e37051a6a0168a6dfe344750e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1b7bcc50272f801c96f1c0b7c80c3b90a0ee10fd
Binary files /dev/null and b/Library/ShaderCache/4/41923c9e37051a6a0168a6dfe344750e.bin differ
diff --git a/Library/ShaderCache/4/41a5cb6fda3a7924b2e5d9c706c234f2.bin b/Library/ShaderCache/4/41a5cb6fda3a7924b2e5d9c706c234f2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4d9f29c6d665ef36fded93e923d31e7245d5f44b
Binary files /dev/null and b/Library/ShaderCache/4/41a5cb6fda3a7924b2e5d9c706c234f2.bin differ
diff --git a/Library/ShaderCache/4/41d34d7fe5353be359d8d83482348721.bin b/Library/ShaderCache/4/41d34d7fe5353be359d8d83482348721.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dd91c72ee0e7dd96f103cc78fdfac91c3d8d770c
Binary files /dev/null and b/Library/ShaderCache/4/41d34d7fe5353be359d8d83482348721.bin differ
diff --git a/Library/ShaderCache/4/41e8ceea8c908d3751df73296df861ca.bin b/Library/ShaderCache/4/41e8ceea8c908d3751df73296df861ca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2642770104827b6794e309a44167984b726b337f
Binary files /dev/null and b/Library/ShaderCache/4/41e8ceea8c908d3751df73296df861ca.bin differ
diff --git a/Library/ShaderCache/4/4223a6c96c395f541a18c01b7b4daf5e.bin b/Library/ShaderCache/4/4223a6c96c395f541a18c01b7b4daf5e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..29c066b3aabdb5c4af382f6fbd8afee412d19eac
Binary files /dev/null and b/Library/ShaderCache/4/4223a6c96c395f541a18c01b7b4daf5e.bin differ
diff --git a/Library/ShaderCache/4/42c3f7287c8ac246b6299b5d271adfe2.bin b/Library/ShaderCache/4/42c3f7287c8ac246b6299b5d271adfe2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1ac0e6e9aad1febc680126cbd34bea3ec76aa186
Binary files /dev/null and b/Library/ShaderCache/4/42c3f7287c8ac246b6299b5d271adfe2.bin differ
diff --git a/Library/ShaderCache/4/43cb670a42ec7ed5d9d8de0c22f8384d.bin b/Library/ShaderCache/4/43cb670a42ec7ed5d9d8de0c22f8384d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e578ece27fdfbf0960385b17098ee7cdbdbb1cb6
Binary files /dev/null and b/Library/ShaderCache/4/43cb670a42ec7ed5d9d8de0c22f8384d.bin differ
diff --git a/Library/ShaderCache/4/44805371d95ad4297627db6263c2d867.bin b/Library/ShaderCache/4/44805371d95ad4297627db6263c2d867.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2c617d220172c18d5fdd0da6a3fa73a89d1ec43b
Binary files /dev/null and b/Library/ShaderCache/4/44805371d95ad4297627db6263c2d867.bin differ
diff --git a/Library/ShaderCache/4/455194cffd48d0a5f414967065a11ebc.bin b/Library/ShaderCache/4/455194cffd48d0a5f414967065a11ebc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..235276b9e7b0a7c616205044614d75a30b66d6e3
Binary files /dev/null and b/Library/ShaderCache/4/455194cffd48d0a5f414967065a11ebc.bin differ
diff --git a/Library/ShaderCache/4/46c402f76381cbe4f83729ed28c4db26.bin b/Library/ShaderCache/4/46c402f76381cbe4f83729ed28c4db26.bin
new file mode 100644
index 0000000000000000000000000000000000000000..faec2f1efae4b10b8d6cf38fa5beb903f103a060
Binary files /dev/null and b/Library/ShaderCache/4/46c402f76381cbe4f83729ed28c4db26.bin differ
diff --git a/Library/ShaderCache/4/46f77aafc19131a736b912969f988d6f.bin b/Library/ShaderCache/4/46f77aafc19131a736b912969f988d6f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ce8ef6b2ab9b7aabc93df513ed09de39138ce86f
Binary files /dev/null and b/Library/ShaderCache/4/46f77aafc19131a736b912969f988d6f.bin differ
diff --git a/Library/ShaderCache/4/484ad13bf6af821376ff82177884422e.bin b/Library/ShaderCache/4/484ad13bf6af821376ff82177884422e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/4/484ad13bf6af821376ff82177884422e.bin differ
diff --git a/Library/ShaderCache/4/48819953811f69fff157fdecc07a2aa9.bin b/Library/ShaderCache/4/48819953811f69fff157fdecc07a2aa9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6a46bea5788bd8929575a2f6f991b3e73810c393
Binary files /dev/null and b/Library/ShaderCache/4/48819953811f69fff157fdecc07a2aa9.bin differ
diff --git a/Library/ShaderCache/4/497f8683f37ed190ddcc0d3e7bb718d2.bin b/Library/ShaderCache/4/497f8683f37ed190ddcc0d3e7bb718d2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b280658d111a7e79906bdd9dbc45333baa3df2cb
Binary files /dev/null and b/Library/ShaderCache/4/497f8683f37ed190ddcc0d3e7bb718d2.bin differ
diff --git a/Library/ShaderCache/4/4a3757a22d83c097fc2b0dc22c96c554.bin b/Library/ShaderCache/4/4a3757a22d83c097fc2b0dc22c96c554.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dc495615a8043983658d156bc10cdd92bf621b5d
Binary files /dev/null and b/Library/ShaderCache/4/4a3757a22d83c097fc2b0dc22c96c554.bin differ
diff --git a/Library/ShaderCache/4/4a3e9e4a2a6d5759769756eef0238bdd.bin b/Library/ShaderCache/4/4a3e9e4a2a6d5759769756eef0238bdd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6406f0fd8a10442c669f6fe8cfffc1093a0c57ef
Binary files /dev/null and b/Library/ShaderCache/4/4a3e9e4a2a6d5759769756eef0238bdd.bin differ
diff --git a/Library/ShaderCache/4/4a5bf8767ad1b8568c287ac9f193d9b1.bin b/Library/ShaderCache/4/4a5bf8767ad1b8568c287ac9f193d9b1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6dde655ebfe071982af3c72a30244942f62f04a8
Binary files /dev/null and b/Library/ShaderCache/4/4a5bf8767ad1b8568c287ac9f193d9b1.bin differ
diff --git a/Library/ShaderCache/4/4a6efe063ecbcc0c79062b3d24cf008f.bin b/Library/ShaderCache/4/4a6efe063ecbcc0c79062b3d24cf008f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ec4bb3801df7df5f6e67b23712d3dc8b96ccffbd
Binary files /dev/null and b/Library/ShaderCache/4/4a6efe063ecbcc0c79062b3d24cf008f.bin differ
diff --git a/Library/ShaderCache/4/4a7748489552a5c391d3e05f3902649a.bin b/Library/ShaderCache/4/4a7748489552a5c391d3e05f3902649a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a58a40f4b7bfdc322fb69ea19dfb54dc737dfc92
Binary files /dev/null and b/Library/ShaderCache/4/4a7748489552a5c391d3e05f3902649a.bin differ
diff --git a/Library/ShaderCache/4/4b98c0685d6baf7ecb55209f30c8d928.bin b/Library/ShaderCache/4/4b98c0685d6baf7ecb55209f30c8d928.bin
new file mode 100644
index 0000000000000000000000000000000000000000..83470f6ee23303e132c54f3cf1e6d74dccdaeb20
Binary files /dev/null and b/Library/ShaderCache/4/4b98c0685d6baf7ecb55209f30c8d928.bin differ
diff --git a/Library/ShaderCache/4/4bcea2823db81a16e6e1768d5cbf398b.bin b/Library/ShaderCache/4/4bcea2823db81a16e6e1768d5cbf398b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d684cfb8676265947191fc90bc3b5fdbf5eac9b8
Binary files /dev/null and b/Library/ShaderCache/4/4bcea2823db81a16e6e1768d5cbf398b.bin differ
diff --git a/Library/ShaderCache/4/4c79542cfe2116a7ad7484b7eb1665d2.bin b/Library/ShaderCache/4/4c79542cfe2116a7ad7484b7eb1665d2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..532baa1b075f1da99614551816d7132e49e0a95c
Binary files /dev/null and b/Library/ShaderCache/4/4c79542cfe2116a7ad7484b7eb1665d2.bin differ
diff --git a/Library/ShaderCache/4/4d841d9c835b20189dedc73a5b3d69b9.bin b/Library/ShaderCache/4/4d841d9c835b20189dedc73a5b3d69b9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3bef35fbaf6eb4c3d6b9c47eee6f7fba204f1953
Binary files /dev/null and b/Library/ShaderCache/4/4d841d9c835b20189dedc73a5b3d69b9.bin differ
diff --git a/Library/ShaderCache/4/4dcf6d2877c745f7bf572860aba11605.bin b/Library/ShaderCache/4/4dcf6d2877c745f7bf572860aba11605.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2a950e9b2565f090ae3f6bd49f6545faf4083532
Binary files /dev/null and b/Library/ShaderCache/4/4dcf6d2877c745f7bf572860aba11605.bin differ
diff --git a/Library/ShaderCache/4/4e01f26475dd885b740c2620220b11d9.bin b/Library/ShaderCache/4/4e01f26475dd885b740c2620220b11d9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..643d3892a2f83a2452033c8f982f30f7ee2a8839
Binary files /dev/null and b/Library/ShaderCache/4/4e01f26475dd885b740c2620220b11d9.bin differ
diff --git a/Library/ShaderCache/4/4f33b74ee3a8843ee173a4115710adb7.bin b/Library/ShaderCache/4/4f33b74ee3a8843ee173a4115710adb7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..46dd9ad99e2220d93c0c9474df467d809f73c896
Binary files /dev/null and b/Library/ShaderCache/4/4f33b74ee3a8843ee173a4115710adb7.bin differ
diff --git a/Library/ShaderCache/4/4f9c86be24859ca066bb14475dbe4eb1.bin b/Library/ShaderCache/4/4f9c86be24859ca066bb14475dbe4eb1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e629ee8d7394f318944cdf7c4c62f620cf070afa
Binary files /dev/null and b/Library/ShaderCache/4/4f9c86be24859ca066bb14475dbe4eb1.bin differ
diff --git a/Library/ShaderCache/5/5037077afb6a47319561b0eaa424b3ec.bin b/Library/ShaderCache/5/5037077afb6a47319561b0eaa424b3ec.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b4acee36935c587329b9533ca2f71a6625c20e0b
Binary files /dev/null and b/Library/ShaderCache/5/5037077afb6a47319561b0eaa424b3ec.bin differ
diff --git a/Library/ShaderCache/5/51746f915dc4548eb1bb2a0901379845.bin b/Library/ShaderCache/5/51746f915dc4548eb1bb2a0901379845.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6738519e12acc7c23b969185634c9f4042b0baf4
Binary files /dev/null and b/Library/ShaderCache/5/51746f915dc4548eb1bb2a0901379845.bin differ
diff --git a/Library/ShaderCache/5/51f63b7771f1ffabab3b4fde2e7e0800.bin b/Library/ShaderCache/5/51f63b7771f1ffabab3b4fde2e7e0800.bin
new file mode 100644
index 0000000000000000000000000000000000000000..60c2061eaf94a5ae6af5f2e4c35f3332439fefe7
Binary files /dev/null and b/Library/ShaderCache/5/51f63b7771f1ffabab3b4fde2e7e0800.bin differ
diff --git a/Library/ShaderCache/5/526c6e284a549a583baa39a3130a3a3b.bin b/Library/ShaderCache/5/526c6e284a549a583baa39a3130a3a3b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7bd6ad6a9bca7231c96fa08f51bc450841146abc
Binary files /dev/null and b/Library/ShaderCache/5/526c6e284a549a583baa39a3130a3a3b.bin differ
diff --git a/Library/ShaderCache/5/52b6d995aa4215b95766e983c5bf4de7.bin b/Library/ShaderCache/5/52b6d995aa4215b95766e983c5bf4de7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a146efb5c476127107c283a680d5473b546a8b87
Binary files /dev/null and b/Library/ShaderCache/5/52b6d995aa4215b95766e983c5bf4de7.bin differ
diff --git a/Library/ShaderCache/5/530bdb4b0ee5c5f984de6e115ab2c85d.bin b/Library/ShaderCache/5/530bdb4b0ee5c5f984de6e115ab2c85d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..106a8398739b2000ff5de6e478b957d1be53ad81
Binary files /dev/null and b/Library/ShaderCache/5/530bdb4b0ee5c5f984de6e115ab2c85d.bin differ
diff --git a/Library/ShaderCache/5/5353ed0ba267b169135be8aa30edf326.bin b/Library/ShaderCache/5/5353ed0ba267b169135be8aa30edf326.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e4fc1ecb5d022f522f18446871f8724afb1abf76
Binary files /dev/null and b/Library/ShaderCache/5/5353ed0ba267b169135be8aa30edf326.bin differ
diff --git a/Library/ShaderCache/5/540c2390d45027f60ec5c86f5b1922c0.bin b/Library/ShaderCache/5/540c2390d45027f60ec5c86f5b1922c0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c6cbc4d9d61f681119577368580c0d4b728bfafe
Binary files /dev/null and b/Library/ShaderCache/5/540c2390d45027f60ec5c86f5b1922c0.bin differ
diff --git a/Library/ShaderCache/5/5421781091afd0de3a15d1f1ca198391.bin b/Library/ShaderCache/5/5421781091afd0de3a15d1f1ca198391.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4912fcc21815eef1a3feb7b5e9430ede5e332e32
Binary files /dev/null and b/Library/ShaderCache/5/5421781091afd0de3a15d1f1ca198391.bin differ
diff --git a/Library/ShaderCache/5/548ed7846537ad7012b245c7fda47e85.bin b/Library/ShaderCache/5/548ed7846537ad7012b245c7fda47e85.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b7ffe379803fb3274c21b13e9b74c8711151de94
Binary files /dev/null and b/Library/ShaderCache/5/548ed7846537ad7012b245c7fda47e85.bin differ
diff --git a/Library/ShaderCache/5/54e01ab5cce9eef95837bb75b1b69502.bin b/Library/ShaderCache/5/54e01ab5cce9eef95837bb75b1b69502.bin
new file mode 100644
index 0000000000000000000000000000000000000000..61cf1a47d9b9be5c820a6ccc5cf3f8162dbc844b
Binary files /dev/null and b/Library/ShaderCache/5/54e01ab5cce9eef95837bb75b1b69502.bin differ
diff --git a/Library/ShaderCache/5/5546166fc4bf891f61ed16a6a1d7ac22.bin b/Library/ShaderCache/5/5546166fc4bf891f61ed16a6a1d7ac22.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f9cc30e4439f5e84b122a218ac1db49c0da8c465
Binary files /dev/null and b/Library/ShaderCache/5/5546166fc4bf891f61ed16a6a1d7ac22.bin differ
diff --git a/Library/ShaderCache/5/55b3ea7e7aed9d56aa37883ef689e476.bin b/Library/ShaderCache/5/55b3ea7e7aed9d56aa37883ef689e476.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c391942d03ad81d889099f80740c36c786bbb423
Binary files /dev/null and b/Library/ShaderCache/5/55b3ea7e7aed9d56aa37883ef689e476.bin differ
diff --git a/Library/ShaderCache/5/57dacafe120cccf9b03a8ca09bb27ab5.bin b/Library/ShaderCache/5/57dacafe120cccf9b03a8ca09bb27ab5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e3bf386744c88835fc3f864f9fa740d694201ce7
Binary files /dev/null and b/Library/ShaderCache/5/57dacafe120cccf9b03a8ca09bb27ab5.bin differ
diff --git a/Library/ShaderCache/5/5871f349c45bcdc36a347cead0637b18.bin b/Library/ShaderCache/5/5871f349c45bcdc36a347cead0637b18.bin
new file mode 100644
index 0000000000000000000000000000000000000000..445efb97ce9f26c5b71eb0a5b6b6e2b41ffb1a77
Binary files /dev/null and b/Library/ShaderCache/5/5871f349c45bcdc36a347cead0637b18.bin differ
diff --git a/Library/ShaderCache/5/5917032b2b6d0ac5bfb08c6de7dc3b90.bin b/Library/ShaderCache/5/5917032b2b6d0ac5bfb08c6de7dc3b90.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e0ae10d1b6aef833814b4d5ee85ef50dca715eed
Binary files /dev/null and b/Library/ShaderCache/5/5917032b2b6d0ac5bfb08c6de7dc3b90.bin differ
diff --git a/Library/ShaderCache/5/5a3760d76b5ecc7bb4259a8f654c76c9.bin b/Library/ShaderCache/5/5a3760d76b5ecc7bb4259a8f654c76c9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bea3e67de389aa7a32ce4c4908ce5befcd21229c
Binary files /dev/null and b/Library/ShaderCache/5/5a3760d76b5ecc7bb4259a8f654c76c9.bin differ
diff --git a/Library/ShaderCache/5/5a619bacad2e42cc6d8632f53943fd3f.bin b/Library/ShaderCache/5/5a619bacad2e42cc6d8632f53943fd3f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..30c522010ca5c57aede24b69d9c045d5646c7685
Binary files /dev/null and b/Library/ShaderCache/5/5a619bacad2e42cc6d8632f53943fd3f.bin differ
diff --git a/Library/ShaderCache/5/5a9dececfd39c9051845cbf9301fc072.bin b/Library/ShaderCache/5/5a9dececfd39c9051845cbf9301fc072.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cc01199646eb78372c1402425032e8d777b81a07
Binary files /dev/null and b/Library/ShaderCache/5/5a9dececfd39c9051845cbf9301fc072.bin differ
diff --git a/Library/ShaderCache/5/5b3e02ff292eefae4fdfd6d3db59deb0.bin b/Library/ShaderCache/5/5b3e02ff292eefae4fdfd6d3db59deb0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a15f91078b6b4797d1720fb13ec1a11efcfc2fd3
Binary files /dev/null and b/Library/ShaderCache/5/5b3e02ff292eefae4fdfd6d3db59deb0.bin differ
diff --git a/Library/ShaderCache/5/5bf36f4a3f0eacf264c891c8e656e309.bin b/Library/ShaderCache/5/5bf36f4a3f0eacf264c891c8e656e309.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f42b4ec10f0f0a1a785a19c8aa7c8c02dc266012
Binary files /dev/null and b/Library/ShaderCache/5/5bf36f4a3f0eacf264c891c8e656e309.bin differ
diff --git a/Library/ShaderCache/5/5c24c677a3168ff5ba9b8effd1233f58.bin b/Library/ShaderCache/5/5c24c677a3168ff5ba9b8effd1233f58.bin
new file mode 100644
index 0000000000000000000000000000000000000000..35c53e4ac9a815eabfd9856a1b3272fa11e06f1b
Binary files /dev/null and b/Library/ShaderCache/5/5c24c677a3168ff5ba9b8effd1233f58.bin differ
diff --git a/Library/ShaderCache/5/5c96297eb5f01426360bba0ca310cc0b.bin b/Library/ShaderCache/5/5c96297eb5f01426360bba0ca310cc0b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a03f9e4e4c3628f12f26257a832bfb6679b73feb
Binary files /dev/null and b/Library/ShaderCache/5/5c96297eb5f01426360bba0ca310cc0b.bin differ
diff --git a/Library/ShaderCache/5/5caee7445aadd0fcbc9c71b05ac8741d.bin b/Library/ShaderCache/5/5caee7445aadd0fcbc9c71b05ac8741d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..968e12fdaaec58a57a706edd8cc14c260b3829b2
Binary files /dev/null and b/Library/ShaderCache/5/5caee7445aadd0fcbc9c71b05ac8741d.bin differ
diff --git a/Library/ShaderCache/5/5ce5f100702f7f9d770d2eeda7d43372.bin b/Library/ShaderCache/5/5ce5f100702f7f9d770d2eeda7d43372.bin
new file mode 100644
index 0000000000000000000000000000000000000000..eca43774717be345cb5b397189506a0e02007c7a
Binary files /dev/null and b/Library/ShaderCache/5/5ce5f100702f7f9d770d2eeda7d43372.bin differ
diff --git a/Library/ShaderCache/5/5f9204970d3a4eb07f9edd7faabe05ad.bin b/Library/ShaderCache/5/5f9204970d3a4eb07f9edd7faabe05ad.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a831aa3ae0004673f3f7289c5784b137edc0c96f
Binary files /dev/null and b/Library/ShaderCache/5/5f9204970d3a4eb07f9edd7faabe05ad.bin differ
diff --git a/Library/ShaderCache/5/5fb17d92f4869ba399b601b35e16d431.bin b/Library/ShaderCache/5/5fb17d92f4869ba399b601b35e16d431.bin
new file mode 100644
index 0000000000000000000000000000000000000000..07067caffb30d34bb97306643fbb8543488166ab
Binary files /dev/null and b/Library/ShaderCache/5/5fb17d92f4869ba399b601b35e16d431.bin differ
diff --git a/Library/ShaderCache/6/619450abbfd420e1b3120059771c88e8.bin b/Library/ShaderCache/6/619450abbfd420e1b3120059771c88e8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d9bb5562def30c48c526528edf48953291045976
Binary files /dev/null and b/Library/ShaderCache/6/619450abbfd420e1b3120059771c88e8.bin differ
diff --git a/Library/ShaderCache/6/61981819ffc4245c1f34a31939a71d57.bin b/Library/ShaderCache/6/61981819ffc4245c1f34a31939a71d57.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f2a86ecfcda31a200ac0b44320224e954967fb94
Binary files /dev/null and b/Library/ShaderCache/6/61981819ffc4245c1f34a31939a71d57.bin differ
diff --git a/Library/ShaderCache/6/61eff6be5f98d4fc18016fe681265db5.bin b/Library/ShaderCache/6/61eff6be5f98d4fc18016fe681265db5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..45874618cb1ea20c5e926e70f1a80be0acc2711a
Binary files /dev/null and b/Library/ShaderCache/6/61eff6be5f98d4fc18016fe681265db5.bin differ
diff --git a/Library/ShaderCache/6/6267bdb3c789168ff1b7e301aa177408.bin b/Library/ShaderCache/6/6267bdb3c789168ff1b7e301aa177408.bin
new file mode 100644
index 0000000000000000000000000000000000000000..af43e0ba46f52fb111f4ad45fb7ef3cf86f3e754
Binary files /dev/null and b/Library/ShaderCache/6/6267bdb3c789168ff1b7e301aa177408.bin differ
diff --git a/Library/ShaderCache/6/63287f3f7e37e496a46052b3740f889d.bin b/Library/ShaderCache/6/63287f3f7e37e496a46052b3740f889d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a65c7d15b4933c534bfddee0753a85c0a96b3d5b
Binary files /dev/null and b/Library/ShaderCache/6/63287f3f7e37e496a46052b3740f889d.bin differ
diff --git a/Library/ShaderCache/6/63408c00358e615d925c67739c46216e.bin b/Library/ShaderCache/6/63408c00358e615d925c67739c46216e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..62ca43b80326b347b8020772b127d39d2a491f7e
Binary files /dev/null and b/Library/ShaderCache/6/63408c00358e615d925c67739c46216e.bin differ
diff --git a/Library/ShaderCache/6/637adf8a38622aa5bef80d38fe24d40b.bin b/Library/ShaderCache/6/637adf8a38622aa5bef80d38fe24d40b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bbfa53dfb348b8507ce6b51d0f9f4924812ee4a6
Binary files /dev/null and b/Library/ShaderCache/6/637adf8a38622aa5bef80d38fe24d40b.bin differ
diff --git a/Library/ShaderCache/6/63d3d92e50a9c8e8adc99544609d33c5.bin b/Library/ShaderCache/6/63d3d92e50a9c8e8adc99544609d33c5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..69cb6cdbe5b8668f06579b1dfa70bab33c62af6d
Binary files /dev/null and b/Library/ShaderCache/6/63d3d92e50a9c8e8adc99544609d33c5.bin differ
diff --git a/Library/ShaderCache/6/6489ac66b926b7e69544312332578c68.bin b/Library/ShaderCache/6/6489ac66b926b7e69544312332578c68.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4d488cda3fe3bcecd90a69a59bbbe736deb7e232
Binary files /dev/null and b/Library/ShaderCache/6/6489ac66b926b7e69544312332578c68.bin differ
diff --git a/Library/ShaderCache/6/64a085fef5a56ca72cdb7d5edfc865f9.bin b/Library/ShaderCache/6/64a085fef5a56ca72cdb7d5edfc865f9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bc7ad01051dd5544991da91b5998c863e2ff9d35
Binary files /dev/null and b/Library/ShaderCache/6/64a085fef5a56ca72cdb7d5edfc865f9.bin differ
diff --git a/Library/ShaderCache/6/65270c941dc392ef94b367a82d5a618a.bin b/Library/ShaderCache/6/65270c941dc392ef94b367a82d5a618a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7271996acd251af0460d10c82f6352b8e3b81eff
Binary files /dev/null and b/Library/ShaderCache/6/65270c941dc392ef94b367a82d5a618a.bin differ
diff --git a/Library/ShaderCache/6/6557d2b2e0c4227eb73993a605110beb.bin b/Library/ShaderCache/6/6557d2b2e0c4227eb73993a605110beb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3940886a1f6d8f0a080cbc2b7a687c1a25082018
Binary files /dev/null and b/Library/ShaderCache/6/6557d2b2e0c4227eb73993a605110beb.bin differ
diff --git a/Library/ShaderCache/6/66c53d9ea308fb22adae760ab2f13f6e.bin b/Library/ShaderCache/6/66c53d9ea308fb22adae760ab2f13f6e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6c8b87cbb87235dc5b1dc00276c32ce336a66963
Binary files /dev/null and b/Library/ShaderCache/6/66c53d9ea308fb22adae760ab2f13f6e.bin differ
diff --git a/Library/ShaderCache/6/66f85c40658d458f9684cba639dd9809.bin b/Library/ShaderCache/6/66f85c40658d458f9684cba639dd9809.bin
new file mode 100644
index 0000000000000000000000000000000000000000..705285a213a9639ea47f60313acbd7657ca92475
Binary files /dev/null and b/Library/ShaderCache/6/66f85c40658d458f9684cba639dd9809.bin differ
diff --git a/Library/ShaderCache/6/677df6ae05d9938cf44ef73d33c46518.bin b/Library/ShaderCache/6/677df6ae05d9938cf44ef73d33c46518.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b61769915a3a586d02f99bcb09499a988e54045e
Binary files /dev/null and b/Library/ShaderCache/6/677df6ae05d9938cf44ef73d33c46518.bin differ
diff --git a/Library/ShaderCache/6/68339803651bdfbcc83bdc4c82eb8c72.bin b/Library/ShaderCache/6/68339803651bdfbcc83bdc4c82eb8c72.bin
new file mode 100644
index 0000000000000000000000000000000000000000..930fb589407c80417c213120a4ab47eb26a68e90
Binary files /dev/null and b/Library/ShaderCache/6/68339803651bdfbcc83bdc4c82eb8c72.bin differ
diff --git a/Library/ShaderCache/6/6927343ea9c320964a16ce7fc8f963ea.bin b/Library/ShaderCache/6/6927343ea9c320964a16ce7fc8f963ea.bin
new file mode 100644
index 0000000000000000000000000000000000000000..052f021bb5d6725f09cc1f35806c453381d985f2
Binary files /dev/null and b/Library/ShaderCache/6/6927343ea9c320964a16ce7fc8f963ea.bin differ
diff --git a/Library/ShaderCache/6/695c85ffc9978468ad125bd85e5371db.bin b/Library/ShaderCache/6/695c85ffc9978468ad125bd85e5371db.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5c679b6bbfab7e7c02246dc58277b947c3ec18a9
Binary files /dev/null and b/Library/ShaderCache/6/695c85ffc9978468ad125bd85e5371db.bin differ
diff --git a/Library/ShaderCache/6/69bcf515ea999415141e1be4cd8f780c.bin b/Library/ShaderCache/6/69bcf515ea999415141e1be4cd8f780c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9443bab5caffe2995e66688a13ab7eb4e28bedd7
Binary files /dev/null and b/Library/ShaderCache/6/69bcf515ea999415141e1be4cd8f780c.bin differ
diff --git a/Library/ShaderCache/6/6c7300e394fcae0e8df7585586542236.bin b/Library/ShaderCache/6/6c7300e394fcae0e8df7585586542236.bin
new file mode 100644
index 0000000000000000000000000000000000000000..21c0669408a2889c8b75ab08ebf6107778be70d6
Binary files /dev/null and b/Library/ShaderCache/6/6c7300e394fcae0e8df7585586542236.bin differ
diff --git a/Library/ShaderCache/6/6cb1a64241ee224c1a09269c666bb898.bin b/Library/ShaderCache/6/6cb1a64241ee224c1a09269c666bb898.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b8d76799a8700a8f3b95035eb1ccda1082f9a77d
Binary files /dev/null and b/Library/ShaderCache/6/6cb1a64241ee224c1a09269c666bb898.bin differ
diff --git a/Library/ShaderCache/6/6cfa319a36c6556ad9974de07dea8847.bin b/Library/ShaderCache/6/6cfa319a36c6556ad9974de07dea8847.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1773152e864ae0086900f8c0bcf87625ee4f663d
Binary files /dev/null and b/Library/ShaderCache/6/6cfa319a36c6556ad9974de07dea8847.bin differ
diff --git a/Library/ShaderCache/6/6d11e03eaab23e2a6dbebe54e0ed8975.bin b/Library/ShaderCache/6/6d11e03eaab23e2a6dbebe54e0ed8975.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4e92378d292936724742cd067ea68832f75f9a16
Binary files /dev/null and b/Library/ShaderCache/6/6d11e03eaab23e2a6dbebe54e0ed8975.bin differ
diff --git a/Library/ShaderCache/6/6ee6181198a388a66015a17794d85ef4.bin b/Library/ShaderCache/6/6ee6181198a388a66015a17794d85ef4.bin
new file mode 100644
index 0000000000000000000000000000000000000000..170170f186eae0f10b26d72e4311d1992f5efcdf
Binary files /dev/null and b/Library/ShaderCache/6/6ee6181198a388a66015a17794d85ef4.bin differ
diff --git a/Library/ShaderCache/7/705ca2690dd893efde34162926ab32dc.bin b/Library/ShaderCache/7/705ca2690dd893efde34162926ab32dc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..39bd0f2128e005372521a10c3fa252069f731921
Binary files /dev/null and b/Library/ShaderCache/7/705ca2690dd893efde34162926ab32dc.bin differ
diff --git a/Library/ShaderCache/7/70f6f382996cb2a311da3b9935014b6a.bin b/Library/ShaderCache/7/70f6f382996cb2a311da3b9935014b6a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..001ca6f26cf036576a15c03e4760b81f4e544958
Binary files /dev/null and b/Library/ShaderCache/7/70f6f382996cb2a311da3b9935014b6a.bin differ
diff --git a/Library/ShaderCache/7/71561543b1ca0eb84a84841c3a5e33ce.bin b/Library/ShaderCache/7/71561543b1ca0eb84a84841c3a5e33ce.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e2115bb400f0613458d12b21fd8eef4e4824b845
Binary files /dev/null and b/Library/ShaderCache/7/71561543b1ca0eb84a84841c3a5e33ce.bin differ
diff --git a/Library/ShaderCache/7/727ab4426bde4a9af637ea09d30b6bbe.bin b/Library/ShaderCache/7/727ab4426bde4a9af637ea09d30b6bbe.bin
new file mode 100644
index 0000000000000000000000000000000000000000..06d23ec1ecd5f787a84be40c9c0f28262312b73a
Binary files /dev/null and b/Library/ShaderCache/7/727ab4426bde4a9af637ea09d30b6bbe.bin differ
diff --git a/Library/ShaderCache/7/73464c7acea94e77f6ac07169c8b67ca.bin b/Library/ShaderCache/7/73464c7acea94e77f6ac07169c8b67ca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9b5a665eddf57c0949def7dc375c9bc393b77cd6
Binary files /dev/null and b/Library/ShaderCache/7/73464c7acea94e77f6ac07169c8b67ca.bin differ
diff --git a/Library/ShaderCache/7/734a19ecef3cac1c05a8e839188729d8.bin b/Library/ShaderCache/7/734a19ecef3cac1c05a8e839188729d8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b812cc115d0df2c2ddfd2314f90443021a8b670d
Binary files /dev/null and b/Library/ShaderCache/7/734a19ecef3cac1c05a8e839188729d8.bin differ
diff --git a/Library/ShaderCache/7/734fe71d6ef6b53cd4610ab7d95a91ad.bin b/Library/ShaderCache/7/734fe71d6ef6b53cd4610ab7d95a91ad.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b9d9f3cf6f0625bf0a655bbd841b731aae108c56
Binary files /dev/null and b/Library/ShaderCache/7/734fe71d6ef6b53cd4610ab7d95a91ad.bin differ
diff --git a/Library/ShaderCache/7/739a25f4c37d48345219392d4419fc7d.bin b/Library/ShaderCache/7/739a25f4c37d48345219392d4419fc7d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7e7f82341d019fe95ecaf99b00711e8caf662dba
Binary files /dev/null and b/Library/ShaderCache/7/739a25f4c37d48345219392d4419fc7d.bin differ
diff --git a/Library/ShaderCache/7/748aeb6ddd6973aae91963f00d862f35.bin b/Library/ShaderCache/7/748aeb6ddd6973aae91963f00d862f35.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c266c23dee3900d500d37eab4fed774d6f1a662a
Binary files /dev/null and b/Library/ShaderCache/7/748aeb6ddd6973aae91963f00d862f35.bin differ
diff --git a/Library/ShaderCache/7/74c155c3b99df0b976f363d364e57ffd.bin b/Library/ShaderCache/7/74c155c3b99df0b976f363d364e57ffd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..958e4ca4bd9ed7185cb5240810519bc889fe4a3f
Binary files /dev/null and b/Library/ShaderCache/7/74c155c3b99df0b976f363d364e57ffd.bin differ
diff --git a/Library/ShaderCache/7/75435380106b0cb3f8f395595f5b21f8.bin b/Library/ShaderCache/7/75435380106b0cb3f8f395595f5b21f8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d2cb1aef58ea85caffa4d8ffdc47a4d990c1b859
Binary files /dev/null and b/Library/ShaderCache/7/75435380106b0cb3f8f395595f5b21f8.bin differ
diff --git a/Library/ShaderCache/7/75720ebc3651c04a7346606acb206188.bin b/Library/ShaderCache/7/75720ebc3651c04a7346606acb206188.bin
new file mode 100644
index 0000000000000000000000000000000000000000..deef5f8728d32f112a2e7726eef07656f949c004
Binary files /dev/null and b/Library/ShaderCache/7/75720ebc3651c04a7346606acb206188.bin differ
diff --git a/Library/ShaderCache/7/757a657ae149e0c6aab271a6901ec9c0.bin b/Library/ShaderCache/7/757a657ae149e0c6aab271a6901ec9c0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..205ad99e2e20e7fa864be37815c90d70063b5a0f
Binary files /dev/null and b/Library/ShaderCache/7/757a657ae149e0c6aab271a6901ec9c0.bin differ
diff --git a/Library/ShaderCache/7/76462cc71748a5055052112afc612573.bin b/Library/ShaderCache/7/76462cc71748a5055052112afc612573.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fe6c169b9c802fe874306dac03993700d288d593
Binary files /dev/null and b/Library/ShaderCache/7/76462cc71748a5055052112afc612573.bin differ
diff --git a/Library/ShaderCache/7/77852062906defa4ba01dba88ca662bb.bin b/Library/ShaderCache/7/77852062906defa4ba01dba88ca662bb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..26b98d4d1dcd6ca1ef6c8b5b4e6f46cd8b031a0d
Binary files /dev/null and b/Library/ShaderCache/7/77852062906defa4ba01dba88ca662bb.bin differ
diff --git a/Library/ShaderCache/7/7841f29b01d664c61986277bf816d47a.bin b/Library/ShaderCache/7/7841f29b01d664c61986277bf816d47a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..751c237dcc6b11e3a9eba5cfb8306c9989f596c7
Binary files /dev/null and b/Library/ShaderCache/7/7841f29b01d664c61986277bf816d47a.bin differ
diff --git a/Library/ShaderCache/7/788df80a1ae139ac2fba266f374e598c.bin b/Library/ShaderCache/7/788df80a1ae139ac2fba266f374e598c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d37a6f438a594ce83d92b97b7a68cd802c0610da
Binary files /dev/null and b/Library/ShaderCache/7/788df80a1ae139ac2fba266f374e598c.bin differ
diff --git a/Library/ShaderCache/7/7986fe3fdaa8bd16e453c8fe85630b1b.bin b/Library/ShaderCache/7/7986fe3fdaa8bd16e453c8fe85630b1b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a522f689f80caa36c8cd887f0a9649334ea35349
Binary files /dev/null and b/Library/ShaderCache/7/7986fe3fdaa8bd16e453c8fe85630b1b.bin differ
diff --git a/Library/ShaderCache/7/79ab3cc32b4b05a4a9af2173eb914b78.bin b/Library/ShaderCache/7/79ab3cc32b4b05a4a9af2173eb914b78.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fc6765c91114b408b5a899e5e869a46973386d15
Binary files /dev/null and b/Library/ShaderCache/7/79ab3cc32b4b05a4a9af2173eb914b78.bin differ
diff --git a/Library/ShaderCache/7/79d0d759bab53c629f577e1752ca0b2e.bin b/Library/ShaderCache/7/79d0d759bab53c629f577e1752ca0b2e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..afaf4c28bc4c7a486d039972b8b79803d158b4b1
Binary files /dev/null and b/Library/ShaderCache/7/79d0d759bab53c629f577e1752ca0b2e.bin differ
diff --git a/Library/ShaderCache/7/7a77e83b095abcdb907227ea55f6c64c.bin b/Library/ShaderCache/7/7a77e83b095abcdb907227ea55f6c64c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4d965d8140d530d2003d42c30a7e7d7658bfd3dd
Binary files /dev/null and b/Library/ShaderCache/7/7a77e83b095abcdb907227ea55f6c64c.bin differ
diff --git a/Library/ShaderCache/7/7b303c5d196a51b99dd60c7c3eb1d049.bin b/Library/ShaderCache/7/7b303c5d196a51b99dd60c7c3eb1d049.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1568b07ddc1a4d7f38458e88eac96994cca096c7
Binary files /dev/null and b/Library/ShaderCache/7/7b303c5d196a51b99dd60c7c3eb1d049.bin differ
diff --git a/Library/ShaderCache/7/7ba5af9d5b14e12396e32d8419749024.bin b/Library/ShaderCache/7/7ba5af9d5b14e12396e32d8419749024.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bf296619a7360b1d041fa61ed1dfe1839fd4b49b
Binary files /dev/null and b/Library/ShaderCache/7/7ba5af9d5b14e12396e32d8419749024.bin differ
diff --git a/Library/ShaderCache/7/7cf170abece240d8a608273c35e5d1ed.bin b/Library/ShaderCache/7/7cf170abece240d8a608273c35e5d1ed.bin
new file mode 100644
index 0000000000000000000000000000000000000000..46790e6dca0d8e04a2e6e7b45b9fa33dad2b5285
Binary files /dev/null and b/Library/ShaderCache/7/7cf170abece240d8a608273c35e5d1ed.bin differ
diff --git a/Library/ShaderCache/7/7d69ca077cf885db80bcfd854481c04c.bin b/Library/ShaderCache/7/7d69ca077cf885db80bcfd854481c04c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e3efe3cbde693878e2bcd9152b099ab3ea0ce31e
Binary files /dev/null and b/Library/ShaderCache/7/7d69ca077cf885db80bcfd854481c04c.bin differ
diff --git a/Library/ShaderCache/7/7ebf8b28854ac2d86f5a30292f3f892a.bin b/Library/ShaderCache/7/7ebf8b28854ac2d86f5a30292f3f892a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e629ee8d7394f318944cdf7c4c62f620cf070afa
Binary files /dev/null and b/Library/ShaderCache/7/7ebf8b28854ac2d86f5a30292f3f892a.bin differ
diff --git a/Library/ShaderCache/7/7ec58260a77b74fd8f891157f14e6707.bin b/Library/ShaderCache/7/7ec58260a77b74fd8f891157f14e6707.bin
new file mode 100644
index 0000000000000000000000000000000000000000..54856d2ae2b0e81396671d30cca592babde69cd1
Binary files /dev/null and b/Library/ShaderCache/7/7ec58260a77b74fd8f891157f14e6707.bin differ
diff --git a/Library/ShaderCache/7/7f71f67cb9791f744409aa03029852b6.bin b/Library/ShaderCache/7/7f71f67cb9791f744409aa03029852b6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ad466fdcaa55f6fd569e6d77bca33d99fef72886
Binary files /dev/null and b/Library/ShaderCache/7/7f71f67cb9791f744409aa03029852b6.bin differ
diff --git a/Library/ShaderCache/7/7fdce38c7c688c87d1907bc43ec49f24.bin b/Library/ShaderCache/7/7fdce38c7c688c87d1907bc43ec49f24.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e3a95bccd6eca7279e3f1b0e86025b34e2add854
Binary files /dev/null and b/Library/ShaderCache/7/7fdce38c7c688c87d1907bc43ec49f24.bin differ
diff --git a/Library/ShaderCache/8/8029ad619e9be7a1ef0b5ef21f93e437.bin b/Library/ShaderCache/8/8029ad619e9be7a1ef0b5ef21f93e437.bin
new file mode 100644
index 0000000000000000000000000000000000000000..001ca6f26cf036576a15c03e4760b81f4e544958
Binary files /dev/null and b/Library/ShaderCache/8/8029ad619e9be7a1ef0b5ef21f93e437.bin differ
diff --git a/Library/ShaderCache/8/805814ccbfef71ca40188e7a5b4ae64c.bin b/Library/ShaderCache/8/805814ccbfef71ca40188e7a5b4ae64c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e578ece27fdfbf0960385b17098ee7cdbdbb1cb6
Binary files /dev/null and b/Library/ShaderCache/8/805814ccbfef71ca40188e7a5b4ae64c.bin differ
diff --git a/Library/ShaderCache/8/8162fc3ef77be847265c28ca377f1fd7.bin b/Library/ShaderCache/8/8162fc3ef77be847265c28ca377f1fd7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b8430129bd0351b9e2f0e35dd8b6a6a9274504d9
Binary files /dev/null and b/Library/ShaderCache/8/8162fc3ef77be847265c28ca377f1fd7.bin differ
diff --git a/Library/ShaderCache/8/8406d072545ff1350b23c3fcb8bf5828.bin b/Library/ShaderCache/8/8406d072545ff1350b23c3fcb8bf5828.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b951ea11d603264604269f1162e665b8b22176b1
Binary files /dev/null and b/Library/ShaderCache/8/8406d072545ff1350b23c3fcb8bf5828.bin differ
diff --git a/Library/ShaderCache/8/841497dfe8df60f45f9fe291b17d2b1d.bin b/Library/ShaderCache/8/841497dfe8df60f45f9fe291b17d2b1d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5b124fd0c479eda0f8f9fe7ac47ef0e84ab6790f
Binary files /dev/null and b/Library/ShaderCache/8/841497dfe8df60f45f9fe291b17d2b1d.bin differ
diff --git a/Library/ShaderCache/8/842f7f466b7a4695dba2b08548285dbf.bin b/Library/ShaderCache/8/842f7f466b7a4695dba2b08548285dbf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3bdb45bbce8008f39ffc26f1088872f3dc5ef57d
Binary files /dev/null and b/Library/ShaderCache/8/842f7f466b7a4695dba2b08548285dbf.bin differ
diff --git a/Library/ShaderCache/8/847f489142129f2bd443804be12e78cd.bin b/Library/ShaderCache/8/847f489142129f2bd443804be12e78cd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..eca43774717be345cb5b397189506a0e02007c7a
Binary files /dev/null and b/Library/ShaderCache/8/847f489142129f2bd443804be12e78cd.bin differ
diff --git a/Library/ShaderCache/8/84b6ff091cc83227a039110becbb6403.bin b/Library/ShaderCache/8/84b6ff091cc83227a039110becbb6403.bin
new file mode 100644
index 0000000000000000000000000000000000000000..02c6f0b887349cc4f4e682bb37f82a0a1aeedacb
Binary files /dev/null and b/Library/ShaderCache/8/84b6ff091cc83227a039110becbb6403.bin differ
diff --git a/Library/ShaderCache/8/8657b69f472114bcb1b8c166b8a3538d.bin b/Library/ShaderCache/8/8657b69f472114bcb1b8c166b8a3538d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..346b08e892e4eb7d7de5906005bf0231456a8f70
Binary files /dev/null and b/Library/ShaderCache/8/8657b69f472114bcb1b8c166b8a3538d.bin differ
diff --git a/Library/ShaderCache/8/86e8c8f368da55b132dfc0788b62f67d.bin b/Library/ShaderCache/8/86e8c8f368da55b132dfc0788b62f67d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e55569de3eec8b02784a33450daa4500f7c6188a
Binary files /dev/null and b/Library/ShaderCache/8/86e8c8f368da55b132dfc0788b62f67d.bin differ
diff --git a/Library/ShaderCache/8/87c27716ed0d2a3f3d10f637217eaabf.bin b/Library/ShaderCache/8/87c27716ed0d2a3f3d10f637217eaabf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..aa3a14b971493a57b0fd53e9f6b0759c190b0f8a
Binary files /dev/null and b/Library/ShaderCache/8/87c27716ed0d2a3f3d10f637217eaabf.bin differ
diff --git a/Library/ShaderCache/8/88894615dc37137301a2ae3de0e5f759.bin b/Library/ShaderCache/8/88894615dc37137301a2ae3de0e5f759.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a4f0d15dbf72460d6fd85cb9987d2115daf134bb
Binary files /dev/null and b/Library/ShaderCache/8/88894615dc37137301a2ae3de0e5f759.bin differ
diff --git a/Library/ShaderCache/8/888f0777a08535aeb1078c1c602b38d4.bin b/Library/ShaderCache/8/888f0777a08535aeb1078c1c602b38d4.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4a4eb98aa8facc4fddde6483e96c4962064fdd6e
Binary files /dev/null and b/Library/ShaderCache/8/888f0777a08535aeb1078c1c602b38d4.bin differ
diff --git a/Library/ShaderCache/8/896745b483773b4697490b2c57ceb628.bin b/Library/ShaderCache/8/896745b483773b4697490b2c57ceb628.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c11b1aa2b1cfac1b0e9c1a992de72a9695cced96
Binary files /dev/null and b/Library/ShaderCache/8/896745b483773b4697490b2c57ceb628.bin differ
diff --git a/Library/ShaderCache/8/896acc7bf6395a987af6dcc1e5fabdbc.bin b/Library/ShaderCache/8/896acc7bf6395a987af6dcc1e5fabdbc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ea106ecd27bdde8a231b9d7a87733000437be94e
Binary files /dev/null and b/Library/ShaderCache/8/896acc7bf6395a987af6dcc1e5fabdbc.bin differ
diff --git a/Library/ShaderCache/8/8b004b72918cdab249e5a86135dfa1d2.bin b/Library/ShaderCache/8/8b004b72918cdab249e5a86135dfa1d2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3eb32fda1d57e20bd3727db0f0c1697740254a4d
Binary files /dev/null and b/Library/ShaderCache/8/8b004b72918cdab249e5a86135dfa1d2.bin differ
diff --git a/Library/ShaderCache/8/8b5ab61e62d6a8e38af996e524bbc8ce.bin b/Library/ShaderCache/8/8b5ab61e62d6a8e38af996e524bbc8ce.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3ac7e4d74aa8dd68dfb6d407282b3fd5e0353198
Binary files /dev/null and b/Library/ShaderCache/8/8b5ab61e62d6a8e38af996e524bbc8ce.bin differ
diff --git a/Library/ShaderCache/8/8ba04597b5f3b2810fa697767d7e8dca.bin b/Library/ShaderCache/8/8ba04597b5f3b2810fa697767d7e8dca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e9ee7889cf5e96392d3eab8eb59ed4fc171a23e4
Binary files /dev/null and b/Library/ShaderCache/8/8ba04597b5f3b2810fa697767d7e8dca.bin differ
diff --git a/Library/ShaderCache/8/8bab515df35e47a1fb3fe5843ea550d7.bin b/Library/ShaderCache/8/8bab515df35e47a1fb3fe5843ea550d7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d8e7f809ab835c4f03ae19f5c3ca766e4ee664b7
Binary files /dev/null and b/Library/ShaderCache/8/8bab515df35e47a1fb3fe5843ea550d7.bin differ
diff --git a/Library/ShaderCache/8/8bff3b4f4b57e1af062bbe0b8e44ecd2.bin b/Library/ShaderCache/8/8bff3b4f4b57e1af062bbe0b8e44ecd2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a471292ed41abcb76aa0984e31c9e7c6298e4576
Binary files /dev/null and b/Library/ShaderCache/8/8bff3b4f4b57e1af062bbe0b8e44ecd2.bin differ
diff --git a/Library/ShaderCache/8/8c6e9a1ec43c2f3d3b06b683e24b1371.bin b/Library/ShaderCache/8/8c6e9a1ec43c2f3d3b06b683e24b1371.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2ad1ed4423950af131728734cb5fbf8dd4cc5f7e
Binary files /dev/null and b/Library/ShaderCache/8/8c6e9a1ec43c2f3d3b06b683e24b1371.bin differ
diff --git a/Library/ShaderCache/8/8ce26795281f73be1ab8a9de5ad29555.bin b/Library/ShaderCache/8/8ce26795281f73be1ab8a9de5ad29555.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c46c5d6c5746cd6fd1dd9142aa61b0c26ce3b217
Binary files /dev/null and b/Library/ShaderCache/8/8ce26795281f73be1ab8a9de5ad29555.bin differ
diff --git a/Library/ShaderCache/8/8e0027d18bebf8c9cdb968d1aaf2a6bf.bin b/Library/ShaderCache/8/8e0027d18bebf8c9cdb968d1aaf2a6bf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b812cc115d0df2c2ddfd2314f90443021a8b670d
Binary files /dev/null and b/Library/ShaderCache/8/8e0027d18bebf8c9cdb968d1aaf2a6bf.bin differ
diff --git a/Library/ShaderCache/8/8e188fd272a5132c780f7e9623fa78dc.bin b/Library/ShaderCache/8/8e188fd272a5132c780f7e9623fa78dc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f42b4ec10f0f0a1a785a19c8aa7c8c02dc266012
Binary files /dev/null and b/Library/ShaderCache/8/8e188fd272a5132c780f7e9623fa78dc.bin differ
diff --git a/Library/ShaderCache/8/8e45657099da08044f76096064a030f8.bin b/Library/ShaderCache/8/8e45657099da08044f76096064a030f8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a3052516f703586c0aaffca0f8ad6d74ba91eb43
Binary files /dev/null and b/Library/ShaderCache/8/8e45657099da08044f76096064a030f8.bin differ
diff --git a/Library/ShaderCache/8/8eda2131b59744680d315c8c7a30288e.bin b/Library/ShaderCache/8/8eda2131b59744680d315c8c7a30288e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..14db329394dbbff219cbfa2844f8e563ae911bba
Binary files /dev/null and b/Library/ShaderCache/8/8eda2131b59744680d315c8c7a30288e.bin differ
diff --git a/Library/ShaderCache/8/8fc62bad26b8ca2638f3a5bc99b1e3a7.bin b/Library/ShaderCache/8/8fc62bad26b8ca2638f3a5bc99b1e3a7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bb1c253d5a9859023b0c96e248a43285c141c934
Binary files /dev/null and b/Library/ShaderCache/8/8fc62bad26b8ca2638f3a5bc99b1e3a7.bin differ
diff --git a/Library/ShaderCache/9/921795076d71e65689cfa9c328c0fd49.bin b/Library/ShaderCache/9/921795076d71e65689cfa9c328c0fd49.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2c5b3528cbb89f2ffbff573ada14a181bce84e3c
Binary files /dev/null and b/Library/ShaderCache/9/921795076d71e65689cfa9c328c0fd49.bin differ
diff --git a/Library/ShaderCache/9/939fd9c04bdf180eed5b822904c7d928.bin b/Library/ShaderCache/9/939fd9c04bdf180eed5b822904c7d928.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dc397709adedde9215aebc80aa24f7d9fed6c2a3
Binary files /dev/null and b/Library/ShaderCache/9/939fd9c04bdf180eed5b822904c7d928.bin differ
diff --git a/Library/ShaderCache/9/9491566c74f22f6ccd4e5d6c0ecaad70.bin b/Library/ShaderCache/9/9491566c74f22f6ccd4e5d6c0ecaad70.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7de1d2cba12acf234a9a1574b4b0267d8ac9ff3f
Binary files /dev/null and b/Library/ShaderCache/9/9491566c74f22f6ccd4e5d6c0ecaad70.bin differ
diff --git a/Library/ShaderCache/9/94c6fb76b6277104cf5a10b0bc62a564.bin b/Library/ShaderCache/9/94c6fb76b6277104cf5a10b0bc62a564.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7f77de8434f36c195c7c5d1a70a00309ba4e8c8e
Binary files /dev/null and b/Library/ShaderCache/9/94c6fb76b6277104cf5a10b0bc62a564.bin differ
diff --git a/Library/ShaderCache/9/95097f9081c6b31fdae6ad45b36b9dfb.bin b/Library/ShaderCache/9/95097f9081c6b31fdae6ad45b36b9dfb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3d075d7b8d4d1a42f77ce5ebc04fd1404d810e26
Binary files /dev/null and b/Library/ShaderCache/9/95097f9081c6b31fdae6ad45b36b9dfb.bin differ
diff --git a/Library/ShaderCache/9/9530ff16bd4a6984bb932776ece898d9.bin b/Library/ShaderCache/9/9530ff16bd4a6984bb932776ece898d9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e62460b5d6f4e55943370785f309e8b21a296edc
Binary files /dev/null and b/Library/ShaderCache/9/9530ff16bd4a6984bb932776ece898d9.bin differ
diff --git a/Library/ShaderCache/9/953a1c7477ffbaa9f7e7ef9c789da909.bin b/Library/ShaderCache/9/953a1c7477ffbaa9f7e7ef9c789da909.bin
new file mode 100644
index 0000000000000000000000000000000000000000..12913e6c461c64f58bfbcaecbc9a10875cfd0af5
Binary files /dev/null and b/Library/ShaderCache/9/953a1c7477ffbaa9f7e7ef9c789da909.bin differ
diff --git a/Library/ShaderCache/9/962837dc9d4f627e4ba5e7a094faa2d6.bin b/Library/ShaderCache/9/962837dc9d4f627e4ba5e7a094faa2d6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..974a263b64242d193dcb1011d165f5934876cb20
Binary files /dev/null and b/Library/ShaderCache/9/962837dc9d4f627e4ba5e7a094faa2d6.bin differ
diff --git a/Library/ShaderCache/9/97778a99baa03144b292526b0e87b61c.bin b/Library/ShaderCache/9/97778a99baa03144b292526b0e87b61c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ffaa7d7bbe19c2e4665b3bb0ff601aa1d24de0c9
Binary files /dev/null and b/Library/ShaderCache/9/97778a99baa03144b292526b0e87b61c.bin differ
diff --git a/Library/ShaderCache/9/97f8ddbeea03647778d41d926870f9a8.bin b/Library/ShaderCache/9/97f8ddbeea03647778d41d926870f9a8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f42b4ec10f0f0a1a785a19c8aa7c8c02dc266012
Binary files /dev/null and b/Library/ShaderCache/9/97f8ddbeea03647778d41d926870f9a8.bin differ
diff --git a/Library/ShaderCache/9/989fe8fe93b45a4547ca6f64351111c2.bin b/Library/ShaderCache/9/989fe8fe93b45a4547ca6f64351111c2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..276fec2f618aee27641b5050eaf2b58e5fc064ab
Binary files /dev/null and b/Library/ShaderCache/9/989fe8fe93b45a4547ca6f64351111c2.bin differ
diff --git a/Library/ShaderCache/9/98d0b580a81e82d7a9dab72946fb3bab.bin b/Library/ShaderCache/9/98d0b580a81e82d7a9dab72946fb3bab.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ebbc5ff16a86b1dbfeac3dbdc0992e7e2fb1bfdc
Binary files /dev/null and b/Library/ShaderCache/9/98d0b580a81e82d7a9dab72946fb3bab.bin differ
diff --git a/Library/ShaderCache/9/9914948a28fbceeb1c734df62e45eda6.bin b/Library/ShaderCache/9/9914948a28fbceeb1c734df62e45eda6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bd8269c5c22b1fc1972bc47cfd94872ade31d241
Binary files /dev/null and b/Library/ShaderCache/9/9914948a28fbceeb1c734df62e45eda6.bin differ
diff --git a/Library/ShaderCache/9/99b76e4523b8ec56b04c70a39f4f1bf1.bin b/Library/ShaderCache/9/99b76e4523b8ec56b04c70a39f4f1bf1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f50bf49fdf3ac5b053f55aa3c1b499ddbd66b7f5
Binary files /dev/null and b/Library/ShaderCache/9/99b76e4523b8ec56b04c70a39f4f1bf1.bin differ
diff --git a/Library/ShaderCache/9/99d4bc4934f77ddbc914224f5dfb8336.bin b/Library/ShaderCache/9/99d4bc4934f77ddbc914224f5dfb8336.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0bd6ba0a779643d441a9b9653581febb2ad34237
Binary files /dev/null and b/Library/ShaderCache/9/99d4bc4934f77ddbc914224f5dfb8336.bin differ
diff --git a/Library/ShaderCache/9/99e7edde6758e506a17619d189b1c560.bin b/Library/ShaderCache/9/99e7edde6758e506a17619d189b1c560.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2c4c4adf099812b573b52b5575b3079a63aa7c74
Binary files /dev/null and b/Library/ShaderCache/9/99e7edde6758e506a17619d189b1c560.bin differ
diff --git a/Library/ShaderCache/9/9a61177f217dd55fc747e95eb82b6abc.bin b/Library/ShaderCache/9/9a61177f217dd55fc747e95eb82b6abc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..395d45f829d593b665af7825a9ea7c72f902f99e
Binary files /dev/null and b/Library/ShaderCache/9/9a61177f217dd55fc747e95eb82b6abc.bin differ
diff --git a/Library/ShaderCache/9/9b130878574e9c356f008f2a57220bca.bin b/Library/ShaderCache/9/9b130878574e9c356f008f2a57220bca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..249796190b0420440f191aa5be21b9496edb9fd3
Binary files /dev/null and b/Library/ShaderCache/9/9b130878574e9c356f008f2a57220bca.bin differ
diff --git a/Library/ShaderCache/9/9b74cbed610a15d301f069270b73df85.bin b/Library/ShaderCache/9/9b74cbed610a15d301f069270b73df85.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2163868f97f4dd33d1471739a64831394478404e
Binary files /dev/null and b/Library/ShaderCache/9/9b74cbed610a15d301f069270b73df85.bin differ
diff --git a/Library/ShaderCache/9/9c54a06c443c46233daa095b224f76c5.bin b/Library/ShaderCache/9/9c54a06c443c46233daa095b224f76c5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..441c048f199f5a0a071a8a56d690709eae0d3754
Binary files /dev/null and b/Library/ShaderCache/9/9c54a06c443c46233daa095b224f76c5.bin differ
diff --git a/Library/ShaderCache/9/9d389c852b2d995be190c32fa68d159f.bin b/Library/ShaderCache/9/9d389c852b2d995be190c32fa68d159f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1e2ed6d5898af644967bc3cd8e198c2eac1699a3
Binary files /dev/null and b/Library/ShaderCache/9/9d389c852b2d995be190c32fa68d159f.bin differ
diff --git a/Library/ShaderCache/9/9d4ef742df49bd0c41411b0c47f4e0a0.bin b/Library/ShaderCache/9/9d4ef742df49bd0c41411b0c47f4e0a0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..235276b9e7b0a7c616205044614d75a30b66d6e3
Binary files /dev/null and b/Library/ShaderCache/9/9d4ef742df49bd0c41411b0c47f4e0a0.bin differ
diff --git a/Library/ShaderCache/9/9e2ef6b12cb21778dcda07302057a1c7.bin b/Library/ShaderCache/9/9e2ef6b12cb21778dcda07302057a1c7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1939bf6fd537256f4bd65b0b7e935eeb98d27bfa
Binary files /dev/null and b/Library/ShaderCache/9/9e2ef6b12cb21778dcda07302057a1c7.bin differ
diff --git a/Library/ShaderCache/9/9e40ecee2bc0d919c2d20a8584a3dfa4.bin b/Library/ShaderCache/9/9e40ecee2bc0d919c2d20a8584a3dfa4.bin
new file mode 100644
index 0000000000000000000000000000000000000000..049e2b9bff5f71e862e996c85efd4d7a8b5aaa18
Binary files /dev/null and b/Library/ShaderCache/9/9e40ecee2bc0d919c2d20a8584a3dfa4.bin differ
diff --git a/Library/ShaderCache/9/9e531cea65da6ecdaf0e8f311201d019.bin b/Library/ShaderCache/9/9e531cea65da6ecdaf0e8f311201d019.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8f5a98508b0f3843cb525bdb317db51991450d28
Binary files /dev/null and b/Library/ShaderCache/9/9e531cea65da6ecdaf0e8f311201d019.bin differ
diff --git a/Library/ShaderCache/9/9f261ad45b4b06a6208f74b99f4f4df6.bin b/Library/ShaderCache/9/9f261ad45b4b06a6208f74b99f4f4df6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..416697d4d35d2ce592a4e05d1f6ad69224eb0747
Binary files /dev/null and b/Library/ShaderCache/9/9f261ad45b4b06a6208f74b99f4f4df6.bin differ
diff --git a/Library/ShaderCache/9/9f5c4775bf17a2350f7cb5342c1d7c90.bin b/Library/ShaderCache/9/9f5c4775bf17a2350f7cb5342c1d7c90.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e28cbfab94ccd8d419fe60f02fb6e23e672450e2
Binary files /dev/null and b/Library/ShaderCache/9/9f5c4775bf17a2350f7cb5342c1d7c90.bin differ
diff --git a/Library/ShaderCache/a/a07a94027b46b7fe8e6e99da6eadca7d.bin b/Library/ShaderCache/a/a07a94027b46b7fe8e6e99da6eadca7d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6205b7e2580f5bbeed0daaf29bbc1d67612ca180
Binary files /dev/null and b/Library/ShaderCache/a/a07a94027b46b7fe8e6e99da6eadca7d.bin differ
diff --git a/Library/ShaderCache/a/a08053e248c22abea40520aca7abcc8a.bin b/Library/ShaderCache/a/a08053e248c22abea40520aca7abcc8a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f5856d77150745698e200d004ec4b70d30efdf76
Binary files /dev/null and b/Library/ShaderCache/a/a08053e248c22abea40520aca7abcc8a.bin differ
diff --git a/Library/ShaderCache/a/a0895a5bf773485c343f5ae4d5688e6f.bin b/Library/ShaderCache/a/a0895a5bf773485c343f5ae4d5688e6f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c091e737cb86a2c248938625d390d7d59eb5571c
Binary files /dev/null and b/Library/ShaderCache/a/a0895a5bf773485c343f5ae4d5688e6f.bin differ
diff --git a/Library/ShaderCache/a/a116a0d764d92c95c5e2354550540099.bin b/Library/ShaderCache/a/a116a0d764d92c95c5e2354550540099.bin
new file mode 100644
index 0000000000000000000000000000000000000000..785b776f56e6db1ada8ec1c6e8a3979a151d80f9
Binary files /dev/null and b/Library/ShaderCache/a/a116a0d764d92c95c5e2354550540099.bin differ
diff --git a/Library/ShaderCache/a/a1ae7b00a0e44fc12365e9440e4b6279.bin b/Library/ShaderCache/a/a1ae7b00a0e44fc12365e9440e4b6279.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1a7d5f5399f8cb1e7af64584665db1ff31c24b89
Binary files /dev/null and b/Library/ShaderCache/a/a1ae7b00a0e44fc12365e9440e4b6279.bin differ
diff --git a/Library/ShaderCache/a/a2ef1895ae6bfd984c8c357613debd5c.bin b/Library/ShaderCache/a/a2ef1895ae6bfd984c8c357613debd5c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5c679b6bbfab7e7c02246dc58277b947c3ec18a9
Binary files /dev/null and b/Library/ShaderCache/a/a2ef1895ae6bfd984c8c357613debd5c.bin differ
diff --git a/Library/ShaderCache/a/a3014e601d31cd6d057f4a0706573fdf.bin b/Library/ShaderCache/a/a3014e601d31cd6d057f4a0706573fdf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..776cdd1cac1c97fa223c4356b5e2741f6aa58cc9
Binary files /dev/null and b/Library/ShaderCache/a/a3014e601d31cd6d057f4a0706573fdf.bin differ
diff --git a/Library/ShaderCache/a/a475ad62ced29e982167ec1c87f43f75.bin b/Library/ShaderCache/a/a475ad62ced29e982167ec1c87f43f75.bin
new file mode 100644
index 0000000000000000000000000000000000000000..02e950095a222d59d0d090117cd8b472b75a22b8
Binary files /dev/null and b/Library/ShaderCache/a/a475ad62ced29e982167ec1c87f43f75.bin differ
diff --git a/Library/ShaderCache/a/a4ab761562fa57e07c22ecfd92e059a8.bin b/Library/ShaderCache/a/a4ab761562fa57e07c22ecfd92e059a8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bdb157eb095b5c1a69484086847202ca8d8e16a3
Binary files /dev/null and b/Library/ShaderCache/a/a4ab761562fa57e07c22ecfd92e059a8.bin differ
diff --git a/Library/ShaderCache/a/a4c32b00eb389b235befffd71a29abcf.bin b/Library/ShaderCache/a/a4c32b00eb389b235befffd71a29abcf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d312f0f1da665ad563d2dd1e7cd1e514548c2323
Binary files /dev/null and b/Library/ShaderCache/a/a4c32b00eb389b235befffd71a29abcf.bin differ
diff --git a/Library/ShaderCache/a/a66f525554e689d2e9297d1176993ee6.bin b/Library/ShaderCache/a/a66f525554e689d2e9297d1176993ee6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..43b33944fc0c63cc5cf18ebefe55e80d03356bf2
Binary files /dev/null and b/Library/ShaderCache/a/a66f525554e689d2e9297d1176993ee6.bin differ
diff --git a/Library/ShaderCache/a/a6d5693d4f79f4fb9ad65c6b4d88fc37.bin b/Library/ShaderCache/a/a6d5693d4f79f4fb9ad65c6b4d88fc37.bin
new file mode 100644
index 0000000000000000000000000000000000000000..06f9a62e81fe549cdf42dd10b267a9a083096800
Binary files /dev/null and b/Library/ShaderCache/a/a6d5693d4f79f4fb9ad65c6b4d88fc37.bin differ
diff --git a/Library/ShaderCache/a/a7313a4c68a9e059611f71095593c5c8.bin b/Library/ShaderCache/a/a7313a4c68a9e059611f71095593c5c8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b945d22a684c1cb3fe88550c6074541f6843e1f6
Binary files /dev/null and b/Library/ShaderCache/a/a7313a4c68a9e059611f71095593c5c8.bin differ
diff --git a/Library/ShaderCache/a/a75ab50e35655fbb0daad91ee8edeaa5.bin b/Library/ShaderCache/a/a75ab50e35655fbb0daad91ee8edeaa5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2027d768d922caccd18c6a3baa2719eb537ac513
Binary files /dev/null and b/Library/ShaderCache/a/a75ab50e35655fbb0daad91ee8edeaa5.bin differ
diff --git a/Library/ShaderCache/a/a75bb7f6e770c31fe86e09f563adc3f1.bin b/Library/ShaderCache/a/a75bb7f6e770c31fe86e09f563adc3f1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bd9f7ff7c401b48edfb6c4a18008989239bea73f
Binary files /dev/null and b/Library/ShaderCache/a/a75bb7f6e770c31fe86e09f563adc3f1.bin differ
diff --git a/Library/ShaderCache/a/a90d11a4678edc55c23e786e3a90de87.bin b/Library/ShaderCache/a/a90d11a4678edc55c23e786e3a90de87.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3bdb45bbce8008f39ffc26f1088872f3dc5ef57d
Binary files /dev/null and b/Library/ShaderCache/a/a90d11a4678edc55c23e786e3a90de87.bin differ
diff --git a/Library/ShaderCache/a/aa25180345679d1f7d97b13f76506379.bin b/Library/ShaderCache/a/aa25180345679d1f7d97b13f76506379.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e546154bc1b83560d44e99fee5b6b9f7a5bf267d
Binary files /dev/null and b/Library/ShaderCache/a/aa25180345679d1f7d97b13f76506379.bin differ
diff --git a/Library/ShaderCache/a/aa8c8c2e7ebf9610db614f971d3e6ff1.bin b/Library/ShaderCache/a/aa8c8c2e7ebf9610db614f971d3e6ff1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ed7a9951cd0357495a31c3d78ecf674b6e903e98
Binary files /dev/null and b/Library/ShaderCache/a/aa8c8c2e7ebf9610db614f971d3e6ff1.bin differ
diff --git a/Library/ShaderCache/a/aa9a7027465b70ae70a2b78478a47674.bin b/Library/ShaderCache/a/aa9a7027465b70ae70a2b78478a47674.bin
new file mode 100644
index 0000000000000000000000000000000000000000..44164ec4d43cfa755653dbf2fbfe39d02d265264
Binary files /dev/null and b/Library/ShaderCache/a/aa9a7027465b70ae70a2b78478a47674.bin differ
diff --git a/Library/ShaderCache/a/aab7f3323e03000421c2907e593645e8.bin b/Library/ShaderCache/a/aab7f3323e03000421c2907e593645e8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bf2d97cccd56ffe993ae2402ad7a898c1e86dff7
Binary files /dev/null and b/Library/ShaderCache/a/aab7f3323e03000421c2907e593645e8.bin differ
diff --git a/Library/ShaderCache/a/aaf2280214b7b003c4ed49a0c8964e2a.bin b/Library/ShaderCache/a/aaf2280214b7b003c4ed49a0c8964e2a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24188abb15a9f382567eb688388c909e4e2844f5
Binary files /dev/null and b/Library/ShaderCache/a/aaf2280214b7b003c4ed49a0c8964e2a.bin differ
diff --git a/Library/ShaderCache/a/ab717f5ab6ec6d97ed0d22f7ac95e4d2.bin b/Library/ShaderCache/a/ab717f5ab6ec6d97ed0d22f7ac95e4d2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..37bd79c7a482faedbeb02a643aebb349909448df
Binary files /dev/null and b/Library/ShaderCache/a/ab717f5ab6ec6d97ed0d22f7ac95e4d2.bin differ
diff --git a/Library/ShaderCache/a/ab930ecbed9db48f1c970def233ba343.bin b/Library/ShaderCache/a/ab930ecbed9db48f1c970def233ba343.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4a00320ab8bb3348ed15a34679632ea55ea2bb60
Binary files /dev/null and b/Library/ShaderCache/a/ab930ecbed9db48f1c970def233ba343.bin differ
diff --git a/Library/ShaderCache/a/abf6892a049c6fe01798a6c4b509c00e.bin b/Library/ShaderCache/a/abf6892a049c6fe01798a6c4b509c00e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..061d62e0cd6b59e770f07a716343da0cae714a29
Binary files /dev/null and b/Library/ShaderCache/a/abf6892a049c6fe01798a6c4b509c00e.bin differ
diff --git a/Library/ShaderCache/a/ac5f33854b6b2d69b729f655c3b9deba.bin b/Library/ShaderCache/a/ac5f33854b6b2d69b729f655c3b9deba.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bd80ef5f97b467288a2ade26e8fbd082f41955e1
Binary files /dev/null and b/Library/ShaderCache/a/ac5f33854b6b2d69b729f655c3b9deba.bin differ
diff --git a/Library/ShaderCache/a/ad57f9b7e62d527f606a6a786fdbc3bb.bin b/Library/ShaderCache/a/ad57f9b7e62d527f606a6a786fdbc3bb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..067ec340940e9cdbbbffaf872095319a4352614f
Binary files /dev/null and b/Library/ShaderCache/a/ad57f9b7e62d527f606a6a786fdbc3bb.bin differ
diff --git a/Library/ShaderCache/a/ada593f9d9e583136100914841e3ff7f.bin b/Library/ShaderCache/a/ada593f9d9e583136100914841e3ff7f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..241e2b89a3f5f3494a7df89513a772f5f2a132e5
Binary files /dev/null and b/Library/ShaderCache/a/ada593f9d9e583136100914841e3ff7f.bin differ
diff --git a/Library/ShaderCache/a/adbc115e82e663b6bc80890eb78f529b.bin b/Library/ShaderCache/a/adbc115e82e663b6bc80890eb78f529b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2ad222c9271cc96954d78868e272ff24dbd0761b
Binary files /dev/null and b/Library/ShaderCache/a/adbc115e82e663b6bc80890eb78f529b.bin differ
diff --git a/Library/ShaderCache/a/ae4630aec16edb7cdbd6edbcab1c7388.bin b/Library/ShaderCache/a/ae4630aec16edb7cdbd6edbcab1c7388.bin
new file mode 100644
index 0000000000000000000000000000000000000000..22b70da08baa71e102875ce25e6d965ffc7ff5d5
Binary files /dev/null and b/Library/ShaderCache/a/ae4630aec16edb7cdbd6edbcab1c7388.bin differ
diff --git a/Library/ShaderCache/a/ae927eb40e2da976e7a6a0d6e3924b01.bin b/Library/ShaderCache/a/ae927eb40e2da976e7a6a0d6e3924b01.bin
new file mode 100644
index 0000000000000000000000000000000000000000..39bd0f2128e005372521a10c3fa252069f731921
Binary files /dev/null and b/Library/ShaderCache/a/ae927eb40e2da976e7a6a0d6e3924b01.bin differ
diff --git a/Library/ShaderCache/a/aee690ac9e0ca75e6504120d5354dfec.bin b/Library/ShaderCache/a/aee690ac9e0ca75e6504120d5354dfec.bin
new file mode 100644
index 0000000000000000000000000000000000000000..291bcb455ef4498baa1cd0d99c567e116925a6fc
Binary files /dev/null and b/Library/ShaderCache/a/aee690ac9e0ca75e6504120d5354dfec.bin differ
diff --git a/Library/ShaderCache/a/af9080be6399d523bfb68bb3445b13ba.bin b/Library/ShaderCache/a/af9080be6399d523bfb68bb3445b13ba.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8809b66435de4e92f752870ca44addfa36ce3446
Binary files /dev/null and b/Library/ShaderCache/a/af9080be6399d523bfb68bb3445b13ba.bin differ
diff --git a/Library/ShaderCache/b/b13f0a33e49811998224ec942a34cbae.bin b/Library/ShaderCache/b/b13f0a33e49811998224ec942a34cbae.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ab04052e5905542ae608f95096c99050bd2c41da
Binary files /dev/null and b/Library/ShaderCache/b/b13f0a33e49811998224ec942a34cbae.bin differ
diff --git a/Library/ShaderCache/b/b2902a95f031ac884f992007d89bc635.bin b/Library/ShaderCache/b/b2902a95f031ac884f992007d89bc635.bin
new file mode 100644
index 0000000000000000000000000000000000000000..61cf1a47d9b9be5c820a6ccc5cf3f8162dbc844b
Binary files /dev/null and b/Library/ShaderCache/b/b2902a95f031ac884f992007d89bc635.bin differ
diff --git a/Library/ShaderCache/b/b4ca0a765586ddd87534bf2909b3f7d1.bin b/Library/ShaderCache/b/b4ca0a765586ddd87534bf2909b3f7d1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24d15fe5dd5a7d19f4932b5af74734ebe2a9ecba
Binary files /dev/null and b/Library/ShaderCache/b/b4ca0a765586ddd87534bf2909b3f7d1.bin differ
diff --git a/Library/ShaderCache/b/b56aceaafdb51bfd19ab47ee69cfc113.bin b/Library/ShaderCache/b/b56aceaafdb51bfd19ab47ee69cfc113.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d135b28e4af07e865cd525ebfbe0c5b7f190be48
Binary files /dev/null and b/Library/ShaderCache/b/b56aceaafdb51bfd19ab47ee69cfc113.bin differ
diff --git a/Library/ShaderCache/b/b5cb935ff33f1ebce9d6c93e8f46706a.bin b/Library/ShaderCache/b/b5cb935ff33f1ebce9d6c93e8f46706a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fbb1c556d7abb36d556bf9999dfdfeb95799fd7a
Binary files /dev/null and b/Library/ShaderCache/b/b5cb935ff33f1ebce9d6c93e8f46706a.bin differ
diff --git a/Library/ShaderCache/b/b61606b3f9de6bb12be16abfeaac9e28.bin b/Library/ShaderCache/b/b61606b3f9de6bb12be16abfeaac9e28.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7bd6ad6a9bca7231c96fa08f51bc450841146abc
Binary files /dev/null and b/Library/ShaderCache/b/b61606b3f9de6bb12be16abfeaac9e28.bin differ
diff --git a/Library/ShaderCache/b/b634faaa351a58c592111c13f1095e3c.bin b/Library/ShaderCache/b/b634faaa351a58c592111c13f1095e3c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..772252fbe21a037c994d93828233d44df8430474
Binary files /dev/null and b/Library/ShaderCache/b/b634faaa351a58c592111c13f1095e3c.bin differ
diff --git a/Library/ShaderCache/b/b66569a108e27d5164cbb2fd8259a7fc.bin b/Library/ShaderCache/b/b66569a108e27d5164cbb2fd8259a7fc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e231467055b6100eb43030e3a8e098f524d01f86
Binary files /dev/null and b/Library/ShaderCache/b/b66569a108e27d5164cbb2fd8259a7fc.bin differ
diff --git a/Library/ShaderCache/b/b7373f612efed24b8e1fdd9d4a1ccc7b.bin b/Library/ShaderCache/b/b7373f612efed24b8e1fdd9d4a1ccc7b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e414d2c96deca711666c23ccaf5a866d72f0dedb
Binary files /dev/null and b/Library/ShaderCache/b/b7373f612efed24b8e1fdd9d4a1ccc7b.bin differ
diff --git a/Library/ShaderCache/b/b7817986c9f993d4e165ba39525a53f5.bin b/Library/ShaderCache/b/b7817986c9f993d4e165ba39525a53f5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c6eea633a17e63ad0a12745253adb121f893af3e
Binary files /dev/null and b/Library/ShaderCache/b/b7817986c9f993d4e165ba39525a53f5.bin differ
diff --git a/Library/ShaderCache/b/b7c2874f632c01227f3f67f6cc3c5e09.bin b/Library/ShaderCache/b/b7c2874f632c01227f3f67f6cc3c5e09.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8edb9087646a1f36ff635795499836f56c02a178
Binary files /dev/null and b/Library/ShaderCache/b/b7c2874f632c01227f3f67f6cc3c5e09.bin differ
diff --git a/Library/ShaderCache/b/b7c392fd2219e808c6fea97d5635af9f.bin b/Library/ShaderCache/b/b7c392fd2219e808c6fea97d5635af9f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cb9579bb60d5873d709be34800354f37bdf38c02
Binary files /dev/null and b/Library/ShaderCache/b/b7c392fd2219e808c6fea97d5635af9f.bin differ
diff --git a/Library/ShaderCache/b/b85c09591f07b7b15665a22f2ebb627f.bin b/Library/ShaderCache/b/b85c09591f07b7b15665a22f2ebb627f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b9efe6a231224f22cc59722e55bea4bee0f71385
Binary files /dev/null and b/Library/ShaderCache/b/b85c09591f07b7b15665a22f2ebb627f.bin differ
diff --git a/Library/ShaderCache/b/b8b1c19bceb23428153b65efce8ec3d7.bin b/Library/ShaderCache/b/b8b1c19bceb23428153b65efce8ec3d7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d581e93dba540da3873da6a0b6a9c33b9760a55e
Binary files /dev/null and b/Library/ShaderCache/b/b8b1c19bceb23428153b65efce8ec3d7.bin differ
diff --git a/Library/ShaderCache/b/b8f2277664d2624ed4fdff5621698d91.bin b/Library/ShaderCache/b/b8f2277664d2624ed4fdff5621698d91.bin
new file mode 100644
index 0000000000000000000000000000000000000000..89487e1c3937990a7ea561cfbfc9d1fa9f96a5f2
Binary files /dev/null and b/Library/ShaderCache/b/b8f2277664d2624ed4fdff5621698d91.bin differ
diff --git a/Library/ShaderCache/b/b90c30ab32f1ba586eaa87eb67365a56.bin b/Library/ShaderCache/b/b90c30ab32f1ba586eaa87eb67365a56.bin
new file mode 100644
index 0000000000000000000000000000000000000000..92b2fb9325f9c34243d8da105cf3fd00c17b47ef
Binary files /dev/null and b/Library/ShaderCache/b/b90c30ab32f1ba586eaa87eb67365a56.bin differ
diff --git a/Library/ShaderCache/b/b93c056fa8aa829daba51d6831efbab8.bin b/Library/ShaderCache/b/b93c056fa8aa829daba51d6831efbab8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..495d37692d2772f42ff57c6a052b6081ace37fb4
Binary files /dev/null and b/Library/ShaderCache/b/b93c056fa8aa829daba51d6831efbab8.bin differ
diff --git a/Library/ShaderCache/b/b9617fb2a655150b7974d6dcbaea0800.bin b/Library/ShaderCache/b/b9617fb2a655150b7974d6dcbaea0800.bin
new file mode 100644
index 0000000000000000000000000000000000000000..948672abb9dd329d92f150ee833a6db5d81ea990
Binary files /dev/null and b/Library/ShaderCache/b/b9617fb2a655150b7974d6dcbaea0800.bin differ
diff --git a/Library/ShaderCache/b/b98a7caec6b93368877eaf17af075e77.bin b/Library/ShaderCache/b/b98a7caec6b93368877eaf17af075e77.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f2a86ecfcda31a200ac0b44320224e954967fb94
Binary files /dev/null and b/Library/ShaderCache/b/b98a7caec6b93368877eaf17af075e77.bin differ
diff --git a/Library/ShaderCache/b/b99a05fdc176dca257aa151320ce3bb0.bin b/Library/ShaderCache/b/b99a05fdc176dca257aa151320ce3bb0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9aca30e0260865f65b78462fb9f7dc3035ff91a5
Binary files /dev/null and b/Library/ShaderCache/b/b99a05fdc176dca257aa151320ce3bb0.bin differ
diff --git a/Library/ShaderCache/b/b9cab27f1828f8aaec0f1e636a3b7231.bin b/Library/ShaderCache/b/b9cab27f1828f8aaec0f1e636a3b7231.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f42b4ec10f0f0a1a785a19c8aa7c8c02dc266012
Binary files /dev/null and b/Library/ShaderCache/b/b9cab27f1828f8aaec0f1e636a3b7231.bin differ
diff --git a/Library/ShaderCache/b/b9d3a6fad4eecb7339b55ec48727db79.bin b/Library/ShaderCache/b/b9d3a6fad4eecb7339b55ec48727db79.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24188abb15a9f382567eb688388c909e4e2844f5
Binary files /dev/null and b/Library/ShaderCache/b/b9d3a6fad4eecb7339b55ec48727db79.bin differ
diff --git a/Library/ShaderCache/b/bae73602a869102c24c61a9b06d72e7d.bin b/Library/ShaderCache/b/bae73602a869102c24c61a9b06d72e7d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/b/bae73602a869102c24c61a9b06d72e7d.bin differ
diff --git a/Library/ShaderCache/b/bb2b724fdc7a9f3d58c7617d4d250373.bin b/Library/ShaderCache/b/bb2b724fdc7a9f3d58c7617d4d250373.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f50bf49fdf3ac5b053f55aa3c1b499ddbd66b7f5
Binary files /dev/null and b/Library/ShaderCache/b/bb2b724fdc7a9f3d58c7617d4d250373.bin differ
diff --git a/Library/ShaderCache/b/bb750be28bfa7460fbba296f588af3cb.bin b/Library/ShaderCache/b/bb750be28bfa7460fbba296f588af3cb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..116018b6e614ab8f2634049ea39f81062890cf30
Binary files /dev/null and b/Library/ShaderCache/b/bb750be28bfa7460fbba296f588af3cb.bin differ
diff --git a/Library/ShaderCache/b/bbadbc222a4ffad87f165b0cd96cfdb5.bin b/Library/ShaderCache/b/bbadbc222a4ffad87f165b0cd96cfdb5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8212c3dea60e872d58d5cf984331a944400aa046
Binary files /dev/null and b/Library/ShaderCache/b/bbadbc222a4ffad87f165b0cd96cfdb5.bin differ
diff --git a/Library/ShaderCache/b/bbd18b8d1cd832c2e9c5610dd4201c62.bin b/Library/ShaderCache/b/bbd18b8d1cd832c2e9c5610dd4201c62.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b3fb15da08a549ea8b7e851b1c9bfc89d588817d
Binary files /dev/null and b/Library/ShaderCache/b/bbd18b8d1cd832c2e9c5610dd4201c62.bin differ
diff --git a/Library/ShaderCache/b/bc560ff3d9eefb575589b7471fd6f01b.bin b/Library/ShaderCache/b/bc560ff3d9eefb575589b7471fd6f01b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e36d51ba3abf5c113ce0dbee1348555d92040499
Binary files /dev/null and b/Library/ShaderCache/b/bc560ff3d9eefb575589b7471fd6f01b.bin differ
diff --git a/Library/ShaderCache/b/bc604ce5e3d7774efbeab89de4263d51.bin b/Library/ShaderCache/b/bc604ce5e3d7774efbeab89de4263d51.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6e3883a3901612dacb27110e7b1b95d383a28fed
Binary files /dev/null and b/Library/ShaderCache/b/bc604ce5e3d7774efbeab89de4263d51.bin differ
diff --git a/Library/ShaderCache/b/bce162c0fd1b775e015754112e8da681.bin b/Library/ShaderCache/b/bce162c0fd1b775e015754112e8da681.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d3a65b81f1309cf7be70f0448e317a6171b0f84b
Binary files /dev/null and b/Library/ShaderCache/b/bce162c0fd1b775e015754112e8da681.bin differ
diff --git a/Library/ShaderCache/b/bf40c765f6efe9a20102f872243bad5d.bin b/Library/ShaderCache/b/bf40c765f6efe9a20102f872243bad5d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..06a0b63a9d3b73aabfa6d2abd0fbce3804a4d47a
Binary files /dev/null and b/Library/ShaderCache/b/bf40c765f6efe9a20102f872243bad5d.bin differ
diff --git a/Library/ShaderCache/b/bfb166be68b753c1c801d56e5c6b76a1.bin b/Library/ShaderCache/b/bfb166be68b753c1c801d56e5c6b76a1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..253ca90913f0cc1fd80da4b7d109e57531401457
Binary files /dev/null and b/Library/ShaderCache/b/bfb166be68b753c1c801d56e5c6b76a1.bin differ
diff --git a/Library/ShaderCache/b/bfba20371f48405a2d3d9d6c887e5174.bin b/Library/ShaderCache/b/bfba20371f48405a2d3d9d6c887e5174.bin
new file mode 100644
index 0000000000000000000000000000000000000000..aa3a14b971493a57b0fd53e9f6b0759c190b0f8a
Binary files /dev/null and b/Library/ShaderCache/b/bfba20371f48405a2d3d9d6c887e5174.bin differ
diff --git a/Library/ShaderCache/b/bff1191892a62cc4c91e760d91f686d6.bin b/Library/ShaderCache/b/bff1191892a62cc4c91e760d91f686d6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f054e1e3927403addeb6279d067d112ee906ec97
Binary files /dev/null and b/Library/ShaderCache/b/bff1191892a62cc4c91e760d91f686d6.bin differ
diff --git a/Library/ShaderCache/b/bff70c53f6fbe48fdf8dd3f369c99caa.bin b/Library/ShaderCache/b/bff70c53f6fbe48fdf8dd3f369c99caa.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2306062616b453052cd270a7759f8e626bea93f9
Binary files /dev/null and b/Library/ShaderCache/b/bff70c53f6fbe48fdf8dd3f369c99caa.bin differ
diff --git a/Library/ShaderCache/c/c07664b0b0643b0a750e9f8ab57a856e.bin b/Library/ShaderCache/c/c07664b0b0643b0a750e9f8ab57a856e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..78a2e804f596c1849d35fc4f7b61065ec380cc21
Binary files /dev/null and b/Library/ShaderCache/c/c07664b0b0643b0a750e9f8ab57a856e.bin differ
diff --git a/Library/ShaderCache/c/c0950aab32df820ac8357d3e9c7d99da.bin b/Library/ShaderCache/c/c0950aab32df820ac8357d3e9c7d99da.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b812cc115d0df2c2ddfd2314f90443021a8b670d
Binary files /dev/null and b/Library/ShaderCache/c/c0950aab32df820ac8357d3e9c7d99da.bin differ
diff --git a/Library/ShaderCache/c/c239324eee9eb884a1d03d8b718735b0.bin b/Library/ShaderCache/c/c239324eee9eb884a1d03d8b718735b0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bfdfa3a0d5c33067f85b6a872910a6e512909db9
Binary files /dev/null and b/Library/ShaderCache/c/c239324eee9eb884a1d03d8b718735b0.bin differ
diff --git a/Library/ShaderCache/c/c2d5730fced1e82d87d8f41c373aa264.bin b/Library/ShaderCache/c/c2d5730fced1e82d87d8f41c373aa264.bin
new file mode 100644
index 0000000000000000000000000000000000000000..256833a9d413ebf43bd20530e29d8166c956d50f
Binary files /dev/null and b/Library/ShaderCache/c/c2d5730fced1e82d87d8f41c373aa264.bin differ
diff --git a/Library/ShaderCache/c/c49dc76641b743612c68d34d7d121350.bin b/Library/ShaderCache/c/c49dc76641b743612c68d34d7d121350.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d7a87f769c84fc28b4d2a4aa3529a7c1431c2293
Binary files /dev/null and b/Library/ShaderCache/c/c49dc76641b743612c68d34d7d121350.bin differ
diff --git a/Library/ShaderCache/c/c51b6ab332d762dd7bf3ee7058e0a80d.bin b/Library/ShaderCache/c/c51b6ab332d762dd7bf3ee7058e0a80d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..29125a9b51a559090897dd8e55767c50dbd2d38f
Binary files /dev/null and b/Library/ShaderCache/c/c51b6ab332d762dd7bf3ee7058e0a80d.bin differ
diff --git a/Library/ShaderCache/c/c57f2f96ac89c630f81e053284979eb5.bin b/Library/ShaderCache/c/c57f2f96ac89c630f81e053284979eb5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2a5014a51b78a8e53c4ca4cc681782293f5bf615
Binary files /dev/null and b/Library/ShaderCache/c/c57f2f96ac89c630f81e053284979eb5.bin differ
diff --git a/Library/ShaderCache/c/c60b0c924b34ab8fe8c3bb6e591580dd.bin b/Library/ShaderCache/c/c60b0c924b34ab8fe8c3bb6e591580dd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..75862d0faa7bb3c6598150dd9565002776e1dfa6
Binary files /dev/null and b/Library/ShaderCache/c/c60b0c924b34ab8fe8c3bb6e591580dd.bin differ
diff --git a/Library/ShaderCache/c/c690ba43e28fe5c41242e53d83023ab0.bin b/Library/ShaderCache/c/c690ba43e28fe5c41242e53d83023ab0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..47d1471502dceed66f66e0f1340763e32d3040d1
Binary files /dev/null and b/Library/ShaderCache/c/c690ba43e28fe5c41242e53d83023ab0.bin differ
diff --git a/Library/ShaderCache/c/c8120a13786d786c3abb47ed94c728ff.bin b/Library/ShaderCache/c/c8120a13786d786c3abb47ed94c728ff.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6d7ed85e2bed69dac59f00a1884dbd2d6eec0b34
Binary files /dev/null and b/Library/ShaderCache/c/c8120a13786d786c3abb47ed94c728ff.bin differ
diff --git a/Library/ShaderCache/c/c87c8a1014bddb96aa17247f2aef5354.bin b/Library/ShaderCache/c/c87c8a1014bddb96aa17247f2aef5354.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3aead1c6eeca97aab9fb1f6733d23c1fb9e53bbe
Binary files /dev/null and b/Library/ShaderCache/c/c87c8a1014bddb96aa17247f2aef5354.bin differ
diff --git a/Library/ShaderCache/c/c8e2091f01512d247f8dc3565b76cc37.bin b/Library/ShaderCache/c/c8e2091f01512d247f8dc3565b76cc37.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bb3378f3d675144b2e8e2a09e2a61368b2557e78
Binary files /dev/null and b/Library/ShaderCache/c/c8e2091f01512d247f8dc3565b76cc37.bin differ
diff --git a/Library/ShaderCache/c/c902f15a306b719977d9dcc7e43f0941.bin b/Library/ShaderCache/c/c902f15a306b719977d9dcc7e43f0941.bin
new file mode 100644
index 0000000000000000000000000000000000000000..60c2061eaf94a5ae6af5f2e4c35f3332439fefe7
Binary files /dev/null and b/Library/ShaderCache/c/c902f15a306b719977d9dcc7e43f0941.bin differ
diff --git a/Library/ShaderCache/c/c9142f965bb26959c64b7ee8bc02cb0e.bin b/Library/ShaderCache/c/c9142f965bb26959c64b7ee8bc02cb0e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0d8677b478bf041f5d2aedc7007c2d032fc53be0
Binary files /dev/null and b/Library/ShaderCache/c/c9142f965bb26959c64b7ee8bc02cb0e.bin differ
diff --git a/Library/ShaderCache/c/c9ed5360184b17f298fac37cbbdddf65.bin b/Library/ShaderCache/c/c9ed5360184b17f298fac37cbbdddf65.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4b31e0ffaa1e574854be1abc76305bd0a4b53714
Binary files /dev/null and b/Library/ShaderCache/c/c9ed5360184b17f298fac37cbbdddf65.bin differ
diff --git a/Library/ShaderCache/c/ca215c6dfa683de6bade56a732711d54.bin b/Library/ShaderCache/c/ca215c6dfa683de6bade56a732711d54.bin
new file mode 100644
index 0000000000000000000000000000000000000000..08fd387660b64344e0b8c5f3c04204f2752b7dc3
Binary files /dev/null and b/Library/ShaderCache/c/ca215c6dfa683de6bade56a732711d54.bin differ
diff --git a/Library/ShaderCache/c/cc6ab6b273c5d6e0a1102fefa4b9f240.bin b/Library/ShaderCache/c/cc6ab6b273c5d6e0a1102fefa4b9f240.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e414d2c96deca711666c23ccaf5a866d72f0dedb
Binary files /dev/null and b/Library/ShaderCache/c/cc6ab6b273c5d6e0a1102fefa4b9f240.bin differ
diff --git a/Library/ShaderCache/c/ccb26230381804677952f11c5775e53a.bin b/Library/ShaderCache/c/ccb26230381804677952f11c5775e53a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..bd8269c5c22b1fc1972bc47cfd94872ade31d241
Binary files /dev/null and b/Library/ShaderCache/c/ccb26230381804677952f11c5775e53a.bin differ
diff --git a/Library/ShaderCache/c/cd4938af9721efdc4c330bf559fd7e92.bin b/Library/ShaderCache/c/cd4938af9721efdc4c330bf559fd7e92.bin
new file mode 100644
index 0000000000000000000000000000000000000000..94a1389bf8103db384b980c05d44ec9ad40e9245
Binary files /dev/null and b/Library/ShaderCache/c/cd4938af9721efdc4c330bf559fd7e92.bin differ
diff --git a/Library/ShaderCache/c/cf1d517582ded41b3c252f3d100c5afd.bin b/Library/ShaderCache/c/cf1d517582ded41b3c252f3d100c5afd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9010b057addd85f57f86beb1903470a2c541997c
Binary files /dev/null and b/Library/ShaderCache/c/cf1d517582ded41b3c252f3d100c5afd.bin differ
diff --git a/Library/ShaderCache/c/cfe349083e0745bb710bc212f470157b.bin b/Library/ShaderCache/c/cfe349083e0745bb710bc212f470157b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a83816c2257ce12072c276ba068b6e4563425f5a
Binary files /dev/null and b/Library/ShaderCache/c/cfe349083e0745bb710bc212f470157b.bin differ
diff --git a/Library/ShaderCache/c/cfec462cc808e428ab2dd53e6ca5384e.bin b/Library/ShaderCache/c/cfec462cc808e428ab2dd53e6ca5384e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..84d8359fb43c9f1093ded771493d28d0de2d430b
Binary files /dev/null and b/Library/ShaderCache/c/cfec462cc808e428ab2dd53e6ca5384e.bin differ
diff --git a/Library/ShaderCache/d/d0677cc849e5a7fd3d688d0a3eea1dfc.bin b/Library/ShaderCache/d/d0677cc849e5a7fd3d688d0a3eea1dfc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..44499e903f6bcdf0081701cec471292859e82409
Binary files /dev/null and b/Library/ShaderCache/d/d0677cc849e5a7fd3d688d0a3eea1dfc.bin differ
diff --git a/Library/ShaderCache/d/d0da15d9a96456974e34e6431fabdf44.bin b/Library/ShaderCache/d/d0da15d9a96456974e34e6431fabdf44.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a0a016d35bc50aa98683286ac4fc97c735309e28
Binary files /dev/null and b/Library/ShaderCache/d/d0da15d9a96456974e34e6431fabdf44.bin differ
diff --git a/Library/ShaderCache/d/d13542e65cf0f4ce0b134ce4e154d067.bin b/Library/ShaderCache/d/d13542e65cf0f4ce0b134ce4e154d067.bin
new file mode 100644
index 0000000000000000000000000000000000000000..736b1b40169c8862376838fd7ff9801d00994a0e
Binary files /dev/null and b/Library/ShaderCache/d/d13542e65cf0f4ce0b134ce4e154d067.bin differ
diff --git a/Library/ShaderCache/d/d26d38cd9ca8c7df89a7ae9624c33b2c.bin b/Library/ShaderCache/d/d26d38cd9ca8c7df89a7ae9624c33b2c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e629ee8d7394f318944cdf7c4c62f620cf070afa
Binary files /dev/null and b/Library/ShaderCache/d/d26d38cd9ca8c7df89a7ae9624c33b2c.bin differ
diff --git a/Library/ShaderCache/d/d357b5d1cd549672ee7a9ef703a04a53.bin b/Library/ShaderCache/d/d357b5d1cd549672ee7a9ef703a04a53.bin
new file mode 100644
index 0000000000000000000000000000000000000000..69d26f8b1d62644b0a8de48cf0fce218301e1db5
Binary files /dev/null and b/Library/ShaderCache/d/d357b5d1cd549672ee7a9ef703a04a53.bin differ
diff --git a/Library/ShaderCache/d/d3be832fa561b7a26dc37819d716addd.bin b/Library/ShaderCache/d/d3be832fa561b7a26dc37819d716addd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..401f7e38379c169514def0d5e6ee30521de2a8dd
Binary files /dev/null and b/Library/ShaderCache/d/d3be832fa561b7a26dc37819d716addd.bin differ
diff --git a/Library/ShaderCache/d/d3c6c08128e9fe58d8936a845d812e70.bin b/Library/ShaderCache/d/d3c6c08128e9fe58d8936a845d812e70.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e28cbfab94ccd8d419fe60f02fb6e23e672450e2
Binary files /dev/null and b/Library/ShaderCache/d/d3c6c08128e9fe58d8936a845d812e70.bin differ
diff --git a/Library/ShaderCache/d/d3fd1045ab98573630213e6f26e48c65.bin b/Library/ShaderCache/d/d3fd1045ab98573630213e6f26e48c65.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7635914ee24843a436d9363fbeda15e5aa98e455
Binary files /dev/null and b/Library/ShaderCache/d/d3fd1045ab98573630213e6f26e48c65.bin differ
diff --git a/Library/ShaderCache/d/d443838cc57ab77c4ff730c419d66541.bin b/Library/ShaderCache/d/d443838cc57ab77c4ff730c419d66541.bin
new file mode 100644
index 0000000000000000000000000000000000000000..87a9f77120655953056d8aa58d41e5f2898653cb
Binary files /dev/null and b/Library/ShaderCache/d/d443838cc57ab77c4ff730c419d66541.bin differ
diff --git a/Library/ShaderCache/d/d4706e68cd30220b816da292fa9e1d1e.bin b/Library/ShaderCache/d/d4706e68cd30220b816da292fa9e1d1e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..aebc31effa95b63bb4bad8b1f2be592aa2fc613f
Binary files /dev/null and b/Library/ShaderCache/d/d4706e68cd30220b816da292fa9e1d1e.bin differ
diff --git a/Library/ShaderCache/d/d4b051c8440f36e29b0c6766ac3336b6.bin b/Library/ShaderCache/d/d4b051c8440f36e29b0c6766ac3336b6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..77fc0a9f3245eaacdecd06770d69b6c488de486b
Binary files /dev/null and b/Library/ShaderCache/d/d4b051c8440f36e29b0c6766ac3336b6.bin differ
diff --git a/Library/ShaderCache/d/d4b2f0e9e56d07f95955f039b04b1c82.bin b/Library/ShaderCache/d/d4b2f0e9e56d07f95955f039b04b1c82.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2ff6fce24da0ce1f2ced00124c2235690ea19b84
Binary files /dev/null and b/Library/ShaderCache/d/d4b2f0e9e56d07f95955f039b04b1c82.bin differ
diff --git a/Library/ShaderCache/d/d56595be27f56be7c94613ae851c07d2.bin b/Library/ShaderCache/d/d56595be27f56be7c94613ae851c07d2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..59cbc1db7e656d32d8448443728c6d8b603f9aff
Binary files /dev/null and b/Library/ShaderCache/d/d56595be27f56be7c94613ae851c07d2.bin differ
diff --git a/Library/ShaderCache/d/d60d4bb8909c10576d19309bb2457da8.bin b/Library/ShaderCache/d/d60d4bb8909c10576d19309bb2457da8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6af8a9f9de3a32c744a01a969b786c1486902bab
Binary files /dev/null and b/Library/ShaderCache/d/d60d4bb8909c10576d19309bb2457da8.bin differ
diff --git a/Library/ShaderCache/d/d6ad1c1aa9edf0ab0d2d24a8bddc84db.bin b/Library/ShaderCache/d/d6ad1c1aa9edf0ab0d2d24a8bddc84db.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ada634e7acea36d16292435c2443b870ff554a11
Binary files /dev/null and b/Library/ShaderCache/d/d6ad1c1aa9edf0ab0d2d24a8bddc84db.bin differ
diff --git a/Library/ShaderCache/d/d7da65cb52e5b70e8f5c30ae617c0851.bin b/Library/ShaderCache/d/d7da65cb52e5b70e8f5c30ae617c0851.bin
new file mode 100644
index 0000000000000000000000000000000000000000..41c44118a38490335accdd60bb88179e201c0484
Binary files /dev/null and b/Library/ShaderCache/d/d7da65cb52e5b70e8f5c30ae617c0851.bin differ
diff --git a/Library/ShaderCache/d/d8acfee9a3db291697823c037940ce8b.bin b/Library/ShaderCache/d/d8acfee9a3db291697823c037940ce8b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5e04b795274cc7c3a301eebc0fd89c86532c30b2
Binary files /dev/null and b/Library/ShaderCache/d/d8acfee9a3db291697823c037940ce8b.bin differ
diff --git a/Library/ShaderCache/d/da3b8917f79a2ffa1f39e758c4f10c7a.bin b/Library/ShaderCache/d/da3b8917f79a2ffa1f39e758c4f10c7a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..88bf34441883fa7da923e64418559d6211784278
Binary files /dev/null and b/Library/ShaderCache/d/da3b8917f79a2ffa1f39e758c4f10c7a.bin differ
diff --git a/Library/ShaderCache/d/da6ef97109c764aa35b27bccf8f398ae.bin b/Library/ShaderCache/d/da6ef97109c764aa35b27bccf8f398ae.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a3c1eaa3a226e5318690f88ecc56eb66878fd0ed
Binary files /dev/null and b/Library/ShaderCache/d/da6ef97109c764aa35b27bccf8f398ae.bin differ
diff --git a/Library/ShaderCache/d/db8dc3b4c2ecfb0c8dc162109a01b953.bin b/Library/ShaderCache/d/db8dc3b4c2ecfb0c8dc162109a01b953.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5ac8e6addc28ae35fda7ced59c5d64830ccbe595
Binary files /dev/null and b/Library/ShaderCache/d/db8dc3b4c2ecfb0c8dc162109a01b953.bin differ
diff --git a/Library/ShaderCache/d/dc61dc10173890303c72ca1613cd8268.bin b/Library/ShaderCache/d/dc61dc10173890303c72ca1613cd8268.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ff9420238c66348d21f46f554ed0fdb691f9febb
Binary files /dev/null and b/Library/ShaderCache/d/dc61dc10173890303c72ca1613cd8268.bin differ
diff --git a/Library/ShaderCache/d/dd0cf93c5a4e01f5c04a614d3b7c3f73.bin b/Library/ShaderCache/d/dd0cf93c5a4e01f5c04a614d3b7c3f73.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ba86b3ca1d6ced3862c5a2ce80e0483f0a11abc9
Binary files /dev/null and b/Library/ShaderCache/d/dd0cf93c5a4e01f5c04a614d3b7c3f73.bin differ
diff --git a/Library/ShaderCache/d/ddcce790f0c8da9c995cb65dc26db5fb.bin b/Library/ShaderCache/d/ddcce790f0c8da9c995cb65dc26db5fb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7bd6ad6a9bca7231c96fa08f51bc450841146abc
Binary files /dev/null and b/Library/ShaderCache/d/ddcce790f0c8da9c995cb65dc26db5fb.bin differ
diff --git a/Library/ShaderCache/d/de19356cc4b2a81a1641a178890eecc8.bin b/Library/ShaderCache/d/de19356cc4b2a81a1641a178890eecc8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5196aa28a34aa9194b1e9a445dc801c1fcfb6fc5
Binary files /dev/null and b/Library/ShaderCache/d/de19356cc4b2a81a1641a178890eecc8.bin differ
diff --git a/Library/ShaderCache/d/dede248e682db84b5d57b86fe25408a2.bin b/Library/ShaderCache/d/dede248e682db84b5d57b86fe25408a2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1e818759b14a616abe1f2cf9864576e6e85236c
Binary files /dev/null and b/Library/ShaderCache/d/dede248e682db84b5d57b86fe25408a2.bin differ
diff --git a/Library/ShaderCache/d/df7f9e88618d406b0a7cdf7d2611deca.bin b/Library/ShaderCache/d/df7f9e88618d406b0a7cdf7d2611deca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..deef5f8728d32f112a2e7726eef07656f949c004
Binary files /dev/null and b/Library/ShaderCache/d/df7f9e88618d406b0a7cdf7d2611deca.bin differ
diff --git a/Library/ShaderCache/d/dfcec8a18760e3d138bb61720142d496.bin b/Library/ShaderCache/d/dfcec8a18760e3d138bb61720142d496.bin
new file mode 100644
index 0000000000000000000000000000000000000000..aa3a14b971493a57b0fd53e9f6b0759c190b0f8a
Binary files /dev/null and b/Library/ShaderCache/d/dfcec8a18760e3d138bb61720142d496.bin differ
diff --git a/Library/ShaderCache/e/e00865e17ed70cf15d1f159b951cce01.bin b/Library/ShaderCache/e/e00865e17ed70cf15d1f159b951cce01.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e985ae9ca58229da3a55b566acbd1e4f3b626f33
Binary files /dev/null and b/Library/ShaderCache/e/e00865e17ed70cf15d1f159b951cce01.bin differ
diff --git a/Library/ShaderCache/e/e0ba4d4c0e98ef9a77a690a4fef0f93a.bin b/Library/ShaderCache/e/e0ba4d4c0e98ef9a77a690a4fef0f93a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dc397709adedde9215aebc80aa24f7d9fed6c2a3
Binary files /dev/null and b/Library/ShaderCache/e/e0ba4d4c0e98ef9a77a690a4fef0f93a.bin differ
diff --git a/Library/ShaderCache/e/e111bcba763bbff8272f2291abe5300a.bin b/Library/ShaderCache/e/e111bcba763bbff8272f2291abe5300a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/e/e111bcba763bbff8272f2291abe5300a.bin differ
diff --git a/Library/ShaderCache/e/e127f54047afa3b0ff6d9b2d40189518.bin b/Library/ShaderCache/e/e127f54047afa3b0ff6d9b2d40189518.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2159d505ba2c38fc47456372a2c25b6810bb8844
Binary files /dev/null and b/Library/ShaderCache/e/e127f54047afa3b0ff6d9b2d40189518.bin differ
diff --git a/Library/ShaderCache/e/e17349eddb78f1f9b81cf4e67ddde5e6.bin b/Library/ShaderCache/e/e17349eddb78f1f9b81cf4e67ddde5e6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..b39d1015989129c3c9cb716bb4a61743226bbae2
Binary files /dev/null and b/Library/ShaderCache/e/e17349eddb78f1f9b81cf4e67ddde5e6.bin differ
diff --git a/Library/ShaderCache/e/e1e60823e12f5abb70966d260bc45ac9.bin b/Library/ShaderCache/e/e1e60823e12f5abb70966d260bc45ac9.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d3674ce7f90e77b7669253afbe424275896e2100
Binary files /dev/null and b/Library/ShaderCache/e/e1e60823e12f5abb70966d260bc45ac9.bin differ
diff --git a/Library/ShaderCache/e/e23908c8f3c77faf6ddd91e24751fa7b.bin b/Library/ShaderCache/e/e23908c8f3c77faf6ddd91e24751fa7b.bin
new file mode 100644
index 0000000000000000000000000000000000000000..33b565c29afa4c519fbffbb3cb9a8c67de26f501
Binary files /dev/null and b/Library/ShaderCache/e/e23908c8f3c77faf6ddd91e24751fa7b.bin differ
diff --git a/Library/ShaderCache/e/e261c8d39721da6bd76efe88972aafa7.bin b/Library/ShaderCache/e/e261c8d39721da6bd76efe88972aafa7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f81cda2e11dcb2a9c81c67de569e43589d508b94
Binary files /dev/null and b/Library/ShaderCache/e/e261c8d39721da6bd76efe88972aafa7.bin differ
diff --git a/Library/ShaderCache/e/e28b6d1e3944a05594bc748bc95669d0.bin b/Library/ShaderCache/e/e28b6d1e3944a05594bc748bc95669d0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..95332f118e635198db478a1fd8099a823e39dc78
Binary files /dev/null and b/Library/ShaderCache/e/e28b6d1e3944a05594bc748bc95669d0.bin differ
diff --git a/Library/ShaderCache/e/e2ccb1655fe1f9632d7173a4fbbe53d1.bin b/Library/ShaderCache/e/e2ccb1655fe1f9632d7173a4fbbe53d1.bin
new file mode 100644
index 0000000000000000000000000000000000000000..846614ec6a70e16b0ca81669356d9829ed6f0f4d
Binary files /dev/null and b/Library/ShaderCache/e/e2ccb1655fe1f9632d7173a4fbbe53d1.bin differ
diff --git a/Library/ShaderCache/e/e540623d4c2a419a00f2752a6261a312.bin b/Library/ShaderCache/e/e540623d4c2a419a00f2752a6261a312.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7b204a583317393a08f251e04be3c948feb1130e
Binary files /dev/null and b/Library/ShaderCache/e/e540623d4c2a419a00f2752a6261a312.bin differ
diff --git a/Library/ShaderCache/e/e582559647412f08be784cefa4fe91bf.bin b/Library/ShaderCache/e/e582559647412f08be784cefa4fe91bf.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f1552e1d9c8b6692bf7582340737fe65dd4752bd
Binary files /dev/null and b/Library/ShaderCache/e/e582559647412f08be784cefa4fe91bf.bin differ
diff --git a/Library/ShaderCache/e/e5e66a761a7e36eeae27cd5c0fad4673.bin b/Library/ShaderCache/e/e5e66a761a7e36eeae27cd5c0fad4673.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a35e75d90b1b73baaf460dd218261c37852785ba
Binary files /dev/null and b/Library/ShaderCache/e/e5e66a761a7e36eeae27cd5c0fad4673.bin differ
diff --git a/Library/ShaderCache/e/e66053af09f1c7ce2931c3aedfac2037.bin b/Library/ShaderCache/e/e66053af09f1c7ce2931c3aedfac2037.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a07b577c438cad43fe4aac2e17137706126818fc
Binary files /dev/null and b/Library/ShaderCache/e/e66053af09f1c7ce2931c3aedfac2037.bin differ
diff --git a/Library/ShaderCache/e/e781dbf023fa22d0c6b5a99bfbbf5d00.bin b/Library/ShaderCache/e/e781dbf023fa22d0c6b5a99bfbbf5d00.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8fa20fc749912b3c9673c79d66509b166d973162
Binary files /dev/null and b/Library/ShaderCache/e/e781dbf023fa22d0c6b5a99bfbbf5d00.bin differ
diff --git a/Library/ShaderCache/e/e80c8c71f42be4b7dd57787060435a67.bin b/Library/ShaderCache/e/e80c8c71f42be4b7dd57787060435a67.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0a6ea23e5c4140e5e7295b54ffd87089b6503694
Binary files /dev/null and b/Library/ShaderCache/e/e80c8c71f42be4b7dd57787060435a67.bin differ
diff --git a/Library/ShaderCache/e/e84622c5f774fc80db624b2e65cc0066.bin b/Library/ShaderCache/e/e84622c5f774fc80db624b2e65cc0066.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4ad91005c1bd85268704c0eb1f52563dfc0379c9
Binary files /dev/null and b/Library/ShaderCache/e/e84622c5f774fc80db624b2e65cc0066.bin differ
diff --git a/Library/ShaderCache/e/e8bed8c669809ead5ffe094aa1a532ed.bin b/Library/ShaderCache/e/e8bed8c669809ead5ffe094aa1a532ed.bin
new file mode 100644
index 0000000000000000000000000000000000000000..ff0a37aa6e45bc50bd9bfa8944b92b0f95461af5
Binary files /dev/null and b/Library/ShaderCache/e/e8bed8c669809ead5ffe094aa1a532ed.bin differ
diff --git a/Library/ShaderCache/e/e90734340de3396f531645330dbaad0a.bin b/Library/ShaderCache/e/e90734340de3396f531645330dbaad0a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..67f35db151a20319b9f46ca4e70fefa1544a7b8d
Binary files /dev/null and b/Library/ShaderCache/e/e90734340de3396f531645330dbaad0a.bin differ
diff --git a/Library/ShaderCache/e/e90839b46b3eed31eb8cde9ee6530ea7.bin b/Library/ShaderCache/e/e90839b46b3eed31eb8cde9ee6530ea7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7e7f82341d019fe95ecaf99b00711e8caf662dba
Binary files /dev/null and b/Library/ShaderCache/e/e90839b46b3eed31eb8cde9ee6530ea7.bin differ
diff --git a/Library/ShaderCache/e/e96c851e4e8fc8dcf57793d85553b71f.bin b/Library/ShaderCache/e/e96c851e4e8fc8dcf57793d85553b71f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..52c76a170a80014dfdf8265fa7449988c5b845c0
Binary files /dev/null and b/Library/ShaderCache/e/e96c851e4e8fc8dcf57793d85553b71f.bin differ
diff --git a/Library/ShaderCache/e/e9ea3df70e310c3362e27424d574ca2f.bin b/Library/ShaderCache/e/e9ea3df70e310c3362e27424d574ca2f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..925f0ca8188783e589d1eccb6d2b43c56efca2a7
Binary files /dev/null and b/Library/ShaderCache/e/e9ea3df70e310c3362e27424d574ca2f.bin differ
diff --git a/Library/ShaderCache/e/ea245bd4e505b53885709efa1a71a859.bin b/Library/ShaderCache/e/ea245bd4e505b53885709efa1a71a859.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c45b0479ac6f53eac74221925354d2fda3b2a4f8
Binary files /dev/null and b/Library/ShaderCache/e/ea245bd4e505b53885709efa1a71a859.bin differ
diff --git a/Library/ShaderCache/e/ea2f40e748b2dbc77b75747ca392c0f5.bin b/Library/ShaderCache/e/ea2f40e748b2dbc77b75747ca392c0f5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..95f7f78558cf2852015b6359c88faa61a8d2c251
Binary files /dev/null and b/Library/ShaderCache/e/ea2f40e748b2dbc77b75747ca392c0f5.bin differ
diff --git a/Library/ShaderCache/e/ea4cf811bba11e41e4bad9c9a14fb61e.bin b/Library/ShaderCache/e/ea4cf811bba11e41e4bad9c9a14fb61e.bin
new file mode 100644
index 0000000000000000000000000000000000000000..d0d5d0087a8724217ea9400be5f0f0d4e892117a
Binary files /dev/null and b/Library/ShaderCache/e/ea4cf811bba11e41e4bad9c9a14fb61e.bin differ
diff --git a/Library/ShaderCache/e/eaafedc4ecf5e217f83e9d2434faf8eb.bin b/Library/ShaderCache/e/eaafedc4ecf5e217f83e9d2434faf8eb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..60f9999115e99e2dc558c2d7058dd17f1d5fa3ac
Binary files /dev/null and b/Library/ShaderCache/e/eaafedc4ecf5e217f83e9d2434faf8eb.bin differ
diff --git a/Library/ShaderCache/e/eb546cf98a09daf67f9618cc877683f5.bin b/Library/ShaderCache/e/eb546cf98a09daf67f9618cc877683f5.bin
new file mode 100644
index 0000000000000000000000000000000000000000..084484ea463084066991ab5769187319b9981c7c
Binary files /dev/null and b/Library/ShaderCache/e/eb546cf98a09daf67f9618cc877683f5.bin differ
diff --git a/Library/ShaderCache/e/eb7baf7d49be11438e108a40fc3dcc80.bin b/Library/ShaderCache/e/eb7baf7d49be11438e108a40fc3dcc80.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e5981bfd9b1c0a23d750d74f3d4befd3090a5290
Binary files /dev/null and b/Library/ShaderCache/e/eb7baf7d49be11438e108a40fc3dcc80.bin differ
diff --git a/Library/ShaderCache/e/ebacf26334a8572d19a8afac93f8ca5a.bin b/Library/ShaderCache/e/ebacf26334a8572d19a8afac93f8ca5a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24188abb15a9f382567eb688388c909e4e2844f5
Binary files /dev/null and b/Library/ShaderCache/e/ebacf26334a8572d19a8afac93f8ca5a.bin differ
diff --git a/Library/ShaderCache/e/ed5eb5b6c20ddfcba073148fbbe929b4.bin b/Library/ShaderCache/e/ed5eb5b6c20ddfcba073148fbbe929b4.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0efd2b8dd218dba41cc5aad8acac20a25dfa4b4e
Binary files /dev/null and b/Library/ShaderCache/e/ed5eb5b6c20ddfcba073148fbbe929b4.bin differ
diff --git a/Library/ShaderCache/e/eee0e06dcdfd18eda2f163eb841d3c96.bin b/Library/ShaderCache/e/eee0e06dcdfd18eda2f163eb841d3c96.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/e/eee0e06dcdfd18eda2f163eb841d3c96.bin differ
diff --git a/Library/ShaderCache/e/ef1f45d9b506db20f80e7ee44fc02f77.bin b/Library/ShaderCache/e/ef1f45d9b506db20f80e7ee44fc02f77.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a884c55519f082da34305a1dc39b676f7a60c850
Binary files /dev/null and b/Library/ShaderCache/e/ef1f45d9b506db20f80e7ee44fc02f77.bin differ
diff --git a/Library/ShaderCache/e/efdb4533cfd22afd7c16fbfc64c4ed85.bin b/Library/ShaderCache/e/efdb4533cfd22afd7c16fbfc64c4ed85.bin
new file mode 100644
index 0000000000000000000000000000000000000000..64e5aa8f5b6b33b5420357b2094d2a916d73df6f
Binary files /dev/null and b/Library/ShaderCache/e/efdb4533cfd22afd7c16fbfc64c4ed85.bin differ
diff --git a/Library/ShaderCache/f/f063a9b623cf7024e9e6ca91f0f32574.bin b/Library/ShaderCache/f/f063a9b623cf7024e9e6ca91f0f32574.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c6cbc4d9d61f681119577368580c0d4b728bfafe
Binary files /dev/null and b/Library/ShaderCache/f/f063a9b623cf7024e9e6ca91f0f32574.bin differ
diff --git a/Library/ShaderCache/f/f073affac10b3c24b8bcc5872578ed02.bin b/Library/ShaderCache/f/f073affac10b3c24b8bcc5872578ed02.bin
new file mode 100644
index 0000000000000000000000000000000000000000..00720309372aee4a901b400d04597e50ebc9bfe0
Binary files /dev/null and b/Library/ShaderCache/f/f073affac10b3c24b8bcc5872578ed02.bin differ
diff --git a/Library/ShaderCache/f/f0b95a446fbd162d712f5eb6185b95bd.bin b/Library/ShaderCache/f/f0b95a446fbd162d712f5eb6185b95bd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3949cd6a67af333d66b98841a9fbe9972114f733
Binary files /dev/null and b/Library/ShaderCache/f/f0b95a446fbd162d712f5eb6185b95bd.bin differ
diff --git a/Library/ShaderCache/f/f168043ec99909c096992b5d4b0a8448.bin b/Library/ShaderCache/f/f168043ec99909c096992b5d4b0a8448.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1b6abe6f9077c87416f6944da48736ca04475dd7
Binary files /dev/null and b/Library/ShaderCache/f/f168043ec99909c096992b5d4b0a8448.bin differ
diff --git a/Library/ShaderCache/f/f1c7df6cf8d351c9a438f2709085effb.bin b/Library/ShaderCache/f/f1c7df6cf8d351c9a438f2709085effb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e629ee8d7394f318944cdf7c4c62f620cf070afa
Binary files /dev/null and b/Library/ShaderCache/f/f1c7df6cf8d351c9a438f2709085effb.bin differ
diff --git a/Library/ShaderCache/f/f1d204ceb9c2380dfdd0e763641f62ca.bin b/Library/ShaderCache/f/f1d204ceb9c2380dfdd0e763641f62ca.bin
new file mode 100644
index 0000000000000000000000000000000000000000..55fdd06ba9e5b6a85322b26d60fe2a58492ce665
Binary files /dev/null and b/Library/ShaderCache/f/f1d204ceb9c2380dfdd0e763641f62ca.bin differ
diff --git a/Library/ShaderCache/f/f2c4cbb2509598210818434c6e43f646.bin b/Library/ShaderCache/f/f2c4cbb2509598210818434c6e43f646.bin
new file mode 100644
index 0000000000000000000000000000000000000000..5b8a1fd27bc34668fe8e678cf44a804fd00019ed
Binary files /dev/null and b/Library/ShaderCache/f/f2c4cbb2509598210818434c6e43f646.bin differ
diff --git a/Library/ShaderCache/f/f2e76dbdef8d158e76fdcd1a30c36666.bin b/Library/ShaderCache/f/f2e76dbdef8d158e76fdcd1a30c36666.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1a414cb5b6461fbd91b64d3291658d41553d2aee
Binary files /dev/null and b/Library/ShaderCache/f/f2e76dbdef8d158e76fdcd1a30c36666.bin differ
diff --git a/Library/ShaderCache/f/f2e7a2dc7d206b8b400186c0379f8c02.bin b/Library/ShaderCache/f/f2e7a2dc7d206b8b400186c0379f8c02.bin
new file mode 100644
index 0000000000000000000000000000000000000000..286c30e99e68abb01e555c06b46d6b6b4cce68c0
Binary files /dev/null and b/Library/ShaderCache/f/f2e7a2dc7d206b8b400186c0379f8c02.bin differ
diff --git a/Library/ShaderCache/f/f339b0c8e468cbd0637cb4f99b1eb9eb.bin b/Library/ShaderCache/f/f339b0c8e468cbd0637cb4f99b1eb9eb.bin
new file mode 100644
index 0000000000000000000000000000000000000000..9950cdd298cd71bf7cfe2fbb8ab5c334541b9715
Binary files /dev/null and b/Library/ShaderCache/f/f339b0c8e468cbd0637cb4f99b1eb9eb.bin differ
diff --git a/Library/ShaderCache/f/f386dd5593eeb60ca414b4a0aca166e2.bin b/Library/ShaderCache/f/f386dd5593eeb60ca414b4a0aca166e2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..343ad80647e90c6aea3f1cf4f874346cd59bd36c
Binary files /dev/null and b/Library/ShaderCache/f/f386dd5593eeb60ca414b4a0aca166e2.bin differ
diff --git a/Library/ShaderCache/f/f38c2878fbdce0c0a7a1fd245058fc29.bin b/Library/ShaderCache/f/f38c2878fbdce0c0a7a1fd245058fc29.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a1b892178041665264c22d5b97c92f92a824c042
Binary files /dev/null and b/Library/ShaderCache/f/f38c2878fbdce0c0a7a1fd245058fc29.bin differ
diff --git a/Library/ShaderCache/f/f38ca0176d1d6422ccdb1518a7e91826.bin b/Library/ShaderCache/f/f38ca0176d1d6422ccdb1518a7e91826.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f1552e1d9c8b6692bf7582340737fe65dd4752bd
Binary files /dev/null and b/Library/ShaderCache/f/f38ca0176d1d6422ccdb1518a7e91826.bin differ
diff --git a/Library/ShaderCache/f/f3d1531d3aa055fd6cc7e4c03ccaf795.bin b/Library/ShaderCache/f/f3d1531d3aa055fd6cc7e4c03ccaf795.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4134554e2aac75f9f66b81bfdda9f02c5b68b7fe
Binary files /dev/null and b/Library/ShaderCache/f/f3d1531d3aa055fd6cc7e4c03ccaf795.bin differ
diff --git a/Library/ShaderCache/f/f432993672d5998a71df66e928d5ff84.bin b/Library/ShaderCache/f/f432993672d5998a71df66e928d5ff84.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3adccf7d0240945e423a310e25e54140ceef5490
Binary files /dev/null and b/Library/ShaderCache/f/f432993672d5998a71df66e928d5ff84.bin differ
diff --git a/Library/ShaderCache/f/f49615fa61fe9b5f594ae7859e05b7f0.bin b/Library/ShaderCache/f/f49615fa61fe9b5f594ae7859e05b7f0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1dcc70b9f38d7648277ca24c439e722d65f3a13b
Binary files /dev/null and b/Library/ShaderCache/f/f49615fa61fe9b5f594ae7859e05b7f0.bin differ
diff --git a/Library/ShaderCache/f/f4c6e6de2d28a25e59ac97f647a14cf6.bin b/Library/ShaderCache/f/f4c6e6de2d28a25e59ac97f647a14cf6.bin
new file mode 100644
index 0000000000000000000000000000000000000000..da8bf89249905e9ad4256e4c2663535dab2b79c4
Binary files /dev/null and b/Library/ShaderCache/f/f4c6e6de2d28a25e59ac97f647a14cf6.bin differ
diff --git a/Library/ShaderCache/f/f565cab5b7bb19f6b1409e8d710e2171.bin b/Library/ShaderCache/f/f565cab5b7bb19f6b1409e8d710e2171.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3474147144427823b1f298ce689ba9fcce914e94
Binary files /dev/null and b/Library/ShaderCache/f/f565cab5b7bb19f6b1409e8d710e2171.bin differ
diff --git a/Library/ShaderCache/f/f5d6a619f9434e5aaeab97ac7b37f554.bin b/Library/ShaderCache/f/f5d6a619f9434e5aaeab97ac7b37f554.bin
new file mode 100644
index 0000000000000000000000000000000000000000..640dbc024580565479e0441ccbfdfc166472e8e8
Binary files /dev/null and b/Library/ShaderCache/f/f5d6a619f9434e5aaeab97ac7b37f554.bin differ
diff --git a/Library/ShaderCache/f/f6538a05433d9d5d7485e946988a4b48.bin b/Library/ShaderCache/f/f6538a05433d9d5d7485e946988a4b48.bin
new file mode 100644
index 0000000000000000000000000000000000000000..72296df34193adb6778b16d540f1414b8e2c3a01
Binary files /dev/null and b/Library/ShaderCache/f/f6538a05433d9d5d7485e946988a4b48.bin differ
diff --git a/Library/ShaderCache/f/f78a99029b31be31bf753acee1d43436.bin b/Library/ShaderCache/f/f78a99029b31be31bf753acee1d43436.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fa425dbea3c7eb923c710e3af1a57ff216c61946
Binary files /dev/null and b/Library/ShaderCache/f/f78a99029b31be31bf753acee1d43436.bin differ
diff --git a/Library/ShaderCache/f/f7c644c6c4d5a011c4a41076ea5b47fa.bin b/Library/ShaderCache/f/f7c644c6c4d5a011c4a41076ea5b47fa.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24d0c3bc3c33009c0fdfaafcec29f5388381d206
Binary files /dev/null and b/Library/ShaderCache/f/f7c644c6c4d5a011c4a41076ea5b47fa.bin differ
diff --git a/Library/ShaderCache/f/f826cbea2ae06ef75889d0c015dc0cc7.bin b/Library/ShaderCache/f/f826cbea2ae06ef75889d0c015dc0cc7.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4d965d8140d530d2003d42c30a7e7d7658bfd3dd
Binary files /dev/null and b/Library/ShaderCache/f/f826cbea2ae06ef75889d0c015dc0cc7.bin differ
diff --git a/Library/ShaderCache/f/f8411b76f72480fdf8995a38016ad2e2.bin b/Library/ShaderCache/f/f8411b76f72480fdf8995a38016ad2e2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fef95ada798be78c31f56c0b1cc6e550759d6fb8
Binary files /dev/null and b/Library/ShaderCache/f/f8411b76f72480fdf8995a38016ad2e2.bin differ
diff --git a/Library/ShaderCache/f/f844e6db8cda80f214333c54a72efe7a.bin b/Library/ShaderCache/f/f844e6db8cda80f214333c54a72efe7a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..02c6f0b887349cc4f4e682bb37f82a0a1aeedacb
Binary files /dev/null and b/Library/ShaderCache/f/f844e6db8cda80f214333c54a72efe7a.bin differ
diff --git a/Library/ShaderCache/f/f88f36c95e0a090ce8967bd60fc8de5c.bin b/Library/ShaderCache/f/f88f36c95e0a090ce8967bd60fc8de5c.bin
new file mode 100644
index 0000000000000000000000000000000000000000..557f0016ec175c38309e79332e57b4d66bfdf8c1
Binary files /dev/null and b/Library/ShaderCache/f/f88f36c95e0a090ce8967bd60fc8de5c.bin differ
diff --git a/Library/ShaderCache/f/f8b29583889749c8ad04ee589a227545.bin b/Library/ShaderCache/f/f8b29583889749c8ad04ee589a227545.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8d20b19172f295cc476c13533fa7cf6e2bfbfbea
Binary files /dev/null and b/Library/ShaderCache/f/f8b29583889749c8ad04ee589a227545.bin differ
diff --git a/Library/ShaderCache/f/f93f99c22cef21aed0755131c8d55943.bin b/Library/ShaderCache/f/f93f99c22cef21aed0755131c8d55943.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6dfb2e1561b38408e010039e2c5d89bc41f585a7
Binary files /dev/null and b/Library/ShaderCache/f/f93f99c22cef21aed0755131c8d55943.bin differ
diff --git a/Library/ShaderCache/f/f9b0a13cf9d4113308ebccaa87e0b04a.bin b/Library/ShaderCache/f/f9b0a13cf9d4113308ebccaa87e0b04a.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c6eea633a17e63ad0a12745253adb121f893af3e
Binary files /dev/null and b/Library/ShaderCache/f/f9b0a13cf9d4113308ebccaa87e0b04a.bin differ
diff --git a/Library/ShaderCache/f/fb176e794eebf1784c142d02f9bb62bc.bin b/Library/ShaderCache/f/fb176e794eebf1784c142d02f9bb62bc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7a56a918f7c8011e70b5fd5bf01585e257c378ab
Binary files /dev/null and b/Library/ShaderCache/f/fb176e794eebf1784c142d02f9bb62bc.bin differ
diff --git a/Library/ShaderCache/f/fbedc6990c59ec9d91e8b7fdbe33190d.bin b/Library/ShaderCache/f/fbedc6990c59ec9d91e8b7fdbe33190d.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a20d04aa851ab7c60702b7bc4e8db5c6908ca211
Binary files /dev/null and b/Library/ShaderCache/f/fbedc6990c59ec9d91e8b7fdbe33190d.bin differ
diff --git a/Library/ShaderCache/f/fc6b8ea9e8f0941eee90e69e82128cbd.bin b/Library/ShaderCache/f/fc6b8ea9e8f0941eee90e69e82128cbd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..684a532e4678bcea5cc843c450a16fcbf3e44a1a
Binary files /dev/null and b/Library/ShaderCache/f/fc6b8ea9e8f0941eee90e69e82128cbd.bin differ
diff --git a/Library/ShaderCache/f/fc86d00d28906fb00e95f6a161ce7a48.bin b/Library/ShaderCache/f/fc86d00d28906fb00e95f6a161ce7a48.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e9707bf1f0615e93a54d4099af0f7a1b153d5264
Binary files /dev/null and b/Library/ShaderCache/f/fc86d00d28906fb00e95f6a161ce7a48.bin differ
diff --git a/Library/ShaderCache/f/fc9093acf7a1ca735853e432f83163b2.bin b/Library/ShaderCache/f/fc9093acf7a1ca735853e432f83163b2.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f351ca0c47cb9a2285e6348c80ae137f5ca42448
Binary files /dev/null and b/Library/ShaderCache/f/fc9093acf7a1ca735853e432f83163b2.bin differ
diff --git a/Library/ShaderCache/f/fc9c8d3b45cd4c9f7445c6f84debc8c8.bin b/Library/ShaderCache/f/fc9c8d3b45cd4c9f7445c6f84debc8c8.bin
new file mode 100644
index 0000000000000000000000000000000000000000..61fb3f28918ec3c281bf9bc59fe24400d766cae3
Binary files /dev/null and b/Library/ShaderCache/f/fc9c8d3b45cd4c9f7445c6f84debc8c8.bin differ
diff --git a/Library/ShaderCache/f/fd61bb297114fb88ca63353e4bcfd130.bin b/Library/ShaderCache/f/fd61bb297114fb88ca63353e4bcfd130.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3dbba1633ddcdc72033e8259f7c4843e337a1f9f
Binary files /dev/null and b/Library/ShaderCache/f/fd61bb297114fb88ca63353e4bcfd130.bin differ
diff --git a/Library/ShaderCache/f/fdb333ac536e6a1831316a4128072165.bin b/Library/ShaderCache/f/fdb333ac536e6a1831316a4128072165.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e7794639fb11dd34cf0bc6d8078eff0457a8c8d6
Binary files /dev/null and b/Library/ShaderCache/f/fdb333ac536e6a1831316a4128072165.bin differ
diff --git a/Library/ShaderCache/f/fde54d8c5a4f00050a79cf9e701671fd.bin b/Library/ShaderCache/f/fde54d8c5a4f00050a79cf9e701671fd.bin
new file mode 100644
index 0000000000000000000000000000000000000000..4dd4aec56dd3ba358ab27e7f1e00192971c6ee81
Binary files /dev/null and b/Library/ShaderCache/f/fde54d8c5a4f00050a79cf9e701671fd.bin differ
diff --git a/Library/ShaderCache/f/fdf2e056aa64da6b641acacf268c1461.bin b/Library/ShaderCache/f/fdf2e056aa64da6b641acacf268c1461.bin
new file mode 100644
index 0000000000000000000000000000000000000000..3e0e4cb66f15c242e33f7d8c074d5f27bf8b08e0
Binary files /dev/null and b/Library/ShaderCache/f/fdf2e056aa64da6b641acacf268c1461.bin differ
diff --git a/Library/ShaderCache/f/fdffaa08169fb0b52de9199ed50cf0bc.bin b/Library/ShaderCache/f/fdffaa08169fb0b52de9199ed50cf0bc.bin
new file mode 100644
index 0000000000000000000000000000000000000000..2016cb93b04a532316ee7394099d3352785f2f30
Binary files /dev/null and b/Library/ShaderCache/f/fdffaa08169fb0b52de9199ed50cf0bc.bin differ
diff --git a/Library/ShaderCache/f/ff1ea0e653cfc1c0be6f3dab57507e27.bin b/Library/ShaderCache/f/ff1ea0e653cfc1c0be6f3dab57507e27.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f81cda2e11dcb2a9c81c67de569e43589d508b94
Binary files /dev/null and b/Library/ShaderCache/f/ff1ea0e653cfc1c0be6f3dab57507e27.bin differ
diff --git a/Library/ShaderCache/f/ff20a8eb61e51797cd19d53d6e2c58f0.bin b/Library/ShaderCache/f/ff20a8eb61e51797cd19d53d6e2c58f0.bin
new file mode 100644
index 0000000000000000000000000000000000000000..de8c537626a46d3e5e21b93ae6097fd3d3482841
Binary files /dev/null and b/Library/ShaderCache/f/ff20a8eb61e51797cd19d53d6e2c58f0.bin differ
diff --git a/Library/ShaderCache/f/ffbd8882e9a21bdb88b3257d6e5fa231.bin b/Library/ShaderCache/f/ffbd8882e9a21bdb88b3257d6e5fa231.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f427a96671f7052f96af7a8d3cbfa6c99d591875
Binary files /dev/null and b/Library/ShaderCache/f/ffbd8882e9a21bdb88b3257d6e5fa231.bin differ
diff --git a/Library/ShaderCache/f/ffd6bcb51712795b57a5b5e4193d018f.bin b/Library/ShaderCache/f/ffd6bcb51712795b57a5b5e4193d018f.bin
new file mode 100644
index 0000000000000000000000000000000000000000..24d0c3bc3c33009c0fdfaafcec29f5388381d206
Binary files /dev/null and b/Library/ShaderCache/f/ffd6bcb51712795b57a5b5e4193d018f.bin differ
diff --git a/Library/SpriteAtlasDatabase.asset b/Library/SpriteAtlasDatabase.asset
new file mode 100644
index 0000000000000000000000000000000000000000..7731b9731d92fe5f9f1deb13d84a94fcbabb3307
Binary files /dev/null and b/Library/SpriteAtlasDatabase.asset differ
diff --git a/Library/StateCache/Hierarchy/53805d-f257d9bf30c4b00438.json b/Library/StateCache/Hierarchy/53805d-f257d9bf30c4b00438.json
new file mode 100644
index 0000000000000000000000000000000000000000..c5ad54381a0d5f785abe1845621083fdae972497
--- /dev/null
+++ b/Library/StateCache/Hierarchy/53805d-f257d9bf30c4b00438.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":8554908275665052588,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/53805d-mainStage.json b/Library/StateCache/Hierarchy/53805d-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..54a5c39b11f87a1c77fdf09f7fdca439de48611f
--- /dev/null
+++ b/Library/StateCache/Hierarchy/53805d-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[-6502,-2206,-1058],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":-6502}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/aee14f-mainStage.json b/Library/StateCache/Hierarchy/aee14f-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..af631acc5e3fd78802b0f80bceff947805585719
--- /dev/null
+++ b/Library/StateCache/Hierarchy/aee14f-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[-4908],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":-10428}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/b5a06f-mainStage.json b/Library/StateCache/Hierarchy/b5a06f-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..14711226b0db750928275b37d44b30903ea1435f
--- /dev/null
+++ b/Library/StateCache/Hierarchy/b5a06f-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[-1328,-1058],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/cbf504-aa677b132f3ec71478.json b/Library/StateCache/Hierarchy/cbf504-aa677b132f3ec71478.json
new file mode 100644
index 0000000000000000000000000000000000000000..69e4af5cd4cfbc609b9217ef1fd6b3df9edaf8ee
--- /dev/null
+++ b/Library/StateCache/Hierarchy/cbf504-aa677b132f3ec71478.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":3181414493326536726,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/cbf504-mainStage.json b/Library/StateCache/Hierarchy/cbf504-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..4461fa5f1bb8381d1f2522c3a5d4f6ddda3056fb
--- /dev/null
+++ b/Library/StateCache/Hierarchy/cbf504-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/f84cb3-mainStage.json b/Library/StateCache/Hierarchy/f84cb3-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..b94fc1e9ff565a394851915c9d298b1d8b2d77cb
--- /dev/null
+++ b/Library/StateCache/Hierarchy/f84cb3-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[-4908,-1058],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/fbfccc-mainStage.json b/Library/StateCache/Hierarchy/fbfccc-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..4461fa5f1bb8381d1f2522c3a5d4f6ddda3056fb
--- /dev/null
+++ b/Library/StateCache/Hierarchy/fbfccc-mainStage.json
@@ -0,0 +1 @@
+{"m_ExpandedPrefabGameObjectFileIDs":[],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":0,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/1e3d5a-mainStage.json b/Library/StateCache/SceneView/1e3d5a-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..1552ff32ab5d19a31ef3ad44e34f6c3d20578607
--- /dev/null
+++ b/Library/StateCache/SceneView/1e3d5a-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":-0.020729664713144304,"y":-1.4032117128372193,"z":0.1564902663230896},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":6.332108020782471,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/4f7481-f257d9bf30c4b00438.json b/Library/StateCache/SceneView/4f7481-f257d9bf30c4b00438.json
new file mode 100644
index 0000000000000000000000000000000000000000..d376664f3ddd2dae0695a2d272656a0acff72012
--- /dev/null
+++ b/Library/StateCache/SceneView/4f7481-f257d9bf30c4b00438.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":false,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":false,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":-1.0,"y":2.5,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":27.659040451049806,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/4f7481-mainStage.json b/Library/StateCache/SceneView/4f7481-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..a223c76fcad4f468d438180b9fa9682e72eae97a
--- /dev/null
+++ b/Library/StateCache/SceneView/4f7481-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":0.0,"y":0.0,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":22.0,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/856cac-mainStage.json b/Library/StateCache/SceneView/856cac-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..065db66a2bd9cefd8773c12d0ade1b3397912754
--- /dev/null
+++ b/Library/StateCache/SceneView/856cac-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":0.0,"y":1.5800000429153443,"z":-25.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":9.583364486694336,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/9aa1b8-aa677b132f3ec71478.json b/Library/StateCache/SceneView/9aa1b8-aa677b132f3ec71478.json
new file mode 100644
index 0000000000000000000000000000000000000000..336eb36b0e1df5d2907003966162d577d9e29273
--- /dev/null
+++ b/Library/StateCache/SceneView/9aa1b8-aa677b132f3ec71478.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":false,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":false,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":-59.93000030517578,"y":22.68000030517578,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":-1.0},"size":5.014408111572266,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/9aa1b8-mainStage.json b/Library/StateCache/SceneView/9aa1b8-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..ad7337aea2634d0bd5b91bd2d2f8e0951d61890f
--- /dev/null
+++ b/Library/StateCache/SceneView/9aa1b8-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":144.74752807617188,"y":253.11663818359376,"z":2.401362895965576},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":-1.0},"size":873.888671875,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/cd91de-mainStage.json b/Library/StateCache/SceneView/cd91de-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..03c4013354074e6c44664c96786648984b6a6b95
--- /dev/null
+++ b/Library/StateCache/SceneView/cd91de-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":0.0,"y":0.0,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":10.0,"orthographic":true}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/f6b049-mainStage.json b/Library/StateCache/SceneView/f6b049-mainStage.json
new file mode 100644
index 0000000000000000000000000000000000000000..2f054e6bf3412086a91bd83cc4f700416861bc5d
--- /dev/null
+++ b/Library/StateCache/SceneView/f6b049-mainStage.json
@@ -0,0 +1 @@
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":false,"pivot":{"x":-61.03092956542969,"y":-22.900732040405275,"z":-21.368175506591798},"rotation":{"x":0.11506527662277222,"y":-0.7460233569145203,"z":0.1336810141801834,"w":0.6421359777450562},"size":94.031494140625,"orthographic":false}
\ No newline at end of file
diff --git a/Library/TilemapEditorUserSettings.asset b/Library/TilemapEditorUserSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..7c85c3623ebba8b275fdb7c3915d19e047bdae37
Binary files /dev/null and b/Library/TilemapEditorUserSettings.asset differ
diff --git a/Library/assetDatabase3 b/Library/assetDatabase3
new file mode 100644
index 0000000000000000000000000000000000000000..70e265425ccae32f85e36d6d6410864afaac6b0c
Binary files /dev/null and b/Library/assetDatabase3 differ
diff --git a/Library/expandedItems b/Library/expandedItems
new file mode 100644
index 0000000000000000000000000000000000000000..19280ebf3c3f775f3117808e68e39dffab0d9aac
Binary files /dev/null and b/Library/expandedItems differ
diff --git a/Library/metadata/00/00000000000000001000000000000000 b/Library/metadata/00/00000000000000001000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..89ec1871757cd57bbb0f0c592e4d4141edd082fc
Binary files /dev/null and b/Library/metadata/00/00000000000000001000000000000000 differ
diff --git a/Library/metadata/00/00000000000000001000000000000000.info b/Library/metadata/00/00000000000000001000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a194ff369911efcb80ba20cf2678acc0d539d64
Binary files /dev/null and b/Library/metadata/00/00000000000000001000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000002000000000000000 b/Library/metadata/00/00000000000000002000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..af8b9ceabc13f90522a42fe03796a194767a20d8
Binary files /dev/null and b/Library/metadata/00/00000000000000002000000000000000 differ
diff --git a/Library/metadata/00/00000000000000002000000000000000.info b/Library/metadata/00/00000000000000002000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..593e5d41d4d2ede0cce8331be4a358b1ecbb4262
Binary files /dev/null and b/Library/metadata/00/00000000000000002000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000003000000000000000 b/Library/metadata/00/00000000000000003000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..f76f90c6fcca5cb3ffd0891f72d98b3942c84b77
Binary files /dev/null and b/Library/metadata/00/00000000000000003000000000000000 differ
diff --git a/Library/metadata/00/00000000000000003000000000000000.info b/Library/metadata/00/00000000000000003000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..ec51f964c811ebf1c0ad5d4b2004d9e30bdcb63c
Binary files /dev/null and b/Library/metadata/00/00000000000000003000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000004000000000000000 b/Library/metadata/00/00000000000000004000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..d32565bf9fc97734e07d5fa128831a5f315d755e
Binary files /dev/null and b/Library/metadata/00/00000000000000004000000000000000 differ
diff --git a/Library/metadata/00/00000000000000004000000000000000.info b/Library/metadata/00/00000000000000004000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..fc11fd0f6c69d06f53c015af498de1c395dd4639
Binary files /dev/null and b/Library/metadata/00/00000000000000004000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000004100000000000000 b/Library/metadata/00/00000000000000004100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..18f219b4e3fe3a693bdc9e8cb9745096f505b48a
Binary files /dev/null and b/Library/metadata/00/00000000000000004100000000000000 differ
diff --git a/Library/metadata/00/00000000000000004100000000000000.info b/Library/metadata/00/00000000000000004100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..65ed8e2eee94670d00db87a6f8916b765724b703
Binary files /dev/null and b/Library/metadata/00/00000000000000004100000000000000.info differ
diff --git a/Library/metadata/00/00000000000000005000000000000000 b/Library/metadata/00/00000000000000005000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..3332fa8396a029c89241d9e0285faeea56f39d81
Binary files /dev/null and b/Library/metadata/00/00000000000000005000000000000000 differ
diff --git a/Library/metadata/00/00000000000000005000000000000000.info b/Library/metadata/00/00000000000000005000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..fade0c91985afc95f5f1c8f3b97f23601dedb096
Binary files /dev/null and b/Library/metadata/00/00000000000000005000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000005100000000000000 b/Library/metadata/00/00000000000000005100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..af50988cb3fbe5533c7dc4bda3aaabe47154c8be
Binary files /dev/null and b/Library/metadata/00/00000000000000005100000000000000 differ
diff --git a/Library/metadata/00/00000000000000005100000000000000.info b/Library/metadata/00/00000000000000005100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..5db0c0ba0c405bac68735397f4365e89d2f0a86a
Binary files /dev/null and b/Library/metadata/00/00000000000000005100000000000000.info differ
diff --git a/Library/metadata/00/00000000000000006000000000000000 b/Library/metadata/00/00000000000000006000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..82c56a7a49a0ad764f8af79a2678ae45107a4155
Binary files /dev/null and b/Library/metadata/00/00000000000000006000000000000000 differ
diff --git a/Library/metadata/00/00000000000000006000000000000000.info b/Library/metadata/00/00000000000000006000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..bb46964a34ed58d425991a5684773df9590ceb96
Binary files /dev/null and b/Library/metadata/00/00000000000000006000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000006100000000000000 b/Library/metadata/00/00000000000000006100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..ffa2a8f095b800781a8ca360178ff0c0dd49fdb9
Binary files /dev/null and b/Library/metadata/00/00000000000000006100000000000000 differ
diff --git a/Library/metadata/00/00000000000000006100000000000000.info b/Library/metadata/00/00000000000000006100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..dfb760a0f86286dc632833c571af8f1439c7df9a
Binary files /dev/null and b/Library/metadata/00/00000000000000006100000000000000.info differ
diff --git a/Library/metadata/00/00000000000000007000000000000000 b/Library/metadata/00/00000000000000007000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..acdd186692266d8ce77db02263a98960ce016c73
Binary files /dev/null and b/Library/metadata/00/00000000000000007000000000000000 differ
diff --git a/Library/metadata/00/00000000000000007000000000000000.info b/Library/metadata/00/00000000000000007000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..a80c7dd368e3a8f6d8ad8082975f55bd26a5adc6
Binary files /dev/null and b/Library/metadata/00/00000000000000007000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000007100000000000000 b/Library/metadata/00/00000000000000007100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..23334103464711706938ce30e0608f42bc440c8a
Binary files /dev/null and b/Library/metadata/00/00000000000000007100000000000000 differ
diff --git a/Library/metadata/00/00000000000000007100000000000000.info b/Library/metadata/00/00000000000000007100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..1b7d26b057759066e271e34dfe5feffb0085affa
Binary files /dev/null and b/Library/metadata/00/00000000000000007100000000000000.info differ
diff --git a/Library/metadata/00/00000000000000008000000000000000 b/Library/metadata/00/00000000000000008000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..051b101132ef2faea3f34866ba2185477cb0f8a7
Binary files /dev/null and b/Library/metadata/00/00000000000000008000000000000000 differ
diff --git a/Library/metadata/00/00000000000000008000000000000000.info b/Library/metadata/00/00000000000000008000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..5dc930f76b7aac065f2998879405b22a54282ad4
Binary files /dev/null and b/Library/metadata/00/00000000000000008000000000000000.info differ
diff --git a/Library/metadata/00/00000000000000009000000000000000 b/Library/metadata/00/00000000000000009000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..e5b30bb09baaee7607f51f1ea958f474ade9e51c
Binary files /dev/null and b/Library/metadata/00/00000000000000009000000000000000 differ
diff --git a/Library/metadata/00/00000000000000009000000000000000.info b/Library/metadata/00/00000000000000009000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..bd8d03ac456692e6f14d16f20cf36b8c1b6d6b15
Binary files /dev/null and b/Library/metadata/00/00000000000000009000000000000000.info differ
diff --git a/Library/metadata/00/0000000000000000a100000000000000 b/Library/metadata/00/0000000000000000a100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..fc86312e2f54206e4b7b4677ded0283119ca8043
Binary files /dev/null and b/Library/metadata/00/0000000000000000a100000000000000 differ
diff --git a/Library/metadata/00/0000000000000000a100000000000000.info b/Library/metadata/00/0000000000000000a100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..552089bc71a143e9cd848450ae68ac206e16cecd
Binary files /dev/null and b/Library/metadata/00/0000000000000000a100000000000000.info differ
diff --git a/Library/metadata/00/0000000000000000b000000000000000 b/Library/metadata/00/0000000000000000b000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..b7d884c2e9ebaf2c6c7d4342a03c02c3d7ab6488
Binary files /dev/null and b/Library/metadata/00/0000000000000000b000000000000000 differ
diff --git a/Library/metadata/00/0000000000000000b000000000000000.info b/Library/metadata/00/0000000000000000b000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d0ea61a3518b49e6899339b03b88e54e1bc3a6b
Binary files /dev/null and b/Library/metadata/00/0000000000000000b000000000000000.info differ
diff --git a/Library/metadata/00/0000000000000000b100000000000000 b/Library/metadata/00/0000000000000000b100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..6053d6f78486ff189246aa27c0c760361c97a2e7
Binary files /dev/null and b/Library/metadata/00/0000000000000000b100000000000000 differ
diff --git a/Library/metadata/00/0000000000000000b100000000000000.info b/Library/metadata/00/0000000000000000b100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..6b2e706e3b1bf9dd7b8a462cbac7ac7572a0f186
Binary files /dev/null and b/Library/metadata/00/0000000000000000b100000000000000.info differ
diff --git a/Library/metadata/00/0000000000000000c000000000000000 b/Library/metadata/00/0000000000000000c000000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..6e74f31e2d5d59bb48d64f5b155235fe0d273cec
Binary files /dev/null and b/Library/metadata/00/0000000000000000c000000000000000 differ
diff --git a/Library/metadata/00/0000000000000000c000000000000000.info b/Library/metadata/00/0000000000000000c000000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..1af637d536c5ed1cd18a66b6ee456e8ea5053284
Binary files /dev/null and b/Library/metadata/00/0000000000000000c000000000000000.info differ
diff --git a/Library/metadata/00/0000000000000000c100000000000000 b/Library/metadata/00/0000000000000000c100000000000000
new file mode 100644
index 0000000000000000000000000000000000000000..fbffd68636ac8031cb261a87a0280631d8f355b7
Binary files /dev/null and b/Library/metadata/00/0000000000000000c100000000000000 differ
diff --git a/Library/metadata/00/0000000000000000c100000000000000.info b/Library/metadata/00/0000000000000000c100000000000000.info
new file mode 100644
index 0000000000000000000000000000000000000000..2e597e3f3432a579e73d20d9d546419960aa16ea
Binary files /dev/null and b/Library/metadata/00/0000000000000000c100000000000000.info differ
diff --git a/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5 b/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5
new file mode 100644
index 0000000000000000000000000000000000000000..d09f767bbb315085fce347a28d2a841392ed077c
Binary files /dev/null and b/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5 differ
diff --git a/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5.info b/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5.info
new file mode 100644
index 0000000000000000000000000000000000000000..187282c9ef9521cd9de97fc56b2e330df71bfb47
Binary files /dev/null and b/Library/metadata/00/001382d02ed25cb4c8eb7dc7a53b36e5.info differ
diff --git a/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb b/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb
new file mode 100644
index 0000000000000000000000000000000000000000..ae9ba859b12c37e33d6f2309ffd0c00f50f173dd
Binary files /dev/null and b/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb differ
diff --git a/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb.info b/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..26dd89c77a0c98cd3d5c8a99aeb9918eb50ba384
Binary files /dev/null and b/Library/metadata/00/005c4d80949154e5c87348bb9f5d15eb.info differ
diff --git a/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac b/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac
new file mode 100644
index 0000000000000000000000000000000000000000..842ea4d162ecb8bd1141cb906cbce50114a98fd8
Binary files /dev/null and b/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac differ
diff --git a/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac.info b/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac.info
new file mode 100644
index 0000000000000000000000000000000000000000..234b30e4bc7784da27e916b40f193da96965f50e
Binary files /dev/null and b/Library/metadata/00/00a3942a8c372b5448fc58f1a5f20aac.info differ
diff --git a/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a b/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a
new file mode 100644
index 0000000000000000000000000000000000000000..44a322ac6bbd1c4e32849eb627420c9311189d09
Binary files /dev/null and b/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a differ
diff --git a/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a.info b/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcae763d66a772a7a2d3aa90f2c84f90a11d3a2a
Binary files /dev/null and b/Library/metadata/00/00ed25e3298ac440eb327c706a964e3a.info differ
diff --git a/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb b/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb
new file mode 100644
index 0000000000000000000000000000000000000000..9ca76d7823d4a68dcb150c15b0bf96bb3c25ccf8
Binary files /dev/null and b/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb differ
diff --git a/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb.info b/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb.info
new file mode 100644
index 0000000000000000000000000000000000000000..83288f5f450f08a7a25d0c6de70aafa64f6ed41a
Binary files /dev/null and b/Library/metadata/01/012c1498881b4794fafa2e60d4aeacdb.info differ
diff --git a/Library/metadata/01/015812e983113a84b95773e55f3cec13 b/Library/metadata/01/015812e983113a84b95773e55f3cec13
new file mode 100644
index 0000000000000000000000000000000000000000..de1fb5057af42c9d84d72fa8a32480ecb042c470
Binary files /dev/null and b/Library/metadata/01/015812e983113a84b95773e55f3cec13 differ
diff --git a/Library/metadata/01/015812e983113a84b95773e55f3cec13.info b/Library/metadata/01/015812e983113a84b95773e55f3cec13.info
new file mode 100644
index 0000000000000000000000000000000000000000..6238c36f82f467c8ec314dec043ce19391f82b85
Binary files /dev/null and b/Library/metadata/01/015812e983113a84b95773e55f3cec13.info differ
diff --git a/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866 b/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866
new file mode 100644
index 0000000000000000000000000000000000000000..52c3020e914daa73aba70bd27907feb87ba5d3e4
Binary files /dev/null and b/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866 differ
diff --git a/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866.info b/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866.info
new file mode 100644
index 0000000000000000000000000000000000000000..749be4ea9f26f632e1d8e7ee3a1e61d39125c351
Binary files /dev/null and b/Library/metadata/01/01ada73c4792aba4c937ff5d92cce866.info differ
diff --git a/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0 b/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0
new file mode 100644
index 0000000000000000000000000000000000000000..0c81fee54a9a7c5f4eee9e2110706d9d2dae900a
Binary files /dev/null and b/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0 differ
diff --git a/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0.info b/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0.info
new file mode 100644
index 0000000000000000000000000000000000000000..fc9b0325f624f4292e84d3057ffd1306f9fe9042
Binary files /dev/null and b/Library/metadata/01/01cd264c206ae482393dc9d04b26eca0.info differ
diff --git a/Library/metadata/01/01e02995805eb483690380a911a657e2 b/Library/metadata/01/01e02995805eb483690380a911a657e2
new file mode 100644
index 0000000000000000000000000000000000000000..93b212c3dfe60d0535c78bf24a945b2f52e19a23
Binary files /dev/null and b/Library/metadata/01/01e02995805eb483690380a911a657e2 differ
diff --git a/Library/metadata/01/01e02995805eb483690380a911a657e2.info b/Library/metadata/01/01e02995805eb483690380a911a657e2.info
new file mode 100644
index 0000000000000000000000000000000000000000..bac431b4010bcaec88fff4cbb8d04b2d30a7156d
Binary files /dev/null and b/Library/metadata/01/01e02995805eb483690380a911a657e2.info differ
diff --git a/Library/metadata/02/0217a80286f79419daa202f69409f19b b/Library/metadata/02/0217a80286f79419daa202f69409f19b
new file mode 100644
index 0000000000000000000000000000000000000000..01341a1a1d9c6bac4e59b661789af9ebe1402c27
Binary files /dev/null and b/Library/metadata/02/0217a80286f79419daa202f69409f19b differ
diff --git a/Library/metadata/02/0217a80286f79419daa202f69409f19b.info b/Library/metadata/02/0217a80286f79419daa202f69409f19b.info
new file mode 100644
index 0000000000000000000000000000000000000000..d1a04bbf732dfeb48300cb24f9963e3d8dbcb8d0
Binary files /dev/null and b/Library/metadata/02/0217a80286f79419daa202f69409f19b.info differ
diff --git a/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea b/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea
new file mode 100644
index 0000000000000000000000000000000000000000..62caa095d5b48e2fb0c587e21767ca1e2a88da97
Binary files /dev/null and b/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea differ
diff --git a/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea.info b/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea.info
new file mode 100644
index 0000000000000000000000000000000000000000..e0d845f88c89e722ee573a105f825a086404103a
Binary files /dev/null and b/Library/metadata/02/0288c9ea7a8195d42b0ceac1f8fc46ea.info differ
diff --git a/Library/metadata/02/02893ffb522b490a9fa28eedd2584309 b/Library/metadata/02/02893ffb522b490a9fa28eedd2584309
new file mode 100644
index 0000000000000000000000000000000000000000..c521a1578daa03efc1d76a3867da839e99948867
Binary files /dev/null and b/Library/metadata/02/02893ffb522b490a9fa28eedd2584309 differ
diff --git a/Library/metadata/02/02893ffb522b490a9fa28eedd2584309.info b/Library/metadata/02/02893ffb522b490a9fa28eedd2584309.info
new file mode 100644
index 0000000000000000000000000000000000000000..91ca1a02f1c50281924752081f00975b7e0669af
Binary files /dev/null and b/Library/metadata/02/02893ffb522b490a9fa28eedd2584309.info differ
diff --git a/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925 b/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925
new file mode 100644
index 0000000000000000000000000000000000000000..e889844060f03b1221558c48c5007873f63929f0
Binary files /dev/null and b/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925 differ
diff --git a/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925.info b/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925.info
new file mode 100644
index 0000000000000000000000000000000000000000..cedb6424496315e623a2676a10d7145362cf90df
Binary files /dev/null and b/Library/metadata/02/02aedd5d8e0c5b94f957adb8cf1e1925.info differ
diff --git a/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d b/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d
new file mode 100644
index 0000000000000000000000000000000000000000..dc1ee6c82bf07a4466eb461a0aecf1895d0761ad
Binary files /dev/null and b/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d differ
diff --git a/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d.info b/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d.info
new file mode 100644
index 0000000000000000000000000000000000000000..d004a4c301cb0c8e43d370034b20c9eff76aa3ea
Binary files /dev/null and b/Library/metadata/02/02c3e5cdb93d11c4f8b0f05d53e4257d.info differ
diff --git a/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08 b/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08
new file mode 100644
index 0000000000000000000000000000000000000000..dae87daf8c5e6502ed4b9442c3f07cefdeb377ec
Binary files /dev/null and b/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08 differ
diff --git a/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08.info b/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08.info
new file mode 100644
index 0000000000000000000000000000000000000000..a1c5623768a5d250671ff30ec446e7928064f2a6
Binary files /dev/null and b/Library/metadata/03/036d03e26977243fa9a2d7af48e51e08.info differ
diff --git a/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6 b/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6
new file mode 100644
index 0000000000000000000000000000000000000000..7393a7fece897c0e21b59f34896c533a9e43589e
Binary files /dev/null and b/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6 differ
diff --git a/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6.info b/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6.info
new file mode 100644
index 0000000000000000000000000000000000000000..0c9fa7f6c15d3a1e327058cd93a9e047a7a7ef34
Binary files /dev/null and b/Library/metadata/03/038424eca12b58c4bb60f4fe2ad7a5f6.info differ
diff --git a/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35 b/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35
new file mode 100644
index 0000000000000000000000000000000000000000..f7ce2280ab40930d40a634757a1be2ca74489832
Binary files /dev/null and b/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35 differ
diff --git a/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35.info b/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35.info
new file mode 100644
index 0000000000000000000000000000000000000000..bf38bfd525fcf46d8a968d2683fe24c23b9134e3
Binary files /dev/null and b/Library/metadata/03/0386b6eb838c47138cd51d1c1b879a35.info differ
diff --git a/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb b/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb
new file mode 100644
index 0000000000000000000000000000000000000000..ea1075dd57dde2cb3e0a53966cc47b7dfd241590
Binary files /dev/null and b/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb differ
diff --git a/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb.info b/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..97973d6dba53c8c8c10548dd03d233988809bdbe
Binary files /dev/null and b/Library/metadata/03/03ffb9844f8d40e8a2f59dd2aff561eb.info differ
diff --git a/Library/metadata/04/045788648973c9841ac89a4bcfd25af4 b/Library/metadata/04/045788648973c9841ac89a4bcfd25af4
new file mode 100644
index 0000000000000000000000000000000000000000..9072fd61990454a4222e4710f5d42267407351f6
Binary files /dev/null and b/Library/metadata/04/045788648973c9841ac89a4bcfd25af4 differ
diff --git a/Library/metadata/04/045788648973c9841ac89a4bcfd25af4.info b/Library/metadata/04/045788648973c9841ac89a4bcfd25af4.info
new file mode 100644
index 0000000000000000000000000000000000000000..bbc815c27f92e23384ff5134faa624f561baf341
Binary files /dev/null and b/Library/metadata/04/045788648973c9841ac89a4bcfd25af4.info differ
diff --git a/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e b/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e
new file mode 100644
index 0000000000000000000000000000000000000000..5ca3b20c55eaefe75f6558b63d58cf8f83e0fec7
Binary files /dev/null and b/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e differ
diff --git a/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e.info b/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e.info
new file mode 100644
index 0000000000000000000000000000000000000000..e4902a218caee648c74f140e4f7492afff064a69
Binary files /dev/null and b/Library/metadata/05/0530209eb0ae4f44eae4bedbd7d26a1e.info differ
diff --git a/Library/metadata/05/0559790a21ec74e43a1411651f46843e b/Library/metadata/05/0559790a21ec74e43a1411651f46843e
new file mode 100644
index 0000000000000000000000000000000000000000..261d82c89e0b869d8aa9289b2b290ce93a24d317
Binary files /dev/null and b/Library/metadata/05/0559790a21ec74e43a1411651f46843e differ
diff --git a/Library/metadata/05/0559790a21ec74e43a1411651f46843e.info b/Library/metadata/05/0559790a21ec74e43a1411651f46843e.info
new file mode 100644
index 0000000000000000000000000000000000000000..a364860dd2bd7b5d0a92e7a057d8d6ce02708452
Binary files /dev/null and b/Library/metadata/05/0559790a21ec74e43a1411651f46843e.info differ
diff --git a/Library/metadata/05/056819c66570ca54cadb72330a354050 b/Library/metadata/05/056819c66570ca54cadb72330a354050
new file mode 100644
index 0000000000000000000000000000000000000000..e9a03a037ca74eb17a8990418894d331f7a78502
Binary files /dev/null and b/Library/metadata/05/056819c66570ca54cadb72330a354050 differ
diff --git a/Library/metadata/05/056819c66570ca54cadb72330a354050.info b/Library/metadata/05/056819c66570ca54cadb72330a354050.info
new file mode 100644
index 0000000000000000000000000000000000000000..f2da211f19d877d3a191ae75aa4a7f20ea1ba21c
Binary files /dev/null and b/Library/metadata/05/056819c66570ca54cadb72330a354050.info differ
diff --git a/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77 b/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77
new file mode 100644
index 0000000000000000000000000000000000000000..5362cdcf7180418e6812dd2c9e521553aa17b5c9
Binary files /dev/null and b/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77 differ
diff --git a/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77.info b/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77.info
new file mode 100644
index 0000000000000000000000000000000000000000..d355b47227368d3e985c73ce3c04c3555e7fd991
Binary files /dev/null and b/Library/metadata/05/058cba836c1846c3aa1c5fd2e28aea77.info differ
diff --git a/Library/metadata/05/05f5bfd584002f948982a1498890f9a9 b/Library/metadata/05/05f5bfd584002f948982a1498890f9a9
new file mode 100644
index 0000000000000000000000000000000000000000..53cfb6e255174f3827fa657362e095d0f79d9788
Binary files /dev/null and b/Library/metadata/05/05f5bfd584002f948982a1498890f9a9 differ
diff --git a/Library/metadata/05/05f5bfd584002f948982a1498890f9a9.info b/Library/metadata/05/05f5bfd584002f948982a1498890f9a9.info
new file mode 100644
index 0000000000000000000000000000000000000000..90bd3fb16d6aa72a69ff76302666c272c86c0348
Binary files /dev/null and b/Library/metadata/05/05f5bfd584002f948982a1498890f9a9.info differ
diff --git a/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1 b/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1
new file mode 100644
index 0000000000000000000000000000000000000000..9daf091ce92492729b4ea9cd24b826453b62a02a
Binary files /dev/null and b/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1 differ
diff --git a/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1.info b/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1.info
new file mode 100644
index 0000000000000000000000000000000000000000..87af4d13c2b7297c2a2fba9803be055b06ee7476
Binary files /dev/null and b/Library/metadata/05/05f7f519769978b79b31d063a7fc6fa1.info differ
diff --git a/Library/metadata/06/063b1587caa4a47f396741f4e69d108c b/Library/metadata/06/063b1587caa4a47f396741f4e69d108c
new file mode 100644
index 0000000000000000000000000000000000000000..3c6ca3fe7860f4ed9043ed281bb56bcb4b736656
Binary files /dev/null and b/Library/metadata/06/063b1587caa4a47f396741f4e69d108c differ
diff --git a/Library/metadata/06/063b1587caa4a47f396741f4e69d108c.info b/Library/metadata/06/063b1587caa4a47f396741f4e69d108c.info
new file mode 100644
index 0000000000000000000000000000000000000000..c61b0d7648a1b7b5b402712cf08b4e72af2262b9
Binary files /dev/null and b/Library/metadata/06/063b1587caa4a47f396741f4e69d108c.info differ
diff --git a/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2 b/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2
new file mode 100644
index 0000000000000000000000000000000000000000..f23a6c585296de0a83152d4b9aa6c2bc4c1b8579
Binary files /dev/null and b/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2 differ
diff --git a/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2.info b/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2.info
new file mode 100644
index 0000000000000000000000000000000000000000..73ef4947affa3e4f473679ec86f3e8f61387eb0b
Binary files /dev/null and b/Library/metadata/06/066619c9c9c84f89acb1b48c11a7efe2.info differ
diff --git a/Library/metadata/06/06b575597b644fe8ba88495149d01b66 b/Library/metadata/06/06b575597b644fe8ba88495149d01b66
new file mode 100644
index 0000000000000000000000000000000000000000..30f81e44ea36e548d8a594143a70344131c1c92e
Binary files /dev/null and b/Library/metadata/06/06b575597b644fe8ba88495149d01b66 differ
diff --git a/Library/metadata/06/06b575597b644fe8ba88495149d01b66.info b/Library/metadata/06/06b575597b644fe8ba88495149d01b66.info
new file mode 100644
index 0000000000000000000000000000000000000000..34fb2d4d8df9d8e63fe7465464a18f985680d69f
Binary files /dev/null and b/Library/metadata/06/06b575597b644fe8ba88495149d01b66.info differ
diff --git a/Library/metadata/06/06cf5d43096a0034a82c78524738461b b/Library/metadata/06/06cf5d43096a0034a82c78524738461b
new file mode 100644
index 0000000000000000000000000000000000000000..c8c630580118ba36f2d5af58854cc6720a0792db
Binary files /dev/null and b/Library/metadata/06/06cf5d43096a0034a82c78524738461b differ
diff --git a/Library/metadata/06/06cf5d43096a0034a82c78524738461b.info b/Library/metadata/06/06cf5d43096a0034a82c78524738461b.info
new file mode 100644
index 0000000000000000000000000000000000000000..5d10c1926fb84142f5ca7d6d44acf69cc4762441
Binary files /dev/null and b/Library/metadata/06/06cf5d43096a0034a82c78524738461b.info differ
diff --git a/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77 b/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77
new file mode 100644
index 0000000000000000000000000000000000000000..476b4f8ef8f5c31f818c0bb04a9ebe0699e540fb
Binary files /dev/null and b/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77 differ
diff --git a/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77.info b/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77.info
new file mode 100644
index 0000000000000000000000000000000000000000..3b5a952804cb4d9181547dcea3f75776d2b225f6
Binary files /dev/null and b/Library/metadata/06/06f8e3404d534cab82fe852ff33dad77.info differ
diff --git a/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5 b/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5
new file mode 100644
index 0000000000000000000000000000000000000000..d4d9820c69efd012ccc289faf1da0cc15290f62c
Binary files /dev/null and b/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5 differ
diff --git a/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5.info b/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5.info
new file mode 100644
index 0000000000000000000000000000000000000000..12be9d74d4140dd02bcf0223aaf3b895092fab7b
Binary files /dev/null and b/Library/metadata/07/07994bfe8b0e4adb97d706de5dea48d5.info differ
diff --git a/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58 b/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58
new file mode 100644
index 0000000000000000000000000000000000000000..06d00b7115a5356c2b84ca9ad49a37eae1a26c44
Binary files /dev/null and b/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58 differ
diff --git a/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58.info b/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58.info
new file mode 100644
index 0000000000000000000000000000000000000000..50c372d3c548d576895389787c01bbfd48ebf0ad
Binary files /dev/null and b/Library/metadata/07/07d9c38a87d83e443886b576a1a20b58.info differ
diff --git a/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0 b/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0
new file mode 100644
index 0000000000000000000000000000000000000000..37c5e40fca886a32435f88958ebe8108c53603c1
Binary files /dev/null and b/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0 differ
diff --git a/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0.info b/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0.info
new file mode 100644
index 0000000000000000000000000000000000000000..a38ab3f14ccfb0d02b350bce49ada7ced564caf8
Binary files /dev/null and b/Library/metadata/08/08e9894bdf0834710b22d3c0aa245ac0.info differ
diff --git a/Library/metadata/09/0937814b88ba29d4296309e83528dedc b/Library/metadata/09/0937814b88ba29d4296309e83528dedc
new file mode 100644
index 0000000000000000000000000000000000000000..ed08b4ce312583172d31b8155c9f27d04f41d217
Binary files /dev/null and b/Library/metadata/09/0937814b88ba29d4296309e83528dedc differ
diff --git a/Library/metadata/09/0937814b88ba29d4296309e83528dedc.info b/Library/metadata/09/0937814b88ba29d4296309e83528dedc.info
new file mode 100644
index 0000000000000000000000000000000000000000..f43e5b358274f9c69fae120570430ec35467bdc8
Binary files /dev/null and b/Library/metadata/09/0937814b88ba29d4296309e83528dedc.info differ
diff --git a/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d b/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d
new file mode 100644
index 0000000000000000000000000000000000000000..9080f7fcff83a352085c20c1f4f4f20dbfcb0ff4
Binary files /dev/null and b/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d differ
diff --git a/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d.info b/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d.info
new file mode 100644
index 0000000000000000000000000000000000000000..d6a4e9ea698456f18e9f3ead8b41b2a9c77871e5
Binary files /dev/null and b/Library/metadata/09/09c4ef2aac2cee840b8f392902d0418d.info differ
diff --git a/Library/metadata/09/09e28640d754a611467eebfb261ed749 b/Library/metadata/09/09e28640d754a611467eebfb261ed749
new file mode 100644
index 0000000000000000000000000000000000000000..a339f23a21286eaf00d79f8150a6c8b6de371b76
Binary files /dev/null and b/Library/metadata/09/09e28640d754a611467eebfb261ed749 differ
diff --git a/Library/metadata/09/09e28640d754a611467eebfb261ed749.info b/Library/metadata/09/09e28640d754a611467eebfb261ed749.info
new file mode 100644
index 0000000000000000000000000000000000000000..4e1262413f11769f625ace874d4ad72eda15f2fc
Binary files /dev/null and b/Library/metadata/09/09e28640d754a611467eebfb261ed749.info differ
diff --git a/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc b/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc
new file mode 100644
index 0000000000000000000000000000000000000000..e43746201d1da08ef2846162e234b93ba72b2926
Binary files /dev/null and b/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc differ
diff --git a/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc.info b/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc.info
new file mode 100644
index 0000000000000000000000000000000000000000..907202579052d69efded14a813e6077524dfd1a5
Binary files /dev/null and b/Library/metadata/0a/0a017569bfe174e4890797b4d64cbabc.info differ
diff --git a/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c b/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c
new file mode 100644
index 0000000000000000000000000000000000000000..100324d1c44f269672deb9335f85efb4ae408b8a
Binary files /dev/null and b/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c differ
diff --git a/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c.info b/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c.info
new file mode 100644
index 0000000000000000000000000000000000000000..e4923fb93f43e5f1b8811c95f38232511c4a4a71
Binary files /dev/null and b/Library/metadata/0a/0a1161a2ab6569948a0aa7899197218c.info differ
diff --git a/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4 b/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4
new file mode 100644
index 0000000000000000000000000000000000000000..e0ef640797e1861de5602537e4d9ecaec7c07530
Binary files /dev/null and b/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4 differ
diff --git a/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4.info b/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4.info
new file mode 100644
index 0000000000000000000000000000000000000000..052a222f30f54225a8fd32c681f39aad8d4f8f1d
Binary files /dev/null and b/Library/metadata/0a/0a2c7bcbdfe0a438999cb0653789cdf4.info differ
diff --git a/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733 b/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733
new file mode 100644
index 0000000000000000000000000000000000000000..dfb70408bc254702c2984d0a7eb251a2eb101815
Binary files /dev/null and b/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733 differ
diff --git a/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733.info b/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733.info
new file mode 100644
index 0000000000000000000000000000000000000000..7784b321bb9a46f15646a0a7f645b77e302548a8
Binary files /dev/null and b/Library/metadata/0a/0a560b2730802794bb411b5cc6f4b733.info differ
diff --git a/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec b/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec
new file mode 100644
index 0000000000000000000000000000000000000000..c633aaf38d7770549fc4df52214bd4a278d971f7
Binary files /dev/null and b/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec differ
diff --git a/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec.info b/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec.info
new file mode 100644
index 0000000000000000000000000000000000000000..6db6b9172eaa98e15c05b2d3d061219442b4c559
Binary files /dev/null and b/Library/metadata/0a/0a822dba3d5c4c85b150866e5442a5ec.info differ
diff --git a/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37 b/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37
new file mode 100644
index 0000000000000000000000000000000000000000..296c416c6e88cb22de8d6613a7ae6e5ee9b3000b
Binary files /dev/null and b/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37 differ
diff --git a/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37.info b/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37.info
new file mode 100644
index 0000000000000000000000000000000000000000..99189c797dda131d3f28f54a40a883b711496243
Binary files /dev/null and b/Library/metadata/0a/0a97c0e85f2237345a6e237feec5bc37.info differ
diff --git a/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5 b/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5
new file mode 100644
index 0000000000000000000000000000000000000000..8bd2fc33b06a09e847e9b87ea86fc70e412dba3b
Binary files /dev/null and b/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5 differ
diff --git a/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5.info b/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5.info
new file mode 100644
index 0000000000000000000000000000000000000000..8191042951c9e494c70fa06289679ce5a9a6f4ca
Binary files /dev/null and b/Library/metadata/0a/0ac756ba18b879e4eada0a3fb160e9f5.info differ
diff --git a/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b b/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b
new file mode 100644
index 0000000000000000000000000000000000000000..c05cbd6cf523c5c6ea133c2b5fe83ae268aee490
Binary files /dev/null and b/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b differ
diff --git a/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b.info b/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b.info
new file mode 100644
index 0000000000000000000000000000000000000000..6a18f0e9f40a228fe01572de076a361e9daf7c1f
Binary files /dev/null and b/Library/metadata/0a/0ad150c34736bf94fb8601fc94008f0b.info differ
diff --git a/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0 b/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0
new file mode 100644
index 0000000000000000000000000000000000000000..980b73e25001ec2abd30c455a6782d85b2bc9d43
Binary files /dev/null and b/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0 differ
diff --git a/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0.info b/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0.info
new file mode 100644
index 0000000000000000000000000000000000000000..2ee85da66cd165fb6f5bc1e90935761a9d60e9eb
Binary files /dev/null and b/Library/metadata/0c/0ccda09206e352449ab23e73c5697ac0.info differ
diff --git a/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a b/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a
new file mode 100644
index 0000000000000000000000000000000000000000..3e8a3a5760278561b17b6342c4ac8a61924fe72c
Binary files /dev/null and b/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a differ
diff --git a/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a.info b/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a.info
new file mode 100644
index 0000000000000000000000000000000000000000..855ffcc8e8e0bb9fbf48f7db106d878cd655e04b
Binary files /dev/null and b/Library/metadata/0d/0d2d0f36e67d4518a07df76235e91f9a.info differ
diff --git a/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70 b/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70
new file mode 100644
index 0000000000000000000000000000000000000000..77028cd4b43b61d797b21187a63de58bc642f2ce
Binary files /dev/null and b/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70 differ
diff --git a/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70.info b/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70.info
new file mode 100644
index 0000000000000000000000000000000000000000..c25815fa38460816e5ccef844bf5aa141cb64744
Binary files /dev/null and b/Library/metadata/0d/0d6871a7a55c28f4aa5bd1ecb8d8ae70.info differ
diff --git a/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9 b/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9
new file mode 100644
index 0000000000000000000000000000000000000000..476ff82c564aa3ebd924f306d3a99dc43f63e874
Binary files /dev/null and b/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9 differ
diff --git a/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9.info b/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9.info
new file mode 100644
index 0000000000000000000000000000000000000000..f2f23c92a6961b9280a0336c88c450547a4d37cd
Binary files /dev/null and b/Library/metadata/0d/0d9a36012a224080966c7b55896aa0f9.info differ
diff --git a/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b b/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b
new file mode 100644
index 0000000000000000000000000000000000000000..47421b679c3b0ca9bc9bc6e139e528de14e02bc3
Binary files /dev/null and b/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b differ
diff --git a/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b.info b/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b.info
new file mode 100644
index 0000000000000000000000000000000000000000..6c24f37e22e1bda1531ebc4264851438d251614b
Binary files /dev/null and b/Library/metadata/0e/0e0afa652c0031c48896a97b424d027b.info differ
diff --git a/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84 b/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84
new file mode 100644
index 0000000000000000000000000000000000000000..6bab80aebafa96688ed25dfa41aa83537d5f420d
Binary files /dev/null and b/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84 differ
diff --git a/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84.info b/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84.info
new file mode 100644
index 0000000000000000000000000000000000000000..3a895eaee258eabd7b47c64430c9ad7f5a903f84
Binary files /dev/null and b/Library/metadata/0e/0e372f1bbea04aa9bd68055d4105bd84.info differ
diff --git a/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd b/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd
new file mode 100644
index 0000000000000000000000000000000000000000..946d289709abee9457773e9741bb0fb46b59c765
Binary files /dev/null and b/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd differ
diff --git a/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd.info b/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd.info
new file mode 100644
index 0000000000000000000000000000000000000000..79267d34622c59dfb2dee310e2c12960e7004630
Binary files /dev/null and b/Library/metadata/0e/0e5892ce3054f6240b372183ded1ccbd.info differ
diff --git a/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a b/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a
new file mode 100644
index 0000000000000000000000000000000000000000..64fd08bdff4532a771e4bf5d3a84439ced3e15d8
Binary files /dev/null and b/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a differ
diff --git a/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a.info b/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a.info
new file mode 100644
index 0000000000000000000000000000000000000000..db5f172a95274123778c904a8aa8616882d8f2c6
Binary files /dev/null and b/Library/metadata/0e/0e73db1a8c9e2c041aaa07b85b05050a.info differ
diff --git a/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf b/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf
new file mode 100644
index 0000000000000000000000000000000000000000..47a5b86c60e210b24181bc55215d3b2a0431d960
Binary files /dev/null and b/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf differ
diff --git a/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf.info b/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf.info
new file mode 100644
index 0000000000000000000000000000000000000000..2761bff30f84c404cee4a3d2d96541ae555b84a4
Binary files /dev/null and b/Library/metadata/0e/0e751e877ed14d71a6b8e63ac54949cf.info differ
diff --git a/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e b/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e
new file mode 100644
index 0000000000000000000000000000000000000000..d47980ef5f99eca279461cf38f7970d3cf1daa2e
Binary files /dev/null and b/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e differ
diff --git a/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e.info b/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e.info
new file mode 100644
index 0000000000000000000000000000000000000000..bfa897edfa85f67b770e000cee4465e37f695d04
Binary files /dev/null and b/Library/metadata/0e/0ed5fa68ea41b754f916aecb437d4a7e.info differ
diff --git a/Library/metadata/0e/0edd86f97b0648f685604a5582cff608 b/Library/metadata/0e/0edd86f97b0648f685604a5582cff608
new file mode 100644
index 0000000000000000000000000000000000000000..331f6b6d01bdc87588abc18d68ef53a8fc18b6b6
Binary files /dev/null and b/Library/metadata/0e/0edd86f97b0648f685604a5582cff608 differ
diff --git a/Library/metadata/0e/0edd86f97b0648f685604a5582cff608.info b/Library/metadata/0e/0edd86f97b0648f685604a5582cff608.info
new file mode 100644
index 0000000000000000000000000000000000000000..9bc0509fa3ea2818af7b320f957f7b635074befb
Binary files /dev/null and b/Library/metadata/0e/0edd86f97b0648f685604a5582cff608.info differ
diff --git a/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48 b/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48
new file mode 100644
index 0000000000000000000000000000000000000000..b198bf43d7ef34e831cf8f6b11c8b21cf0da3991
Binary files /dev/null and b/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48 differ
diff --git a/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48.info b/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48.info
new file mode 100644
index 0000000000000000000000000000000000000000..35f7954184f2c289441935ce7a83a195a1cced42
Binary files /dev/null and b/Library/metadata/0f/0fd9a3df0a4d01a4aad043ea19bfdb48.info differ
diff --git a/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e b/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e
new file mode 100644
index 0000000000000000000000000000000000000000..290dc12939d68e2cd639b13d78c2ece57e8e3f38
Binary files /dev/null and b/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e differ
diff --git a/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e.info b/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e.info
new file mode 100644
index 0000000000000000000000000000000000000000..c28775ccbc5bf740e848778238aa2367d549c7c4
Binary files /dev/null and b/Library/metadata/0f/0fda7ebe61ab2164383d10e32efb9c6e.info differ
diff --git a/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0 b/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0
new file mode 100644
index 0000000000000000000000000000000000000000..84b8b464b1486a887c962ad34c246424c50f5686
Binary files /dev/null and b/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0 differ
diff --git a/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0.info b/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0.info
new file mode 100644
index 0000000000000000000000000000000000000000..0990746c56737e5a7df21fb3939818ce3ac2067c
Binary files /dev/null and b/Library/metadata/0f/0fe4c527c3aa3eb42912a1caafbbc6a0.info differ
diff --git a/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767 b/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767
new file mode 100644
index 0000000000000000000000000000000000000000..ebff2c1f96a13f8f6f515aa7620524b643f731c9
Binary files /dev/null and b/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767 differ
diff --git a/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767.info b/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767.info
new file mode 100644
index 0000000000000000000000000000000000000000..e363b1cf48533f1dc4f08c5c703aa48067d16b5d
Binary files /dev/null and b/Library/metadata/10/100d9ab85cbc1f84bbf38231d2b4d767.info differ
diff --git a/Library/metadata/10/10145f279f90346bbb61712ff585828b b/Library/metadata/10/10145f279f90346bbb61712ff585828b
new file mode 100644
index 0000000000000000000000000000000000000000..35a95414a57bfcee49a86a495b156395a0455d83
Binary files /dev/null and b/Library/metadata/10/10145f279f90346bbb61712ff585828b differ
diff --git a/Library/metadata/10/10145f279f90346bbb61712ff585828b.info b/Library/metadata/10/10145f279f90346bbb61712ff585828b.info
new file mode 100644
index 0000000000000000000000000000000000000000..1bc676b143a482f8fb610f48b14b7f904b656000
Binary files /dev/null and b/Library/metadata/10/10145f279f90346bbb61712ff585828b.info differ
diff --git a/Library/metadata/10/10468bc33db61834eaaeb6c259e19082 b/Library/metadata/10/10468bc33db61834eaaeb6c259e19082
new file mode 100644
index 0000000000000000000000000000000000000000..ab769ef0194a6dde03d11da8519b8649979c7cc6
Binary files /dev/null and b/Library/metadata/10/10468bc33db61834eaaeb6c259e19082 differ
diff --git a/Library/metadata/10/10468bc33db61834eaaeb6c259e19082.info b/Library/metadata/10/10468bc33db61834eaaeb6c259e19082.info
new file mode 100644
index 0000000000000000000000000000000000000000..5eee2209cb9c18ecacccd3657e4b1e9d8a7d2a09
Binary files /dev/null and b/Library/metadata/10/10468bc33db61834eaaeb6c259e19082.info differ
diff --git a/Library/metadata/10/1048a87135154606808bf2030da32d18 b/Library/metadata/10/1048a87135154606808bf2030da32d18
new file mode 100644
index 0000000000000000000000000000000000000000..6c0f34d95909e73c1135147acfdc0c71d75bbbed
Binary files /dev/null and b/Library/metadata/10/1048a87135154606808bf2030da32d18 differ
diff --git a/Library/metadata/10/1048a87135154606808bf2030da32d18.info b/Library/metadata/10/1048a87135154606808bf2030da32d18.info
new file mode 100644
index 0000000000000000000000000000000000000000..2d2ec97dfa647054cbd05f7148160bd12fc98c5a
Binary files /dev/null and b/Library/metadata/10/1048a87135154606808bf2030da32d18.info differ
diff --git a/Library/metadata/10/1067213df0c64b319bc81e73be809b1a b/Library/metadata/10/1067213df0c64b319bc81e73be809b1a
new file mode 100644
index 0000000000000000000000000000000000000000..407831500e68003987342e22ee352bc9bf0e8f15
Binary files /dev/null and b/Library/metadata/10/1067213df0c64b319bc81e73be809b1a differ
diff --git a/Library/metadata/10/1067213df0c64b319bc81e73be809b1a.info b/Library/metadata/10/1067213df0c64b319bc81e73be809b1a.info
new file mode 100644
index 0000000000000000000000000000000000000000..93e881d853260b1ef6d3f1de653094bbe3ef7709
Binary files /dev/null and b/Library/metadata/10/1067213df0c64b319bc81e73be809b1a.info differ
diff --git a/Library/metadata/10/10bf81265ad87424d946598c575f45a0 b/Library/metadata/10/10bf81265ad87424d946598c575f45a0
new file mode 100644
index 0000000000000000000000000000000000000000..2a5442ba5f4aa73d5d6063b78ddc538658137aa4
Binary files /dev/null and b/Library/metadata/10/10bf81265ad87424d946598c575f45a0 differ
diff --git a/Library/metadata/10/10bf81265ad87424d946598c575f45a0.info b/Library/metadata/10/10bf81265ad87424d946598c575f45a0.info
new file mode 100644
index 0000000000000000000000000000000000000000..eac930007b81ea45219246c43a97b550e639a031
Binary files /dev/null and b/Library/metadata/10/10bf81265ad87424d946598c575f45a0.info differ
diff --git a/Library/metadata/11/1158e311a3101950348dcecb1bebc42d b/Library/metadata/11/1158e311a3101950348dcecb1bebc42d
new file mode 100644
index 0000000000000000000000000000000000000000..31a77c88fa240e10bf6c4afc093a15edf543e063
Binary files /dev/null and b/Library/metadata/11/1158e311a3101950348dcecb1bebc42d differ
diff --git a/Library/metadata/11/1158e311a3101950348dcecb1bebc42d.info b/Library/metadata/11/1158e311a3101950348dcecb1bebc42d.info
new file mode 100644
index 0000000000000000000000000000000000000000..32ea3f8843c85814862a4f62264d55ea59f9cafd
Binary files /dev/null and b/Library/metadata/11/1158e311a3101950348dcecb1bebc42d.info differ
diff --git a/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b b/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b
new file mode 100644
index 0000000000000000000000000000000000000000..273583642495dc53e515fb3f74042b09bad74a64
Binary files /dev/null and b/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b differ
diff --git a/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b.info b/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b.info
new file mode 100644
index 0000000000000000000000000000000000000000..1a0ae04b34c377a53d347598d0d952b3a1b2371d
Binary files /dev/null and b/Library/metadata/11/11a6a034ab84493cbed6af5ae7aae78b.info differ
diff --git a/Library/metadata/12/12736c98af174f91827a26b66d2b01b9 b/Library/metadata/12/12736c98af174f91827a26b66d2b01b9
new file mode 100644
index 0000000000000000000000000000000000000000..62f03d030553221188269ce8afc2bfa47e84b2f4
Binary files /dev/null and b/Library/metadata/12/12736c98af174f91827a26b66d2b01b9 differ
diff --git a/Library/metadata/12/12736c98af174f91827a26b66d2b01b9.info b/Library/metadata/12/12736c98af174f91827a26b66d2b01b9.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d6caecfbd77b657e97fb7b2fdd4490ffcd4f904
Binary files /dev/null and b/Library/metadata/12/12736c98af174f91827a26b66d2b01b9.info differ
diff --git a/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8 b/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8
new file mode 100644
index 0000000000000000000000000000000000000000..cd131b8c61b37a8c0e494f9c93c81db22ffbbd52
Binary files /dev/null and b/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8 differ
diff --git a/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8.info b/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8.info
new file mode 100644
index 0000000000000000000000000000000000000000..78dff44e18b4be07edf56aed2fc9c6d26ac24e9d
Binary files /dev/null and b/Library/metadata/12/12b4de6fcc752004480f2dbaeacda3d8.info differ
diff --git a/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62 b/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62
new file mode 100644
index 0000000000000000000000000000000000000000..438d4cbdf2d8d0a5744ec38529c6fc8e4bb92666
Binary files /dev/null and b/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62 differ
diff --git a/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62.info b/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62.info
new file mode 100644
index 0000000000000000000000000000000000000000..e17f00e9714fcccbca2c33210ac896748137a66a
Binary files /dev/null and b/Library/metadata/13/1322fd896bbb15bb6e335591b766ae62.info differ
diff --git a/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972 b/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972
new file mode 100644
index 0000000000000000000000000000000000000000..f2cf5e4696c21190a6fd2c3e769305a07beb9c6b
Binary files /dev/null and b/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972 differ
diff --git a/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972.info b/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972.info
new file mode 100644
index 0000000000000000000000000000000000000000..967cba593a473cff4a95913181fe8d6fddecffaa
Binary files /dev/null and b/Library/metadata/13/133cd0d0f9e5dbe48a4d7f770147f972.info differ
diff --git a/Library/metadata/13/1360e4708272e7849b47057fdec534e0 b/Library/metadata/13/1360e4708272e7849b47057fdec534e0
new file mode 100644
index 0000000000000000000000000000000000000000..945790e0c08be0fb038a62b6a6c9487d01d9d9b8
Binary files /dev/null and b/Library/metadata/13/1360e4708272e7849b47057fdec534e0 differ
diff --git a/Library/metadata/13/1360e4708272e7849b47057fdec534e0.info b/Library/metadata/13/1360e4708272e7849b47057fdec534e0.info
new file mode 100644
index 0000000000000000000000000000000000000000..61b4164c05e6dbbc7aeffb0277d4e4cb7880e5c0
Binary files /dev/null and b/Library/metadata/13/1360e4708272e7849b47057fdec534e0.info differ
diff --git a/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531 b/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531
new file mode 100644
index 0000000000000000000000000000000000000000..c537d6ace324cc6f9b0b34288323e63c9fdb62bc
Binary files /dev/null and b/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531 differ
diff --git a/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531.info b/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531.info
new file mode 100644
index 0000000000000000000000000000000000000000..00fe87f8dcf3b3efce9d8755fbcbcb18b7365111
Binary files /dev/null and b/Library/metadata/13/1369382d2c5e64dc5b2ec0b6b0a94531.info differ
diff --git a/Library/metadata/13/138961c4434d141a987d96df1f8d7342 b/Library/metadata/13/138961c4434d141a987d96df1f8d7342
new file mode 100644
index 0000000000000000000000000000000000000000..32c4375fd24077a5828b43a5f5d0798a608c8ae8
Binary files /dev/null and b/Library/metadata/13/138961c4434d141a987d96df1f8d7342 differ
diff --git a/Library/metadata/13/138961c4434d141a987d96df1f8d7342.info b/Library/metadata/13/138961c4434d141a987d96df1f8d7342.info
new file mode 100644
index 0000000000000000000000000000000000000000..9e46cf03187791e8b7fb7a9c273277b1008d36ab
Binary files /dev/null and b/Library/metadata/13/138961c4434d141a987d96df1f8d7342.info differ
diff --git a/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db b/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db
new file mode 100644
index 0000000000000000000000000000000000000000..5b275f56b1382a6c72cb6897b377ad8f9b690c25
Binary files /dev/null and b/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db differ
diff --git a/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db.info b/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db.info
new file mode 100644
index 0000000000000000000000000000000000000000..ab4a8975801786231903cc561ff6857a457f1b9c
Binary files /dev/null and b/Library/metadata/13/13eb80ce50ac9c43cdbaf2109c0ec7db.info differ
diff --git a/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12 b/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12
new file mode 100644
index 0000000000000000000000000000000000000000..f750658d1fcbc2675b94736dfcd093d41f2d5923
Binary files /dev/null and b/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12 differ
diff --git a/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12.info b/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12.info
new file mode 100644
index 0000000000000000000000000000000000000000..76ecb3fe8e8debfa22c2fe664061cb9b0433ee65
Binary files /dev/null and b/Library/metadata/14/14ea57a7127c2344d973fb9befde6b12.info differ
diff --git a/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c b/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c
new file mode 100644
index 0000000000000000000000000000000000000000..a0d62400a757826d790fadeaeaa2a154a7f738ff
Binary files /dev/null and b/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c differ
diff --git a/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c.info b/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c.info
new file mode 100644
index 0000000000000000000000000000000000000000..edc35d241ec02a32c454ce2a32d6cd6464574472
Binary files /dev/null and b/Library/metadata/15/15a615c733aa240909fe0b28b0d5143c.info differ
diff --git a/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b b/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b
new file mode 100644
index 0000000000000000000000000000000000000000..a360bfb7ea8cd7d9080f01ae07ec57a6adfb6076
Binary files /dev/null and b/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b differ
diff --git a/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b.info b/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b.info
new file mode 100644
index 0000000000000000000000000000000000000000..7480e98e518878658d2237156cd7ef8cf692c5d6
Binary files /dev/null and b/Library/metadata/15/15bf9c691b85b41a39c18bee2f87e21b.info differ
diff --git a/Library/metadata/17/178008567c08e6d84014fa87825d10bb b/Library/metadata/17/178008567c08e6d84014fa87825d10bb
new file mode 100644
index 0000000000000000000000000000000000000000..de7c55e6bfa370447aac78d814ec669d94ce96ce
Binary files /dev/null and b/Library/metadata/17/178008567c08e6d84014fa87825d10bb differ
diff --git a/Library/metadata/17/178008567c08e6d84014fa87825d10bb.info b/Library/metadata/17/178008567c08e6d84014fa87825d10bb.info
new file mode 100644
index 0000000000000000000000000000000000000000..d3ad6556a1ec8b1cf782a58c96948670b2d154d3
Binary files /dev/null and b/Library/metadata/17/178008567c08e6d84014fa87825d10bb.info differ
diff --git a/Library/metadata/17/17b632677410799367a53dc7ab96a8c2 b/Library/metadata/17/17b632677410799367a53dc7ab96a8c2
new file mode 100644
index 0000000000000000000000000000000000000000..3e2e20dc937b3a9f21002fb550ec2618ce38e288
Binary files /dev/null and b/Library/metadata/17/17b632677410799367a53dc7ab96a8c2 differ
diff --git a/Library/metadata/17/17b632677410799367a53dc7ab96a8c2.info b/Library/metadata/17/17b632677410799367a53dc7ab96a8c2.info
new file mode 100644
index 0000000000000000000000000000000000000000..469960870622f6fc62924d2c80993440414aa167
Binary files /dev/null and b/Library/metadata/17/17b632677410799367a53dc7ab96a8c2.info differ
diff --git a/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f b/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f
new file mode 100644
index 0000000000000000000000000000000000000000..ce41f6c50ca6996d50912b9ee77a0550664f682d
Binary files /dev/null and b/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f differ
diff --git a/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f.info b/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f.info
new file mode 100644
index 0000000000000000000000000000000000000000..fb6a640e53cfad9fd3cd186cf26884f51f0ec1a9
Binary files /dev/null and b/Library/metadata/18/18775b51e3bd42299fd30bd036ea982f.info differ
diff --git a/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9 b/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9
new file mode 100644
index 0000000000000000000000000000000000000000..0c81ebfe3f5bc8149a33feac52d64d544dea3e2a
Binary files /dev/null and b/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9 differ
diff --git a/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9.info b/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9.info
new file mode 100644
index 0000000000000000000000000000000000000000..81368beb5e6be3634e425f96efe17542d4e19523
Binary files /dev/null and b/Library/metadata/18/18a4fadfef534684d5af39ca8dc48fe9.info differ
diff --git a/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2 b/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2
new file mode 100644
index 0000000000000000000000000000000000000000..13a3aaa28c3b47ab2259bd6fa53c756779818704
Binary files /dev/null and b/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2 differ
diff --git a/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2.info b/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2.info
new file mode 100644
index 0000000000000000000000000000000000000000..999c9ad3f34abfae238f0f148717929eb304e2a2
Binary files /dev/null and b/Library/metadata/19/1975a4f4aae21dc43abb86a5745e83b2.info differ
diff --git a/Library/metadata/19/199bcd69ad57f634088dde2a47357275 b/Library/metadata/19/199bcd69ad57f634088dde2a47357275
new file mode 100644
index 0000000000000000000000000000000000000000..0acdb1262ac8554ba107462953c4537ef33c8fab
Binary files /dev/null and b/Library/metadata/19/199bcd69ad57f634088dde2a47357275 differ
diff --git a/Library/metadata/19/199bcd69ad57f634088dde2a47357275.info b/Library/metadata/19/199bcd69ad57f634088dde2a47357275.info
new file mode 100644
index 0000000000000000000000000000000000000000..05671558ca6f4eed7120604217933048a722a6eb
Binary files /dev/null and b/Library/metadata/19/199bcd69ad57f634088dde2a47357275.info differ
diff --git a/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6 b/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6
new file mode 100644
index 0000000000000000000000000000000000000000..b4dc17b03ea54ffb2310781866f758fce8589c86
Binary files /dev/null and b/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6 differ
diff --git a/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6.info b/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6.info
new file mode 100644
index 0000000000000000000000000000000000000000..815d68f731e219258e09b3fe56840fca88a30a28
Binary files /dev/null and b/Library/metadata/1a/1a4266815e998967becf686f9c71f0a6.info differ
diff --git a/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396 b/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396
new file mode 100644
index 0000000000000000000000000000000000000000..2fedc300b6fb5fba0c06fe607010981d33d82c21
Binary files /dev/null and b/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396 differ
diff --git a/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396.info b/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396.info
new file mode 100644
index 0000000000000000000000000000000000000000..417d3e1e095e129fb09caeab95e2bc322d105c44
Binary files /dev/null and b/Library/metadata/1a/1adad61bfb44214ee3e887b5febc4396.info differ
diff --git a/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5 b/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5
new file mode 100644
index 0000000000000000000000000000000000000000..cdddb28f03c7f2ed0f9690df0712127045db66b2
Binary files /dev/null and b/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5 differ
diff --git a/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5.info b/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5.info
new file mode 100644
index 0000000000000000000000000000000000000000..b0c125a3473b912b7e8592120920892542f73d61
Binary files /dev/null and b/Library/metadata/1b/1b32bcce201b4494ea8848326290c5d5.info differ
diff --git a/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62 b/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62
new file mode 100644
index 0000000000000000000000000000000000000000..cda680c5ed52c5c7ab470653e714f4a3229e5e73
Binary files /dev/null and b/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62 differ
diff --git a/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62.info b/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62.info
new file mode 100644
index 0000000000000000000000000000000000000000..57d20fcf23ad8c396c08365343cbd49490f58884
Binary files /dev/null and b/Library/metadata/1b/1b355da31ea043feba0c03e35dd4bc62.info differ
diff --git a/Library/metadata/1c/1c147d10db452eb4b854a35f84472017 b/Library/metadata/1c/1c147d10db452eb4b854a35f84472017
new file mode 100644
index 0000000000000000000000000000000000000000..998bba88045bd5eaf9670f4ca1e82fc65875b21d
Binary files /dev/null and b/Library/metadata/1c/1c147d10db452eb4b854a35f84472017 differ
diff --git a/Library/metadata/1c/1c147d10db452eb4b854a35f84472017.info b/Library/metadata/1c/1c147d10db452eb4b854a35f84472017.info
new file mode 100644
index 0000000000000000000000000000000000000000..88999344e223b007a809ca5c36ec71d14b67e9c4
Binary files /dev/null and b/Library/metadata/1c/1c147d10db452eb4b854a35f84472017.info differ
diff --git a/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158 b/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158
new file mode 100644
index 0000000000000000000000000000000000000000..636b7ffcc5c46964035e1276308f78e04abced18
Binary files /dev/null and b/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158 differ
diff --git a/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158.info b/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158.info
new file mode 100644
index 0000000000000000000000000000000000000000..1847917990cd06255de72419e6b851fd4090a344
Binary files /dev/null and b/Library/metadata/1c/1c8dd2cfbcb28614298e3e774f8f5158.info differ
diff --git a/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8 b/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8
new file mode 100644
index 0000000000000000000000000000000000000000..fe08005f3bbbb7eadec65d76e9d3ffb5bb1ab683
Binary files /dev/null and b/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8 differ
diff --git a/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8.info b/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8.info
new file mode 100644
index 0000000000000000000000000000000000000000..e5b04a7269910dda4bd9bdf07925451de7a087d6
Binary files /dev/null and b/Library/metadata/1c/1cf2469083ffa484da4d78dd70d708e8.info differ
diff --git a/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f b/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f
new file mode 100644
index 0000000000000000000000000000000000000000..70fee51df5e668ed6e9ddb9f26e739a566046752
Binary files /dev/null and b/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f differ
diff --git a/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f.info b/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f.info
new file mode 100644
index 0000000000000000000000000000000000000000..ad0034621436902d51ab8039a31ad712959ed6aa
Binary files /dev/null and b/Library/metadata/1c/1cf679539c5e5499e8856aaacf1fc32f.info differ
diff --git a/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16 b/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16
new file mode 100644
index 0000000000000000000000000000000000000000..ef62bb170fe261d74bf42c8eed4cdc63a08f6d93
Binary files /dev/null and b/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16 differ
diff --git a/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16.info b/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16.info
new file mode 100644
index 0000000000000000000000000000000000000000..83c03052353f6d1e75028496a2a77f5f58eff056
Binary files /dev/null and b/Library/metadata/1d/1dd9abf3d2f84674fba983f0072dfb16.info differ
diff --git a/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a b/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a
new file mode 100644
index 0000000000000000000000000000000000000000..94b057707ec62eadd25fe81ca875f84ee899beff
Binary files /dev/null and b/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a differ
diff --git a/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a.info b/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a.info
new file mode 100644
index 0000000000000000000000000000000000000000..222a0a28bcd1935eb8f2d67facf3bad509c5a2a7
Binary files /dev/null and b/Library/metadata/1e/1e1802206d6c74c429a23a13c0caa93a.info differ
diff --git a/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237 b/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237
new file mode 100644
index 0000000000000000000000000000000000000000..98ebbc2e1351aa3d1caf623cfc40c8b9813c726a
Binary files /dev/null and b/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237 differ
diff --git a/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237.info b/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237.info
new file mode 100644
index 0000000000000000000000000000000000000000..669f97712956122ee87eeedb3da0f900ecb02316
Binary files /dev/null and b/Library/metadata/1f/1f19e8ef0e713c141937932ad4fb2237.info differ
diff --git a/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed b/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed
new file mode 100644
index 0000000000000000000000000000000000000000..4fa0277bb15478692278440f64f9ad956de95fe3
Binary files /dev/null and b/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed differ
diff --git a/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed.info b/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c8e3e2a8cce1debc100013456e450bdf2bc490a
Binary files /dev/null and b/Library/metadata/1f/1f8293163964a164c9380fc78d7949ed.info differ
diff --git a/Library/metadata/20/202d758d102b6854a9710c8b93db742c b/Library/metadata/20/202d758d102b6854a9710c8b93db742c
new file mode 100644
index 0000000000000000000000000000000000000000..8f239bbd4765dd4d20495d4448b7a943aaa379bd
Binary files /dev/null and b/Library/metadata/20/202d758d102b6854a9710c8b93db742c differ
diff --git a/Library/metadata/20/202d758d102b6854a9710c8b93db742c.info b/Library/metadata/20/202d758d102b6854a9710c8b93db742c.info
new file mode 100644
index 0000000000000000000000000000000000000000..ac766dcf3060e2b61cb953fc349bc7e71717aae1
Binary files /dev/null and b/Library/metadata/20/202d758d102b6854a9710c8b93db742c.info differ
diff --git a/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1 b/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1
new file mode 100644
index 0000000000000000000000000000000000000000..2a8f3f367dd315c6bb67aa4e108a43caf79dae66
Binary files /dev/null and b/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1 differ
diff --git a/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1.info b/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1.info
new file mode 100644
index 0000000000000000000000000000000000000000..fd0562ecd99a3022007972d630160d51836042ff
Binary files /dev/null and b/Library/metadata/20/2088d42f75d295f4883e76d5bf5dd0a1.info differ
diff --git a/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7 b/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7
new file mode 100644
index 0000000000000000000000000000000000000000..08bb5a7853ca4f2f9975775275b38b84e9d4311e
Binary files /dev/null and b/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7 differ
diff --git a/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7.info b/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7.info
new file mode 100644
index 0000000000000000000000000000000000000000..fa4009451cefabbf0b1d168e55cffaa73159d60f
Binary files /dev/null and b/Library/metadata/20/20a8ca0a6d82545f6bfd6f2d898d61f7.info differ
diff --git a/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa b/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa
new file mode 100644
index 0000000000000000000000000000000000000000..0d0c4dc5d52af4dee09f9e5f2f4379a5f9fa2ffd
Binary files /dev/null and b/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa differ
diff --git a/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa.info b/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa.info
new file mode 100644
index 0000000000000000000000000000000000000000..23dcded5499c8c1ac6bc74ce30e8fb304a87ca04
Binary files /dev/null and b/Library/metadata/20/20a9b557a46149dfbfa04a3a7080f5aa.info differ
diff --git a/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b b/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b
new file mode 100644
index 0000000000000000000000000000000000000000..afba7f1eb6ff094fa0df40116bee817f545b82ae
Binary files /dev/null and b/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b differ
diff --git a/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b.info b/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcf186418018b57243ddd777e3ca95ae7dd9f0fd
Binary files /dev/null and b/Library/metadata/20/20b8f635926422b43a3f5775ac9adb0b.info differ
diff --git a/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83 b/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83
new file mode 100644
index 0000000000000000000000000000000000000000..194868f2906e18cabd35045f9f3e6e8dc9c7dfe1
Binary files /dev/null and b/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83 differ
diff --git a/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83.info b/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83.info
new file mode 100644
index 0000000000000000000000000000000000000000..bbc0be13dd7a3a7f71f058dadcf5f29f01e01d50
Binary files /dev/null and b/Library/metadata/21/216f2bdd0a50a104fa4927f260551c83.info differ
diff --git a/Library/metadata/21/21c0044a7f964773be90d197a78e4703 b/Library/metadata/21/21c0044a7f964773be90d197a78e4703
new file mode 100644
index 0000000000000000000000000000000000000000..4a6d16b12c9a5891d29d0ac21b98a40f645ceb84
Binary files /dev/null and b/Library/metadata/21/21c0044a7f964773be90d197a78e4703 differ
diff --git a/Library/metadata/21/21c0044a7f964773be90d197a78e4703.info b/Library/metadata/21/21c0044a7f964773be90d197a78e4703.info
new file mode 100644
index 0000000000000000000000000000000000000000..5cbe650d01729455098cbc603a8320e7a8bdc450
Binary files /dev/null and b/Library/metadata/21/21c0044a7f964773be90d197a78e4703.info differ
diff --git a/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c b/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c
new file mode 100644
index 0000000000000000000000000000000000000000..27066fff26603f20b478f1e9ad7d2d734bead3b8
Binary files /dev/null and b/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c differ
diff --git a/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c.info b/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcab9ecd366d22883ea423e55c55d1feca9ff075
Binary files /dev/null and b/Library/metadata/21/21e48f4980ebb344e89af5790b3c9e7c.info differ
diff --git a/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624 b/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624
new file mode 100644
index 0000000000000000000000000000000000000000..9801f2c564be9a40e08067ddee8cb37a1d2a4879
Binary files /dev/null and b/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624 differ
diff --git a/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624.info b/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624.info
new file mode 100644
index 0000000000000000000000000000000000000000..86ccc3c3cf6b09356cd701e369f953705ee4ef26
Binary files /dev/null and b/Library/metadata/21/21f21f8522e7b5c4dae06e5fde95b624.info differ
diff --git a/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432 b/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432
new file mode 100644
index 0000000000000000000000000000000000000000..ae954382c97298785e62c8b2eaa989c8023cc82e
Binary files /dev/null and b/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432 differ
diff --git a/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432.info b/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432.info
new file mode 100644
index 0000000000000000000000000000000000000000..8a7a81d377fd4098414b82d839ed8188897b69e0
Binary files /dev/null and b/Library/metadata/22/220224b43fc464c28bc0e8de8f54a432.info differ
diff --git a/Library/metadata/22/220e9325710f4235a43492dd1ee4980d b/Library/metadata/22/220e9325710f4235a43492dd1ee4980d
new file mode 100644
index 0000000000000000000000000000000000000000..084a4bf51e367a1e457f9dbef7404254b1c75fe4
Binary files /dev/null and b/Library/metadata/22/220e9325710f4235a43492dd1ee4980d differ
diff --git a/Library/metadata/22/220e9325710f4235a43492dd1ee4980d.info b/Library/metadata/22/220e9325710f4235a43492dd1ee4980d.info
new file mode 100644
index 0000000000000000000000000000000000000000..aa17b7edf11632087417890f53a2e078c8cfcb86
Binary files /dev/null and b/Library/metadata/22/220e9325710f4235a43492dd1ee4980d.info differ
diff --git a/Library/metadata/22/223080c568c0efc498707c17e5a79972 b/Library/metadata/22/223080c568c0efc498707c17e5a79972
new file mode 100644
index 0000000000000000000000000000000000000000..5ad5c4ab4efb08ce4794e0dd0573294cd833a89d
Binary files /dev/null and b/Library/metadata/22/223080c568c0efc498707c17e5a79972 differ
diff --git a/Library/metadata/22/223080c568c0efc498707c17e5a79972.info b/Library/metadata/22/223080c568c0efc498707c17e5a79972.info
new file mode 100644
index 0000000000000000000000000000000000000000..c6c132e29dd204ad726b1c7adc7a585c62f28a0a
Binary files /dev/null and b/Library/metadata/22/223080c568c0efc498707c17e5a79972.info differ
diff --git a/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002 b/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002
new file mode 100644
index 0000000000000000000000000000000000000000..f1560aac33f408813eddd53739a110aa7638c23d
Binary files /dev/null and b/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002 differ
diff --git a/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002.info b/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002.info
new file mode 100644
index 0000000000000000000000000000000000000000..c74eeb601291fdb2ee77e841173bc1872b1d5c61
Binary files /dev/null and b/Library/metadata/22/22464cf7ab0243a6bf9c79851183b002.info differ
diff --git a/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05 b/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05
new file mode 100644
index 0000000000000000000000000000000000000000..feeeca8b4e34f2520540fd2d022d57706b3f8277
Binary files /dev/null and b/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05 differ
diff --git a/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05.info b/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05.info
new file mode 100644
index 0000000000000000000000000000000000000000..390d0cc1b0cb1d5a71a9c43613baecc5f1e3e0f0
Binary files /dev/null and b/Library/metadata/22/224ede67b4f3a4109bfec4d5cb161b05.info differ
diff --git a/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15 b/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15
new file mode 100644
index 0000000000000000000000000000000000000000..027f0abe21a3f3bdac01cf43fd68277aaa2f552f
Binary files /dev/null and b/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15 differ
diff --git a/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15.info b/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15.info
new file mode 100644
index 0000000000000000000000000000000000000000..efa7796c90c41495bea261820555b9e4f668ef84
Binary files /dev/null and b/Library/metadata/23/2300e75732d74890b38a8ff257a3ae15.info differ
diff --git a/Library/metadata/23/23805a7a1623842b0b7b21158066bd90 b/Library/metadata/23/23805a7a1623842b0b7b21158066bd90
new file mode 100644
index 0000000000000000000000000000000000000000..cc820843cdc60a467ce2709636622eaa26afc4c0
Binary files /dev/null and b/Library/metadata/23/23805a7a1623842b0b7b21158066bd90 differ
diff --git a/Library/metadata/23/23805a7a1623842b0b7b21158066bd90.info b/Library/metadata/23/23805a7a1623842b0b7b21158066bd90.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7a6a30f020a03437f670fd5c18076a7cdc356d1
Binary files /dev/null and b/Library/metadata/23/23805a7a1623842b0b7b21158066bd90.info differ
diff --git a/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794 b/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794
new file mode 100644
index 0000000000000000000000000000000000000000..7442f5e669b5f331ce629446caea2a570f5ea644
Binary files /dev/null and b/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794 differ
diff --git a/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794.info b/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794.info
new file mode 100644
index 0000000000000000000000000000000000000000..f3590faef3b3dd1947a3a9b49cf56a36caa44d79
Binary files /dev/null and b/Library/metadata/23/23a562f2cac6401f9f91251c68a1a794.info differ
diff --git a/Library/metadata/23/23a56a19774ed42b6b65646af08a003c b/Library/metadata/23/23a56a19774ed42b6b65646af08a003c
new file mode 100644
index 0000000000000000000000000000000000000000..207ae0d6bf31764b89d93732fbbbab6b55d6dab6
Binary files /dev/null and b/Library/metadata/23/23a56a19774ed42b6b65646af08a003c differ
diff --git a/Library/metadata/23/23a56a19774ed42b6b65646af08a003c.info b/Library/metadata/23/23a56a19774ed42b6b65646af08a003c.info
new file mode 100644
index 0000000000000000000000000000000000000000..4962ab9d3a5659c27ca95341ed7cc1e6cf3ece89
Binary files /dev/null and b/Library/metadata/23/23a56a19774ed42b6b65646af08a003c.info differ
diff --git a/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2 b/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2
new file mode 100644
index 0000000000000000000000000000000000000000..7dc9fb07dbe27d14e6ec909099ca674e6f559c10
Binary files /dev/null and b/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2 differ
diff --git a/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2.info b/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2.info
new file mode 100644
index 0000000000000000000000000000000000000000..15cb1092c86b5bf7ec7ad7b28e3ea841a1387819
Binary files /dev/null and b/Library/metadata/24/240551e3142f04b0ca801ce8eb645ba2.info differ
diff --git a/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb b/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb
new file mode 100644
index 0000000000000000000000000000000000000000..9ee77380f248c031a641b458a5b9363ec60bd073
Binary files /dev/null and b/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb differ
diff --git a/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb.info b/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb.info
new file mode 100644
index 0000000000000000000000000000000000000000..92d5c55422e5ecbf12a765e0b343bbf015459052
Binary files /dev/null and b/Library/metadata/25/25ebe415cc14c4f4ea15c34a796b75bb.info differ
diff --git a/Library/metadata/26/2622838afa3284cc882c48ceea4c8220 b/Library/metadata/26/2622838afa3284cc882c48ceea4c8220
new file mode 100644
index 0000000000000000000000000000000000000000..354e6f88978217e70f6cd9f2ca65197e5a8e1c7d
Binary files /dev/null and b/Library/metadata/26/2622838afa3284cc882c48ceea4c8220 differ
diff --git a/Library/metadata/26/2622838afa3284cc882c48ceea4c8220.info b/Library/metadata/26/2622838afa3284cc882c48ceea4c8220.info
new file mode 100644
index 0000000000000000000000000000000000000000..84423134bf39660eec39ff80ad1a4a2034506e1b
Binary files /dev/null and b/Library/metadata/26/2622838afa3284cc882c48ceea4c8220.info differ
diff --git a/Library/metadata/26/2693abf1b26506b4ca9445b37205a238 b/Library/metadata/26/2693abf1b26506b4ca9445b37205a238
new file mode 100644
index 0000000000000000000000000000000000000000..535f27057a4a2aab964c958e2254bf6546947bce
Binary files /dev/null and b/Library/metadata/26/2693abf1b26506b4ca9445b37205a238 differ
diff --git a/Library/metadata/26/2693abf1b26506b4ca9445b37205a238.info b/Library/metadata/26/2693abf1b26506b4ca9445b37205a238.info
new file mode 100644
index 0000000000000000000000000000000000000000..1a6077d3ae5f3e0818a24cfce7f41e642341882c
Binary files /dev/null and b/Library/metadata/26/2693abf1b26506b4ca9445b37205a238.info differ
diff --git a/Library/metadata/26/26a4f29db434fd79025c91f6126382cc b/Library/metadata/26/26a4f29db434fd79025c91f6126382cc
new file mode 100644
index 0000000000000000000000000000000000000000..ef5fb0c7a85b65e662eca1072292fefe4d21f5fb
Binary files /dev/null and b/Library/metadata/26/26a4f29db434fd79025c91f6126382cc differ
diff --git a/Library/metadata/26/26a4f29db434fd79025c91f6126382cc.info b/Library/metadata/26/26a4f29db434fd79025c91f6126382cc.info
new file mode 100644
index 0000000000000000000000000000000000000000..047600ffdd7898f91ede8a3ee9eee1088b92d211
Binary files /dev/null and b/Library/metadata/26/26a4f29db434fd79025c91f6126382cc.info differ
diff --git a/Library/metadata/27/2705215ac5b84b70bacc50632be6e391 b/Library/metadata/27/2705215ac5b84b70bacc50632be6e391
new file mode 100644
index 0000000000000000000000000000000000000000..36d42c9d66d23b3f9362b24ecb475b4b632119aa
Binary files /dev/null and b/Library/metadata/27/2705215ac5b84b70bacc50632be6e391 differ
diff --git a/Library/metadata/27/2705215ac5b84b70bacc50632be6e391.info b/Library/metadata/27/2705215ac5b84b70bacc50632be6e391.info
new file mode 100644
index 0000000000000000000000000000000000000000..ae61269cc25f35290c3056d2cd7ee1273444890f
Binary files /dev/null and b/Library/metadata/27/2705215ac5b84b70bacc50632be6e391.info differ
diff --git a/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd b/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd
new file mode 100644
index 0000000000000000000000000000000000000000..d2421e21464e35004bd169c01421c70594d5738f
Binary files /dev/null and b/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd differ
diff --git a/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd.info b/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd.info
new file mode 100644
index 0000000000000000000000000000000000000000..e2c28147465ff3df8aefbe7f9b90a04611dae4a5
Binary files /dev/null and b/Library/metadata/27/27a0335dab59ec542aadd6636a5b4ebd.info differ
diff --git a/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff b/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff
new file mode 100644
index 0000000000000000000000000000000000000000..620c3420fb5e7aba37c9c48597b4a06f14f1d449
Binary files /dev/null and b/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff differ
diff --git a/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff.info b/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff.info
new file mode 100644
index 0000000000000000000000000000000000000000..1da925dd91d48c86f09c69a345fb4b7f6ca4ff7f
Binary files /dev/null and b/Library/metadata/27/27df3b12f30d0b74a9b10a3968c402ff.info differ
diff --git a/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc b/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc
new file mode 100644
index 0000000000000000000000000000000000000000..ab5559e87c10be72228f11295b09c8348a2e4ba4
Binary files /dev/null and b/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc differ
diff --git a/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc.info b/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d03b4eb106427bb7c24fad3e62faf487f549dde
Binary files /dev/null and b/Library/metadata/28/2808ba6bccb2478ec9c7209d8bf1f3cc.info differ
diff --git a/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7 b/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7
new file mode 100644
index 0000000000000000000000000000000000000000..9f849ff3ea0dff497b51ebe41a7951350f05c203
Binary files /dev/null and b/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7 differ
diff --git a/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7.info b/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7.info
new file mode 100644
index 0000000000000000000000000000000000000000..9418068069963564c532f255ff368d41de354fb4
Binary files /dev/null and b/Library/metadata/28/28375447bcea455c9b51a6650b10c9d7.info differ
diff --git a/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b b/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b
new file mode 100644
index 0000000000000000000000000000000000000000..0c1b542b789e238768607745ef0424b51c06c232
Binary files /dev/null and b/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b differ
diff --git a/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b.info b/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b.info
new file mode 100644
index 0000000000000000000000000000000000000000..71b0b55a453489d24ff48304f097facb4092f142
Binary files /dev/null and b/Library/metadata/28/284b30b43543abe4da8d5625aa37ff6b.info differ
diff --git a/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6 b/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6
new file mode 100644
index 0000000000000000000000000000000000000000..d5b1e30775f7cf8bd15cb2feab98df6d3f78d849
Binary files /dev/null and b/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6 differ
diff --git a/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6.info b/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6.info
new file mode 100644
index 0000000000000000000000000000000000000000..2c4e4b63f688a834ccf7546151eb3d0af10758d1
Binary files /dev/null and b/Library/metadata/28/28542eca5f1b4c64813acfbd512524b6.info differ
diff --git a/Library/metadata/29/293182c4d29604c05b6724ae00fd121a b/Library/metadata/29/293182c4d29604c05b6724ae00fd121a
new file mode 100644
index 0000000000000000000000000000000000000000..e1feb295016dcb0f014b207da54785dc633f0b03
Binary files /dev/null and b/Library/metadata/29/293182c4d29604c05b6724ae00fd121a differ
diff --git a/Library/metadata/29/293182c4d29604c05b6724ae00fd121a.info b/Library/metadata/29/293182c4d29604c05b6724ae00fd121a.info
new file mode 100644
index 0000000000000000000000000000000000000000..613a9145207d64da79f2672b782022a1fb4d22f3
Binary files /dev/null and b/Library/metadata/29/293182c4d29604c05b6724ae00fd121a.info differ
diff --git a/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52 b/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52
new file mode 100644
index 0000000000000000000000000000000000000000..f14f455933a60bd6e82b38ba1ecbe666195e08d0
Binary files /dev/null and b/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52 differ
diff --git a/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52.info b/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52.info
new file mode 100644
index 0000000000000000000000000000000000000000..67c30ba98e24e44569768f612b44bf4ccbaf8d8e
Binary files /dev/null and b/Library/metadata/29/29ed76ee8f63b2b488d2c8260c44dc52.info differ
diff --git a/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6 b/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6
new file mode 100644
index 0000000000000000000000000000000000000000..16c43db8b9b14d5f5cadc9be762fae0dc678fc6f
Binary files /dev/null and b/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6 differ
diff --git a/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6.info b/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6.info
new file mode 100644
index 0000000000000000000000000000000000000000..527a6dedd22fe73548a1c6696c56239660fd49ce
Binary files /dev/null and b/Library/metadata/29/29f9c6e82c799cd4eb0146d6c41be8e6.info differ
diff --git a/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694 b/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694
new file mode 100644
index 0000000000000000000000000000000000000000..dbbb60135035a3f48e949f930ba3ecf49635cd51
Binary files /dev/null and b/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694 differ
diff --git a/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694.info b/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694.info
new file mode 100644
index 0000000000000000000000000000000000000000..e416801ea8f36ee3cf96894918a7a097bc8bf143
Binary files /dev/null and b/Library/metadata/2a/2a3f4f8c4e2df41108f55825c24ff694.info differ
diff --git a/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22 b/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22
new file mode 100644
index 0000000000000000000000000000000000000000..e8984c0cba151ce006fcbbb6f102b1114f30221c
Binary files /dev/null and b/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22 differ
diff --git a/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22.info b/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22.info
new file mode 100644
index 0000000000000000000000000000000000000000..967ec54c5df229e6191a300cb91e72eb8f0815c7
Binary files /dev/null and b/Library/metadata/2a/2ad252fddebabb0499524e3c1692bd22.info differ
diff --git a/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1 b/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1
new file mode 100644
index 0000000000000000000000000000000000000000..c61205ed2673e9469e3ed888d06c7b58189ce15b
Binary files /dev/null and b/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1 differ
diff --git a/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1.info b/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1.info
new file mode 100644
index 0000000000000000000000000000000000000000..75187136280db21b6368e18cc3c275fa3f9a28dc
Binary files /dev/null and b/Library/metadata/2b/2b2be9ee9f41a4b2db6b502697ba31b1.info differ
diff --git a/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362 b/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362
new file mode 100644
index 0000000000000000000000000000000000000000..e7d6628a08cbffdbc8c9767d64b3b676d27d93d7
Binary files /dev/null and b/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362 differ
diff --git a/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362.info b/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362.info
new file mode 100644
index 0000000000000000000000000000000000000000..1bc6f64fcdfa060ea8d924b646fbc838e7c5d566
Binary files /dev/null and b/Library/metadata/2b/2b2fb3d14f555754480b3789a4f32362.info differ
diff --git a/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d b/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d
new file mode 100644
index 0000000000000000000000000000000000000000..bd5116201bf9409066100ad668226cbf0308f84a
Binary files /dev/null and b/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d differ
diff --git a/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d.info b/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d.info
new file mode 100644
index 0000000000000000000000000000000000000000..5c14574f506a929b3380897c283e77b625250a41
Binary files /dev/null and b/Library/metadata/2b/2b3002c18d29d41b0898ab58bc6ee10d.info differ
diff --git a/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275 b/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275
new file mode 100644
index 0000000000000000000000000000000000000000..9a59ea63d8349bf166424c6d2cc9e993d0e67782
Binary files /dev/null and b/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275 differ
diff --git a/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275.info b/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275.info
new file mode 100644
index 0000000000000000000000000000000000000000..da5d91d4b521099cdc15811f82eb8ebbb690c804
Binary files /dev/null and b/Library/metadata/2b/2bb7541eba52d2049b6b4c7c63bca275.info differ
diff --git a/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb b/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb
new file mode 100644
index 0000000000000000000000000000000000000000..3ecebdb1a6bd36dd7402864e2cbfaeef9c4dfcca
Binary files /dev/null and b/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb differ
diff --git a/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb.info b/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb.info
new file mode 100644
index 0000000000000000000000000000000000000000..0b97d787d07eeeb505292b0353b5ae994ac43177
Binary files /dev/null and b/Library/metadata/2c/2c814623cb42764d304be0c5ddd03ceb.info differ
diff --git a/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db b/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db
new file mode 100644
index 0000000000000000000000000000000000000000..0a4dd753ae4ad7f9acf01c01e96b9d8d64a6ccf5
Binary files /dev/null and b/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db differ
diff --git a/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db.info b/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db.info
new file mode 100644
index 0000000000000000000000000000000000000000..145243c0825ac16a1c34a4c2dc26d4854bc889f6
Binary files /dev/null and b/Library/metadata/2c/2cbe851e085f02b4d83fd75a102867db.info differ
diff --git a/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe b/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe
new file mode 100644
index 0000000000000000000000000000000000000000..3690b55351c153ba009cd8379e70e0dc259e1db9
Binary files /dev/null and b/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe differ
diff --git a/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe.info b/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe.info
new file mode 100644
index 0000000000000000000000000000000000000000..12a8c827ac44636ba3c364447eac7556baaa668a
Binary files /dev/null and b/Library/metadata/2c/2ce4bbcc4722440890a03312706037fe.info differ
diff --git a/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a b/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a
new file mode 100644
index 0000000000000000000000000000000000000000..1c5b6fa95128e60ff76c39b2d69b6690a95b8a7f
Binary files /dev/null and b/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a differ
diff --git a/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a.info b/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a.info
new file mode 100644
index 0000000000000000000000000000000000000000..f4aa9537aa098e4ccaa4b3e5ce95c38a21a3efe1
Binary files /dev/null and b/Library/metadata/2d/2d142b475fbfb8cf12ba3a795194300a.info differ
diff --git a/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2 b/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2
new file mode 100644
index 0000000000000000000000000000000000000000..cc0579d790426d0502aad44cd9f2ae50e09286c4
Binary files /dev/null and b/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2 differ
diff --git a/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2.info b/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2.info
new file mode 100644
index 0000000000000000000000000000000000000000..aa2c9a1f01a8eb377fe478e1932ea1e8d247fbc5
Binary files /dev/null and b/Library/metadata/2d/2d4ca193c425e8943957b8929c028cc2.info differ
diff --git a/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540 b/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540
new file mode 100644
index 0000000000000000000000000000000000000000..1998accac4dbdb27d8a567290291408273725af2
Binary files /dev/null and b/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540 differ
diff --git a/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540.info b/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540.info
new file mode 100644
index 0000000000000000000000000000000000000000..b8db6a0f5394aea91d709d7ee4695086e71a1452
Binary files /dev/null and b/Library/metadata/2d/2d4d46c70fdd242668a56e99799e8540.info differ
diff --git a/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0 b/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0
new file mode 100644
index 0000000000000000000000000000000000000000..7b0d985a5333af3a35249e8a453898bcae3cbb12
Binary files /dev/null and b/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0 differ
diff --git a/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0.info b/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0.info
new file mode 100644
index 0000000000000000000000000000000000000000..5c8c773ba917da3b0b27b81c0e68948929c19c38
Binary files /dev/null and b/Library/metadata/2d/2d6ba5cbe47e6ad3c87474c56174d4e0.info differ
diff --git a/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f b/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f
new file mode 100644
index 0000000000000000000000000000000000000000..ef975ceee4ea0dd9dcf649b1f1bab110ab05584f
Binary files /dev/null and b/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f differ
diff --git a/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f.info b/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f.info
new file mode 100644
index 0000000000000000000000000000000000000000..b296643dd66628d9a702f5ad1daddd534228aacf
Binary files /dev/null and b/Library/metadata/2d/2d77b2d58287d46a6a61f12c861bfc2f.info differ
diff --git a/Library/metadata/2d/2da0c512f12947e489f739169773d7ca b/Library/metadata/2d/2da0c512f12947e489f739169773d7ca
new file mode 100644
index 0000000000000000000000000000000000000000..ae3d5137a26e641947f43af928a0d310d5791c21
Binary files /dev/null and b/Library/metadata/2d/2da0c512f12947e489f739169773d7ca differ
diff --git a/Library/metadata/2d/2da0c512f12947e489f739169773d7ca.info b/Library/metadata/2d/2da0c512f12947e489f739169773d7ca.info
new file mode 100644
index 0000000000000000000000000000000000000000..971f3ef63476172febf31d18dd0a6bdb6fc527e0
Binary files /dev/null and b/Library/metadata/2d/2da0c512f12947e489f739169773d7ca.info differ
diff --git a/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0 b/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0
new file mode 100644
index 0000000000000000000000000000000000000000..02c0c82544155013190cac13b1b484890733d249
Binary files /dev/null and b/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0 differ
diff --git a/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0.info b/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0.info
new file mode 100644
index 0000000000000000000000000000000000000000..f2849809ed883db163f5b4b4dfaf4247d60e95c3
Binary files /dev/null and b/Library/metadata/2d/2da27f5fe80a3a549ac7331d9f52f5f0.info differ
diff --git a/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87 b/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87
new file mode 100644
index 0000000000000000000000000000000000000000..f2edf606ef04cde0def7dafcd77b80682c532ab3
Binary files /dev/null and b/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87 differ
diff --git a/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87.info b/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87.info
new file mode 100644
index 0000000000000000000000000000000000000000..82198e72253e9ea49efd6e80f64838d9da8ea328
Binary files /dev/null and b/Library/metadata/2d/2dd2c9ad1fc60bd4bb8b1abece62ee87.info differ
diff --git a/Library/metadata/2f/2f1849b9179b464381598f68663790d3 b/Library/metadata/2f/2f1849b9179b464381598f68663790d3
new file mode 100644
index 0000000000000000000000000000000000000000..ccb0fb58a6f22e3500a99b319d67e2fe293a9b2a
Binary files /dev/null and b/Library/metadata/2f/2f1849b9179b464381598f68663790d3 differ
diff --git a/Library/metadata/2f/2f1849b9179b464381598f68663790d3.info b/Library/metadata/2f/2f1849b9179b464381598f68663790d3.info
new file mode 100644
index 0000000000000000000000000000000000000000..cde28d7758a349014d52239441a629612dd608e4
Binary files /dev/null and b/Library/metadata/2f/2f1849b9179b464381598f68663790d3.info differ
diff --git a/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e b/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e
new file mode 100644
index 0000000000000000000000000000000000000000..a08d0afa116657311aa95d018b1603936d19a004
Binary files /dev/null and b/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e differ
diff --git a/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e.info b/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e.info
new file mode 100644
index 0000000000000000000000000000000000000000..532671c1680f9857981f6f286d13a03dc3599bb5
Binary files /dev/null and b/Library/metadata/2f/2f1d33abb004b44cb90ec83a2bfe872e.info differ
diff --git a/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c b/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c
new file mode 100644
index 0000000000000000000000000000000000000000..d9055ebd02ab402733fc47c1518c25673fc2ce80
Binary files /dev/null and b/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c differ
diff --git a/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c.info b/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c.info
new file mode 100644
index 0000000000000000000000000000000000000000..10280a4b08ad94355e0e8b50fc4cba72837593cc
Binary files /dev/null and b/Library/metadata/2f/2fd6421f253b4ef1a19526541f9ffc0c.info differ
diff --git a/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898 b/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898
new file mode 100644
index 0000000000000000000000000000000000000000..ac04d26f92de5fe583cbc7e183de366cd0b331f7
Binary files /dev/null and b/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898 differ
diff --git a/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898.info b/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898.info
new file mode 100644
index 0000000000000000000000000000000000000000..d00adced65bbd44ba75d2e1b18f4eda02f4b608e
Binary files /dev/null and b/Library/metadata/30/301fbaa0e62e44fd2a7383bd338a2898.info differ
diff --git a/Library/metadata/30/3069a00b8c364df395994d7d379e0a99 b/Library/metadata/30/3069a00b8c364df395994d7d379e0a99
new file mode 100644
index 0000000000000000000000000000000000000000..3ddc068ccbf6422db114ea71254d43b93c40a12b
Binary files /dev/null and b/Library/metadata/30/3069a00b8c364df395994d7d379e0a99 differ
diff --git a/Library/metadata/30/3069a00b8c364df395994d7d379e0a99.info b/Library/metadata/30/3069a00b8c364df395994d7d379e0a99.info
new file mode 100644
index 0000000000000000000000000000000000000000..b1d92fe58bdcaaf414aec5950622a819ba85fc07
Binary files /dev/null and b/Library/metadata/30/3069a00b8c364df395994d7d379e0a99.info differ
diff --git a/Library/metadata/30/30a939dce2fd4073955f2f20e659d506 b/Library/metadata/30/30a939dce2fd4073955f2f20e659d506
new file mode 100644
index 0000000000000000000000000000000000000000..81c1293197b8becf9425ccd798adcd6457de948a
Binary files /dev/null and b/Library/metadata/30/30a939dce2fd4073955f2f20e659d506 differ
diff --git a/Library/metadata/30/30a939dce2fd4073955f2f20e659d506.info b/Library/metadata/30/30a939dce2fd4073955f2f20e659d506.info
new file mode 100644
index 0000000000000000000000000000000000000000..d7cd41764bc1cb1eac407ff8762ccb35acc3bfbd
Binary files /dev/null and b/Library/metadata/30/30a939dce2fd4073955f2f20e659d506.info differ
diff --git a/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a b/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a
new file mode 100644
index 0000000000000000000000000000000000000000..8fe11ecf8c8f96b31a38cb21fdd375ba6fe693a3
Binary files /dev/null and b/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a differ
diff --git a/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a.info b/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a.info
new file mode 100644
index 0000000000000000000000000000000000000000..c5c1dbe15ad8ca403f2021c454962d083c8f97f3
Binary files /dev/null and b/Library/metadata/30/30aa3194afbe44a72aa7ec76cb2bab8a.info differ
diff --git a/Library/metadata/30/30bed781e402439ab8ce4e3357708115 b/Library/metadata/30/30bed781e402439ab8ce4e3357708115
new file mode 100644
index 0000000000000000000000000000000000000000..859bcdb45e65c37fc4b9494b0e1ae5dd879afd4b
Binary files /dev/null and b/Library/metadata/30/30bed781e402439ab8ce4e3357708115 differ
diff --git a/Library/metadata/30/30bed781e402439ab8ce4e3357708115.info b/Library/metadata/30/30bed781e402439ab8ce4e3357708115.info
new file mode 100644
index 0000000000000000000000000000000000000000..d09191e778b7be1e2a1d70e33407bbc4b6fdb616
Binary files /dev/null and b/Library/metadata/30/30bed781e402439ab8ce4e3357708115.info differ
diff --git a/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb b/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb
new file mode 100644
index 0000000000000000000000000000000000000000..a47a582b9d8d4dcb490241f65815eb580961ae3f
Binary files /dev/null and b/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb differ
diff --git a/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb.info b/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb.info
new file mode 100644
index 0000000000000000000000000000000000000000..f4bf8e33d8e3378e3dfa0fc5d58976de727617d7
Binary files /dev/null and b/Library/metadata/31/31109f647481a1b4ca46df2bdca9edeb.info differ
diff --git a/Library/metadata/31/316dbafe2b147704784432ea15a700a3 b/Library/metadata/31/316dbafe2b147704784432ea15a700a3
new file mode 100644
index 0000000000000000000000000000000000000000..a12f548f15286605478e8d52c98ee171206575be
Binary files /dev/null and b/Library/metadata/31/316dbafe2b147704784432ea15a700a3 differ
diff --git a/Library/metadata/31/316dbafe2b147704784432ea15a700a3.info b/Library/metadata/31/316dbafe2b147704784432ea15a700a3.info
new file mode 100644
index 0000000000000000000000000000000000000000..238f2a6e4d9c80a3fc03f96b29cca692eacc13f4
Binary files /dev/null and b/Library/metadata/31/316dbafe2b147704784432ea15a700a3.info differ
diff --git a/Library/metadata/32/3200477f9e4824f4db91b739891f51ef b/Library/metadata/32/3200477f9e4824f4db91b739891f51ef
new file mode 100644
index 0000000000000000000000000000000000000000..f82d293dad92123b16caa762340365558431b599
Binary files /dev/null and b/Library/metadata/32/3200477f9e4824f4db91b739891f51ef differ
diff --git a/Library/metadata/32/3200477f9e4824f4db91b739891f51ef.info b/Library/metadata/32/3200477f9e4824f4db91b739891f51ef.info
new file mode 100644
index 0000000000000000000000000000000000000000..1ca59ecf832d7088d37f2ae4aedb3d51d4b1537d
Binary files /dev/null and b/Library/metadata/32/3200477f9e4824f4db91b739891f51ef.info differ
diff --git a/Library/metadata/32/322392995be44d23a3c86cfd972f838f b/Library/metadata/32/322392995be44d23a3c86cfd972f838f
new file mode 100644
index 0000000000000000000000000000000000000000..6c6ac3c0090beb73126fd605a2484080ed18a97d
Binary files /dev/null and b/Library/metadata/32/322392995be44d23a3c86cfd972f838f differ
diff --git a/Library/metadata/32/322392995be44d23a3c86cfd972f838f.info b/Library/metadata/32/322392995be44d23a3c86cfd972f838f.info
new file mode 100644
index 0000000000000000000000000000000000000000..88eb16c00e011d04580dd9dff2d91f110ab08889
Binary files /dev/null and b/Library/metadata/32/322392995be44d23a3c86cfd972f838f.info differ
diff --git a/Library/metadata/32/32d40088a6124c578ad6b428df586e2e b/Library/metadata/32/32d40088a6124c578ad6b428df586e2e
new file mode 100644
index 0000000000000000000000000000000000000000..dfbbc20e0e122588346f27df62ac964ccb54ce65
Binary files /dev/null and b/Library/metadata/32/32d40088a6124c578ad6b428df586e2e differ
diff --git a/Library/metadata/32/32d40088a6124c578ad6b428df586e2e.info b/Library/metadata/32/32d40088a6124c578ad6b428df586e2e.info
new file mode 100644
index 0000000000000000000000000000000000000000..1d5032c28c4ef166ba1e4470984bc93b8917411c
Binary files /dev/null and b/Library/metadata/32/32d40088a6124c578ad6b428df586e2e.info differ
diff --git a/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8 b/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8
new file mode 100644
index 0000000000000000000000000000000000000000..99d8126cb65c2c69b2ef2a72e31ec1cc51ddd572
Binary files /dev/null and b/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8 differ
diff --git a/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8.info b/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d615113d3dc25c692149c63a861f444a8f14da2
Binary files /dev/null and b/Library/metadata/33/3385f7527e5be4c65b3a5294e8995ff8.info differ
diff --git a/Library/metadata/34/3402d33aed9f27c44b0c480813973a06 b/Library/metadata/34/3402d33aed9f27c44b0c480813973a06
new file mode 100644
index 0000000000000000000000000000000000000000..269d357900ad002e7764af2a056441841d27fecd
Binary files /dev/null and b/Library/metadata/34/3402d33aed9f27c44b0c480813973a06 differ
diff --git a/Library/metadata/34/3402d33aed9f27c44b0c480813973a06.info b/Library/metadata/34/3402d33aed9f27c44b0c480813973a06.info
new file mode 100644
index 0000000000000000000000000000000000000000..d616ea99804158aa19968a6a782cfb19ba3cf422
Binary files /dev/null and b/Library/metadata/34/3402d33aed9f27c44b0c480813973a06.info differ
diff --git a/Library/metadata/34/342a0f8aca7f4f0691338912faec0494 b/Library/metadata/34/342a0f8aca7f4f0691338912faec0494
new file mode 100644
index 0000000000000000000000000000000000000000..a19fdd41e0ea6303ef104764e0edbbfa16ba48b8
Binary files /dev/null and b/Library/metadata/34/342a0f8aca7f4f0691338912faec0494 differ
diff --git a/Library/metadata/34/342a0f8aca7f4f0691338912faec0494.info b/Library/metadata/34/342a0f8aca7f4f0691338912faec0494.info
new file mode 100644
index 0000000000000000000000000000000000000000..89151cfdb6f8bd192e700447093867ebe2f30d5f
Binary files /dev/null and b/Library/metadata/34/342a0f8aca7f4f0691338912faec0494.info differ
diff --git a/Library/metadata/34/34c304e659a3f674f9c098449d120088 b/Library/metadata/34/34c304e659a3f674f9c098449d120088
new file mode 100644
index 0000000000000000000000000000000000000000..20ba70fd4152045fc830ea88a7cb3f214dc0b983
Binary files /dev/null and b/Library/metadata/34/34c304e659a3f674f9c098449d120088 differ
diff --git a/Library/metadata/34/34c304e659a3f674f9c098449d120088.info b/Library/metadata/34/34c304e659a3f674f9c098449d120088.info
new file mode 100644
index 0000000000000000000000000000000000000000..87e400521eee8badc9a82f61fc3568fb96296dfd
Binary files /dev/null and b/Library/metadata/34/34c304e659a3f674f9c098449d120088.info differ
diff --git a/Library/metadata/34/34e150112c1c42ac83170b52d898e322 b/Library/metadata/34/34e150112c1c42ac83170b52d898e322
new file mode 100644
index 0000000000000000000000000000000000000000..dc84acbb7808e15ae30dc02dad1158270c5d889a
Binary files /dev/null and b/Library/metadata/34/34e150112c1c42ac83170b52d898e322 differ
diff --git a/Library/metadata/34/34e150112c1c42ac83170b52d898e322.info b/Library/metadata/34/34e150112c1c42ac83170b52d898e322.info
new file mode 100644
index 0000000000000000000000000000000000000000..7280a055ca4878fa36a4d8f26f67971163a18eb9
Binary files /dev/null and b/Library/metadata/34/34e150112c1c42ac83170b52d898e322.info differ
diff --git a/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6 b/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6
new file mode 100644
index 0000000000000000000000000000000000000000..728cc7e65db74b78f2953358f574cecfe1f26d97
Binary files /dev/null and b/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6 differ
diff --git a/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6.info b/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6.info
new file mode 100644
index 0000000000000000000000000000000000000000..972dd4b2cf01c1d56a21ab2585c25fa8d65f3ef6
Binary files /dev/null and b/Library/metadata/34/34e2c9b9d9e44953933afe37461f44e6.info differ
diff --git a/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e b/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e
new file mode 100644
index 0000000000000000000000000000000000000000..4cdcf648fbdbd74cd9cf221696d7aeacf45b5b18
Binary files /dev/null and b/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e differ
diff --git a/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e.info b/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e.info
new file mode 100644
index 0000000000000000000000000000000000000000..050558b60a7abacca4207fbf4100befbce1a42a7
Binary files /dev/null and b/Library/metadata/34/34f6695d37a94370a3697f6b068f5d5e.info differ
diff --git a/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13 b/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13
new file mode 100644
index 0000000000000000000000000000000000000000..a768a5c3f3ae38e81e0bb20d84e90f38ee8bda4e
Binary files /dev/null and b/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13 differ
diff --git a/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13.info b/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13.info
new file mode 100644
index 0000000000000000000000000000000000000000..220eb813cdf24665e1cdebac0bc3fd6d98a64d6e
Binary files /dev/null and b/Library/metadata/35/35b4e72ca46f44581b85082c4dc21d13.info differ
diff --git a/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92 b/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92
new file mode 100644
index 0000000000000000000000000000000000000000..b9ba6b47c5cd604a267c322f663c011636e5cd1d
Binary files /dev/null and b/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92 differ
diff --git a/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92.info b/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcdcaaab05eed74cdf9857b820265c48b99973b7
Binary files /dev/null and b/Library/metadata/35/35ff0937876540d3bd4b6a941df62a92.info differ
diff --git a/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d b/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d
new file mode 100644
index 0000000000000000000000000000000000000000..e2db098ea09993cae841ecaea39e66b8922514f8
Binary files /dev/null and b/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d differ
diff --git a/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d.info b/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d.info
new file mode 100644
index 0000000000000000000000000000000000000000..a6b3be6630cea257dd903123e52a78f14a30ad4d
Binary files /dev/null and b/Library/metadata/36/36e8bb3feb5e6402185947b817a6ed8d.info differ
diff --git a/Library/metadata/37/376c84ea405e0f2b80562c23bb977216 b/Library/metadata/37/376c84ea405e0f2b80562c23bb977216
new file mode 100644
index 0000000000000000000000000000000000000000..43a3ae155a8d7ddabfaed48490b96e95d6bc0d19
Binary files /dev/null and b/Library/metadata/37/376c84ea405e0f2b80562c23bb977216 differ
diff --git a/Library/metadata/37/376c84ea405e0f2b80562c23bb977216.info b/Library/metadata/37/376c84ea405e0f2b80562c23bb977216.info
new file mode 100644
index 0000000000000000000000000000000000000000..12e4ca2640c65778e0059c84eb60f858b48e19ce
Binary files /dev/null and b/Library/metadata/37/376c84ea405e0f2b80562c23bb977216.info differ
diff --git a/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d b/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d
new file mode 100644
index 0000000000000000000000000000000000000000..3c0ae6f135c4e4927c5971569e25789f9480a8f4
Binary files /dev/null and b/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d differ
diff --git a/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d.info b/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d.info
new file mode 100644
index 0000000000000000000000000000000000000000..e5f347eaa4769ebfa4335d05b2e322a07e9b2ab9
Binary files /dev/null and b/Library/metadata/37/37cff9f5a86ae494c8cb04423580480d.info differ
diff --git a/Library/metadata/38/383966e89d344865a36addd5d378ffd3 b/Library/metadata/38/383966e89d344865a36addd5d378ffd3
new file mode 100644
index 0000000000000000000000000000000000000000..0b8938c292f43d64d9e723ae0423e10590026696
Binary files /dev/null and b/Library/metadata/38/383966e89d344865a36addd5d378ffd3 differ
diff --git a/Library/metadata/38/383966e89d344865a36addd5d378ffd3.info b/Library/metadata/38/383966e89d344865a36addd5d378ffd3.info
new file mode 100644
index 0000000000000000000000000000000000000000..7d15b5902fa92ecd8804205e9df67c02cd5087f9
Binary files /dev/null and b/Library/metadata/38/383966e89d344865a36addd5d378ffd3.info differ
diff --git a/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2 b/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2
new file mode 100644
index 0000000000000000000000000000000000000000..334c79a8eb0d170d0f08bfbfe8b0ca25cb2ac2f2
Binary files /dev/null and b/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2 differ
diff --git a/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2.info b/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2.info
new file mode 100644
index 0000000000000000000000000000000000000000..00bce50c4eb7eaad23c8b4e305049040072eb8b2
Binary files /dev/null and b/Library/metadata/38/3877b2be7ee07495d8918dc8937e6de2.info differ
diff --git a/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc b/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc
new file mode 100644
index 0000000000000000000000000000000000000000..d5bc66fea5f9dc33853ed7889acaa31b23866b51
Binary files /dev/null and b/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc differ
diff --git a/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc.info b/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc.info
new file mode 100644
index 0000000000000000000000000000000000000000..0daa3ef54974ec9fa6d51fd046b5091b07f0f3a8
Binary files /dev/null and b/Library/metadata/38/38c8faf1788024c02930a0c68a6e0edc.info differ
diff --git a/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c b/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c
new file mode 100644
index 0000000000000000000000000000000000000000..abc6b880a60e7273b7ca66c32f64f8091fe510a4
Binary files /dev/null and b/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c differ
diff --git a/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c.info b/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c.info
new file mode 100644
index 0000000000000000000000000000000000000000..85cab2a0be690f9d35e9a6e32db57e658d1be518
Binary files /dev/null and b/Library/metadata/38/38e3a8976f0b9c586b6dfbcef4e4066c.info differ
diff --git a/Library/metadata/39/39728903e57c60021f80449a8bbc0096 b/Library/metadata/39/39728903e57c60021f80449a8bbc0096
new file mode 100644
index 0000000000000000000000000000000000000000..92ef028afacf652317f23888a7edd6834b7f42dc
Binary files /dev/null and b/Library/metadata/39/39728903e57c60021f80449a8bbc0096 differ
diff --git a/Library/metadata/39/39728903e57c60021f80449a8bbc0096.info b/Library/metadata/39/39728903e57c60021f80449a8bbc0096.info
new file mode 100644
index 0000000000000000000000000000000000000000..acd0311c79a6887653ed5b50dce09102ed49447f
Binary files /dev/null and b/Library/metadata/39/39728903e57c60021f80449a8bbc0096.info differ
diff --git a/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012 b/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012
new file mode 100644
index 0000000000000000000000000000000000000000..83b8078f20e34e792a771309a5ba2c0af63b239c
Binary files /dev/null and b/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012 differ
diff --git a/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012.info b/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012.info
new file mode 100644
index 0000000000000000000000000000000000000000..30150f0346c1a79ee4acd543706e322b7eb6aa74
Binary files /dev/null and b/Library/metadata/3a/3a2bf0128e2dd664f91dfba49e36a012.info differ
diff --git a/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e b/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e
new file mode 100644
index 0000000000000000000000000000000000000000..4fe97e216cc84f7abb154c952cdc35d392ecbeb3
Binary files /dev/null and b/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e differ
diff --git a/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e.info b/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e.info
new file mode 100644
index 0000000000000000000000000000000000000000..c050b64678baa1a594c0aa93f8416bcb59818059
Binary files /dev/null and b/Library/metadata/3a/3a2d94c8977984b67984caeff9fa666e.info differ
diff --git a/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a b/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a
new file mode 100644
index 0000000000000000000000000000000000000000..4ce17671f6e74c4a7d37518ec1f22ba6bbba05ab
Binary files /dev/null and b/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a differ
diff --git a/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a.info b/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a.info
new file mode 100644
index 0000000000000000000000000000000000000000..affdbd8b4c602f9035a51c3a6ea64a1c491c9d72
Binary files /dev/null and b/Library/metadata/3a/3a84de5cd0624681b6b6dcd8921d912a.info differ
diff --git a/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba b/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba
new file mode 100644
index 0000000000000000000000000000000000000000..e28436faf567bb40b754bf2f8e592a6de52ab91b
Binary files /dev/null and b/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba differ
diff --git a/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba.info b/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba.info
new file mode 100644
index 0000000000000000000000000000000000000000..9e7721bce44de4f17cb9730949942c58defdfc29
Binary files /dev/null and b/Library/metadata/3a/3ab6e6972ecb54e2cbd505692415a7ba.info differ
diff --git a/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626 b/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626
new file mode 100644
index 0000000000000000000000000000000000000000..858c1d743799de0f2f9e32ee72aecf3a2b7f4a10
Binary files /dev/null and b/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626 differ
diff --git a/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626.info b/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626.info
new file mode 100644
index 0000000000000000000000000000000000000000..db9bf004c3837f3fa5ab2adc4a217299e852b9e2
Binary files /dev/null and b/Library/metadata/3a/3aba9fe1ad29b42ffb0eea781318a626.info differ
diff --git a/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca b/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca
new file mode 100644
index 0000000000000000000000000000000000000000..298fe6fc723e6635399fdd1466c758dc649495c7
Binary files /dev/null and b/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca differ
diff --git a/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca.info b/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcc5ca6131cd791eade6f44b86fb7090ba2ae694
Binary files /dev/null and b/Library/metadata/3a/3abc8faab9f5cbe4db0336c99fef85ca.info differ
diff --git a/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8 b/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8
new file mode 100644
index 0000000000000000000000000000000000000000..ef4f914f47af961dd855f143a4f3469139fb2685
Binary files /dev/null and b/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8 differ
diff --git a/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8.info b/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8.info
new file mode 100644
index 0000000000000000000000000000000000000000..54fac742ac6ad1805f7386155ed46cfceaa5e843
Binary files /dev/null and b/Library/metadata/3b/3b07d432cba2a4c4f8a2fdea984620b8.info differ
diff --git a/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592 b/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592
new file mode 100644
index 0000000000000000000000000000000000000000..c75ae9d71bf9b770b91f484bfde98b1593f785fe
Binary files /dev/null and b/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592 differ
diff --git a/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592.info b/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592.info
new file mode 100644
index 0000000000000000000000000000000000000000..5f772f04f2a775c56a099e80200a0091ee4e40c6
Binary files /dev/null and b/Library/metadata/3b/3b17c62f739a7a740a3287e7dce21592.info differ
diff --git a/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237 b/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237
new file mode 100644
index 0000000000000000000000000000000000000000..eb23dd64873024fae9b6e6e4757923c3c771e3a0
Binary files /dev/null and b/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237 differ
diff --git a/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237.info b/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237.info
new file mode 100644
index 0000000000000000000000000000000000000000..ba15ae0ead3ec60796d2f74ef94860735842815a
Binary files /dev/null and b/Library/metadata/3b/3bb0254b9671413d9d08a855c5090237.info differ
diff --git a/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee b/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee
new file mode 100644
index 0000000000000000000000000000000000000000..4c76104196209d87c1f04fc9d7f6269d00809216
Binary files /dev/null and b/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee differ
diff --git a/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee.info b/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee.info
new file mode 100644
index 0000000000000000000000000000000000000000..f9c78e95215b12ad025521b6628c4535c8faf6c1
Binary files /dev/null and b/Library/metadata/3b/3bda1886f58f4e0ab1139400b160c3ee.info differ
diff --git a/Library/metadata/3c/3c61c79a991f84470843243e9710743e b/Library/metadata/3c/3c61c79a991f84470843243e9710743e
new file mode 100644
index 0000000000000000000000000000000000000000..6b62b6d683f863cb21240e7c6095b72a4f43f901
Binary files /dev/null and b/Library/metadata/3c/3c61c79a991f84470843243e9710743e differ
diff --git a/Library/metadata/3c/3c61c79a991f84470843243e9710743e.info b/Library/metadata/3c/3c61c79a991f84470843243e9710743e.info
new file mode 100644
index 0000000000000000000000000000000000000000..e50132536f0f0911d53d783d278a5115b6017ed6
Binary files /dev/null and b/Library/metadata/3c/3c61c79a991f84470843243e9710743e.info differ
diff --git a/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea b/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea
new file mode 100644
index 0000000000000000000000000000000000000000..c175bb7410cd142c3b6c2cee04da69b6029acbdd
Binary files /dev/null and b/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea differ
diff --git a/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea.info b/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea.info
new file mode 100644
index 0000000000000000000000000000000000000000..096094e1b42e19e8a454acc49d480cda380f7879
Binary files /dev/null and b/Library/metadata/3c/3c6c403084eacec478a1129ce20061ea.info differ
diff --git a/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32 b/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32
new file mode 100644
index 0000000000000000000000000000000000000000..24f6ccbf4ebd783a70e7d7d09a275063cfa8c8b1
Binary files /dev/null and b/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32 differ
diff --git a/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32.info b/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32.info
new file mode 100644
index 0000000000000000000000000000000000000000..264f3052a9f328f83508e14ad1f9abbf994663a7
Binary files /dev/null and b/Library/metadata/3c/3c737f7a9d78541d1ab25f28f045dd32.info differ
diff --git a/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434 b/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434
new file mode 100644
index 0000000000000000000000000000000000000000..5f4d3e8c701cabbc71f384d2e0d1495b4c39547b
Binary files /dev/null and b/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434 differ
diff --git a/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434.info b/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434.info
new file mode 100644
index 0000000000000000000000000000000000000000..a042f2bb2053740073801869d32ef21db295f9dc
Binary files /dev/null and b/Library/metadata/3c/3cebe1a96232b44388b30b2f72dde434.info differ
diff --git a/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0 b/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0
new file mode 100644
index 0000000000000000000000000000000000000000..95107dd5ca39d71ccaef9caf24f8869928b947a1
Binary files /dev/null and b/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0 differ
diff --git a/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0.info b/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0.info
new file mode 100644
index 0000000000000000000000000000000000000000..a8d9dcc0c57fce4e579f8597d4b290979ebe1c9c
Binary files /dev/null and b/Library/metadata/3c/3cf132d4fa07f4f0cb2883499c5c7dd0.info differ
diff --git a/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240 b/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240
new file mode 100644
index 0000000000000000000000000000000000000000..31ffdf37feed78cdd7a3b95df979b5bcf07d813f
Binary files /dev/null and b/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240 differ
diff --git a/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240.info b/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240.info
new file mode 100644
index 0000000000000000000000000000000000000000..48680862794ab008b5deaec90443cf3324c5cfce
Binary files /dev/null and b/Library/metadata/3d/3dcbbc060dea46168ffc09a580836240.info differ
diff --git a/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8 b/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8
new file mode 100644
index 0000000000000000000000000000000000000000..296c1761e8cf2eca33a86dee700638fce1c56074
Binary files /dev/null and b/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8 differ
diff --git a/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8.info b/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8.info
new file mode 100644
index 0000000000000000000000000000000000000000..5d1eff6992942b6052d6761b58dbecc2dd169cc2
Binary files /dev/null and b/Library/metadata/3e/3e987bdaa72532c449a3078bbd6d16f8.info differ
diff --git a/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0 b/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0
new file mode 100644
index 0000000000000000000000000000000000000000..2255ad71d2cc442af7653bbe2d88a6d7220685e1
Binary files /dev/null and b/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0 differ
diff --git a/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0.info b/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0.info
new file mode 100644
index 0000000000000000000000000000000000000000..5a99412c692ee80c49d3fec0bae7667aba275a77
Binary files /dev/null and b/Library/metadata/3e/3e9a2175e0404f7ea30b2b694850bae0.info differ
diff --git a/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f b/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f
new file mode 100644
index 0000000000000000000000000000000000000000..586f428328b9760119bb3a692d8971e18beed57b
Binary files /dev/null and b/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f differ
diff --git a/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f.info b/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f.info
new file mode 100644
index 0000000000000000000000000000000000000000..e321bda299f0db558cb3cc01f9d298a92a3f615d
Binary files /dev/null and b/Library/metadata/3e/3ee40aa79cd242a5b53b0b0ca4f13f0f.info differ
diff --git a/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada b/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada
new file mode 100644
index 0000000000000000000000000000000000000000..abb3b0a42393bc486f69dfb85fcb268d62c99c02
Binary files /dev/null and b/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada differ
diff --git a/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada.info b/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada.info
new file mode 100644
index 0000000000000000000000000000000000000000..3bed3c1d86ccf653e045a5663bcdd26b2c31bd18
Binary files /dev/null and b/Library/metadata/3f/3f0c4389c854bcaf848af1ea310dbada.info differ
diff --git a/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e b/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e
new file mode 100644
index 0000000000000000000000000000000000000000..e70779e55765dbd1277264f960175938186c280e
Binary files /dev/null and b/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e differ
diff --git a/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e.info b/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e.info
new file mode 100644
index 0000000000000000000000000000000000000000..d0a89d2e4d395bc81dc3ef52b823f9a2a13d86d6
Binary files /dev/null and b/Library/metadata/3f/3f3e22b18940a4e828a5170574a3617e.info differ
diff --git a/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04 b/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04
new file mode 100644
index 0000000000000000000000000000000000000000..abcd7c44870244632046b559ee18f02370e3c1bc
Binary files /dev/null and b/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04 differ
diff --git a/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04.info b/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04.info
new file mode 100644
index 0000000000000000000000000000000000000000..50a85d7428f959d578daa5b59930ec8597e262c2
Binary files /dev/null and b/Library/metadata/3f/3fdd83b151eb8d25c5e2f82fc39dcb04.info differ
diff --git a/Library/metadata/40/405b9b51bb344a128608d968297df79c b/Library/metadata/40/405b9b51bb344a128608d968297df79c
new file mode 100644
index 0000000000000000000000000000000000000000..ff07c481c83d5614771cb104048f3ba54f407d1c
Binary files /dev/null and b/Library/metadata/40/405b9b51bb344a128608d968297df79c differ
diff --git a/Library/metadata/40/405b9b51bb344a128608d968297df79c.info b/Library/metadata/40/405b9b51bb344a128608d968297df79c.info
new file mode 100644
index 0000000000000000000000000000000000000000..d181f74bc0931b810b6988e23bbc86553ff4ef90
Binary files /dev/null and b/Library/metadata/40/405b9b51bb344a128608d968297df79c.info differ
diff --git a/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638 b/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638
new file mode 100644
index 0000000000000000000000000000000000000000..f2e615573a0557b1b80605ce7521df03f7cdfa01
Binary files /dev/null and b/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638 differ
diff --git a/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638.info b/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638.info
new file mode 100644
index 0000000000000000000000000000000000000000..62ef5a77f51d1d68366b526609f3b00bd92d4dc5
Binary files /dev/null and b/Library/metadata/40/40bf3cec17fa0b49fe04443c8332d638.info differ
diff --git a/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af b/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af
new file mode 100644
index 0000000000000000000000000000000000000000..14fb990d9edcfbe650775cb12e053deceaaf1fb2
Binary files /dev/null and b/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af differ
diff --git a/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af.info b/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af.info
new file mode 100644
index 0000000000000000000000000000000000000000..948cffecf9976a34b7681f30b1e84f9f00d08a23
Binary files /dev/null and b/Library/metadata/40/40f980217d9196e4baa9ebd2ac1328af.info differ
diff --git a/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 b/Library/metadata/41/4113173d5e95493ab8765d7b08371de4
new file mode 100644
index 0000000000000000000000000000000000000000..ff39b38c67028884fb98321b27a8b43610da7815
Binary files /dev/null and b/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 differ
diff --git a/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info b/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info
new file mode 100644
index 0000000000000000000000000000000000000000..3b34c0afab3dfafade6fd0f4c4a829c34aba415d
Binary files /dev/null and b/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info differ
diff --git a/Library/metadata/41/414eaff990966d74bb7172887d164743 b/Library/metadata/41/414eaff990966d74bb7172887d164743
new file mode 100644
index 0000000000000000000000000000000000000000..cc6c5a969fb8e2bc1f7b9df9d8bffe3388804f09
Binary files /dev/null and b/Library/metadata/41/414eaff990966d74bb7172887d164743 differ
diff --git a/Library/metadata/41/414eaff990966d74bb7172887d164743.info b/Library/metadata/41/414eaff990966d74bb7172887d164743.info
new file mode 100644
index 0000000000000000000000000000000000000000..0e901b1caab0544f3924e0e90e1dc72eadc18ee0
Binary files /dev/null and b/Library/metadata/41/414eaff990966d74bb7172887d164743.info differ
diff --git a/Library/metadata/41/4169ada20330a0946b683d6581b4efdf b/Library/metadata/41/4169ada20330a0946b683d6581b4efdf
new file mode 100644
index 0000000000000000000000000000000000000000..724b0588f01c9db8ba775ab9a2980b195b33f585
Binary files /dev/null and b/Library/metadata/41/4169ada20330a0946b683d6581b4efdf differ
diff --git a/Library/metadata/41/4169ada20330a0946b683d6581b4efdf.info b/Library/metadata/41/4169ada20330a0946b683d6581b4efdf.info
new file mode 100644
index 0000000000000000000000000000000000000000..449c4bf4a3729a4827740089fd9fc816cb2932ac
Binary files /dev/null and b/Library/metadata/41/4169ada20330a0946b683d6581b4efdf.info differ
diff --git a/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae b/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae
new file mode 100644
index 0000000000000000000000000000000000000000..52925666ab1318bb992caed29e4d039409a030ec
Binary files /dev/null and b/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae differ
diff --git a/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae.info b/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae.info
new file mode 100644
index 0000000000000000000000000000000000000000..07eec5e8f94a9af77272ed106923620b6d5dbfa7
Binary files /dev/null and b/Library/metadata/41/41b96614b2e6494ba995ddcd252d11ae.info differ
diff --git a/Library/metadata/42/42064bc130be4c44b288d249a44b356f b/Library/metadata/42/42064bc130be4c44b288d249a44b356f
new file mode 100644
index 0000000000000000000000000000000000000000..84c0fe7680b9a451168290712a05c93bf09d4d68
Binary files /dev/null and b/Library/metadata/42/42064bc130be4c44b288d249a44b356f differ
diff --git a/Library/metadata/42/42064bc130be4c44b288d249a44b356f.info b/Library/metadata/42/42064bc130be4c44b288d249a44b356f.info
new file mode 100644
index 0000000000000000000000000000000000000000..31e5b0765a25413f81b8490141d4b82a9ddd33a9
Binary files /dev/null and b/Library/metadata/42/42064bc130be4c44b288d249a44b356f.info differ
diff --git a/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb b/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb
new file mode 100644
index 0000000000000000000000000000000000000000..3ac53e95a5a2ae4d455a4b95921e01829e9c9083
Binary files /dev/null and b/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb differ
diff --git a/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb.info b/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb.info
new file mode 100644
index 0000000000000000000000000000000000000000..8d1da0a881589268a4f58b31ab824d7a6d7a1821
Binary files /dev/null and b/Library/metadata/42/42a934796aa2fd844af63e82f45fbafb.info differ
diff --git a/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3 b/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3
new file mode 100644
index 0000000000000000000000000000000000000000..9b87e85ac72b6b29d7f74b7af6d4c195d070abab
Binary files /dev/null and b/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3 differ
diff --git a/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3.info b/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3.info
new file mode 100644
index 0000000000000000000000000000000000000000..ea0149c455faa62848d5bbf12322e8779f37a3f3
Binary files /dev/null and b/Library/metadata/42/42fe78c8fe682715a2cb531422e6ccb3.info differ
diff --git a/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a b/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a
new file mode 100644
index 0000000000000000000000000000000000000000..d4ddc356d2e158dbef9c2b0a7fc21fc2d68b833c
Binary files /dev/null and b/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a differ
diff --git a/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a.info b/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a.info
new file mode 100644
index 0000000000000000000000000000000000000000..2d3d3bf44a06b74c2b5671f83675c0fe339c5f79
Binary files /dev/null and b/Library/metadata/43/430b5c7d554b8494286044e0e6d46d5a.info differ
diff --git a/Library/metadata/43/438efd46088d408d8a53f707fa68d976 b/Library/metadata/43/438efd46088d408d8a53f707fa68d976
new file mode 100644
index 0000000000000000000000000000000000000000..77a47caed1af538383e35d8973f6e39436a3b58d
Binary files /dev/null and b/Library/metadata/43/438efd46088d408d8a53f707fa68d976 differ
diff --git a/Library/metadata/43/438efd46088d408d8a53f707fa68d976.info b/Library/metadata/43/438efd46088d408d8a53f707fa68d976.info
new file mode 100644
index 0000000000000000000000000000000000000000..260961b808878cbc57a8f7df7b266a15160add69
Binary files /dev/null and b/Library/metadata/43/438efd46088d408d8a53f707fa68d976.info differ
diff --git a/Library/metadata/43/439352284d5721f458621d976ccc0594 b/Library/metadata/43/439352284d5721f458621d976ccc0594
new file mode 100644
index 0000000000000000000000000000000000000000..96782284544b5e0a3f586c778eb95700c73fb0f6
Binary files /dev/null and b/Library/metadata/43/439352284d5721f458621d976ccc0594 differ
diff --git a/Library/metadata/43/439352284d5721f458621d976ccc0594.info b/Library/metadata/43/439352284d5721f458621d976ccc0594.info
new file mode 100644
index 0000000000000000000000000000000000000000..4adc7a8b73e7be26ceba7856e6450f91a53e8e81
Binary files /dev/null and b/Library/metadata/43/439352284d5721f458621d976ccc0594.info differ
diff --git a/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4 b/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4
new file mode 100644
index 0000000000000000000000000000000000000000..d476c1a3f3644c61ea42d54042b93af1f1d8a05c
Binary files /dev/null and b/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4 differ
diff --git a/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4.info b/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4.info
new file mode 100644
index 0000000000000000000000000000000000000000..9e7bf4b655180041f89d0ca2153c1c5eae3f863e
Binary files /dev/null and b/Library/metadata/44/448aaa781aea44811a5d66e3edac37e4.info differ
diff --git a/Library/metadata/44/44e1d646473a40178712cb2150f54cec b/Library/metadata/44/44e1d646473a40178712cb2150f54cec
new file mode 100644
index 0000000000000000000000000000000000000000..1e7e19ac42e9c69910aecf097181f3e4ec70eea8
Binary files /dev/null and b/Library/metadata/44/44e1d646473a40178712cb2150f54cec differ
diff --git a/Library/metadata/44/44e1d646473a40178712cb2150f54cec.info b/Library/metadata/44/44e1d646473a40178712cb2150f54cec.info
new file mode 100644
index 0000000000000000000000000000000000000000..d84964d43bc51ef06159d4756494357c1e80f028
Binary files /dev/null and b/Library/metadata/44/44e1d646473a40178712cb2150f54cec.info differ
diff --git a/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c b/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c
new file mode 100644
index 0000000000000000000000000000000000000000..136bf1752a2569c31e6af053ebc488b99fb8297d
Binary files /dev/null and b/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c differ
diff --git a/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c.info b/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c.info
new file mode 100644
index 0000000000000000000000000000000000000000..9cbf3503669f62ab761a13e93e4746c38511e191
Binary files /dev/null and b/Library/metadata/44/44f39a74ca5ee4bf5936b17e901f251c.info differ
diff --git a/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a b/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a
new file mode 100644
index 0000000000000000000000000000000000000000..cac5f27a3f942e29acb2fcfe3a51e60e2b4b0e8a
Binary files /dev/null and b/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a differ
diff --git a/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a.info b/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a.info
new file mode 100644
index 0000000000000000000000000000000000000000..52ae891a2e4f221537edb8e6092ce0d2264ff6e2
Binary files /dev/null and b/Library/metadata/45/4506ac79f5b274cb1b249ed7f4abfb9a.info differ
diff --git a/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85 b/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85
new file mode 100644
index 0000000000000000000000000000000000000000..67ac4979f8001b3cc1f09c44c3c652c81ccf795a
Binary files /dev/null and b/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85 differ
diff --git a/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85.info b/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85.info
new file mode 100644
index 0000000000000000000000000000000000000000..540d0c4bde0fe7104f31ed0e5fb5ef1ac3c1457a
Binary files /dev/null and b/Library/metadata/45/453f100e6bdae4dfd9e655927819dc85.info differ
diff --git a/Library/metadata/45/45936f542d06a4746bef881a1be61694 b/Library/metadata/45/45936f542d06a4746bef881a1be61694
new file mode 100644
index 0000000000000000000000000000000000000000..90a0df9f3df5601ca1c93c5c1e6f9c5405c4b9fc
Binary files /dev/null and b/Library/metadata/45/45936f542d06a4746bef881a1be61694 differ
diff --git a/Library/metadata/45/45936f542d06a4746bef881a1be61694.info b/Library/metadata/45/45936f542d06a4746bef881a1be61694.info
new file mode 100644
index 0000000000000000000000000000000000000000..4139aab44fa556a95ef0c3b8078de5bd08a35067
Binary files /dev/null and b/Library/metadata/45/45936f542d06a4746bef881a1be61694.info differ
diff --git a/Library/metadata/46/46098a81a64a45c5b756320e10a22f13 b/Library/metadata/46/46098a81a64a45c5b756320e10a22f13
new file mode 100644
index 0000000000000000000000000000000000000000..6b7f1d790c5db073c9d6de182da56e2d3a9faaba
Binary files /dev/null and b/Library/metadata/46/46098a81a64a45c5b756320e10a22f13 differ
diff --git a/Library/metadata/46/46098a81a64a45c5b756320e10a22f13.info b/Library/metadata/46/46098a81a64a45c5b756320e10a22f13.info
new file mode 100644
index 0000000000000000000000000000000000000000..c336c6068ee5dc647284e676c09f72873d0638de
Binary files /dev/null and b/Library/metadata/46/46098a81a64a45c5b756320e10a22f13.info differ
diff --git a/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897 b/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897
new file mode 100644
index 0000000000000000000000000000000000000000..dfb6f465cf81a4441d50652426624ac82f6fa6f9
Binary files /dev/null and b/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897 differ
diff --git a/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897.info b/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897.info
new file mode 100644
index 0000000000000000000000000000000000000000..96abf60fb2d0a8f35bac845a18586fb89518d960
Binary files /dev/null and b/Library/metadata/46/4621db9acc07de14eb1055cc6bfd5897.info differ
diff --git a/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b b/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b
new file mode 100644
index 0000000000000000000000000000000000000000..ea96f63eaf490ed63ce9936fa8ef245e0de5b28f
Binary files /dev/null and b/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b differ
diff --git a/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b.info b/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b.info
new file mode 100644
index 0000000000000000000000000000000000000000..7060e2ed2d9c3cfbec691846b78fec3e9b332907
Binary files /dev/null and b/Library/metadata/46/4674c0893b247844bb5933c9e7f2e04b.info differ
diff --git a/Library/metadata/46/46774595a2c032f4b826d6baf6110a39 b/Library/metadata/46/46774595a2c032f4b826d6baf6110a39
new file mode 100644
index 0000000000000000000000000000000000000000..40fffbc1b5543be861dd0c4f53e2338a5fcff59b
Binary files /dev/null and b/Library/metadata/46/46774595a2c032f4b826d6baf6110a39 differ
diff --git a/Library/metadata/46/46774595a2c032f4b826d6baf6110a39.info b/Library/metadata/46/46774595a2c032f4b826d6baf6110a39.info
new file mode 100644
index 0000000000000000000000000000000000000000..da0fe2f002d829d1d6d07244e993fa34cf319fa7
Binary files /dev/null and b/Library/metadata/46/46774595a2c032f4b826d6baf6110a39.info differ
diff --git a/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585 b/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585
new file mode 100644
index 0000000000000000000000000000000000000000..3a93173aa9552d04292e3b3c88733ac5634bdbf1
Binary files /dev/null and b/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585 differ
diff --git a/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585.info b/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585.info
new file mode 100644
index 0000000000000000000000000000000000000000..2689ece602beda21f738ecb40eaae88db04f94a3
Binary files /dev/null and b/Library/metadata/46/46c02d8d6499b4309ac1ec5d0b818585.info differ
diff --git a/Library/metadata/47/470530e667ad4475786b28fa3187ce95 b/Library/metadata/47/470530e667ad4475786b28fa3187ce95
new file mode 100644
index 0000000000000000000000000000000000000000..f871237b104f881e7bcecbc3994c4ade36d69e25
Binary files /dev/null and b/Library/metadata/47/470530e667ad4475786b28fa3187ce95 differ
diff --git a/Library/metadata/47/470530e667ad4475786b28fa3187ce95.info b/Library/metadata/47/470530e667ad4475786b28fa3187ce95.info
new file mode 100644
index 0000000000000000000000000000000000000000..603a5fa6674958e150421f96f6eaabf9b5a48d35
Binary files /dev/null and b/Library/metadata/47/470530e667ad4475786b28fa3187ce95.info differ
diff --git a/Library/metadata/47/479aa72f0fc19c7409215d122550443f b/Library/metadata/47/479aa72f0fc19c7409215d122550443f
new file mode 100644
index 0000000000000000000000000000000000000000..dc3a81aa1ef88e3ada3ca9c5e69b3e5196d5e08a
Binary files /dev/null and b/Library/metadata/47/479aa72f0fc19c7409215d122550443f differ
diff --git a/Library/metadata/47/479aa72f0fc19c7409215d122550443f.info b/Library/metadata/47/479aa72f0fc19c7409215d122550443f.info
new file mode 100644
index 0000000000000000000000000000000000000000..b87609bf807e2c22493325cedf17ca1aab540c7d
Binary files /dev/null and b/Library/metadata/47/479aa72f0fc19c7409215d122550443f.info differ
diff --git a/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d b/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d
new file mode 100644
index 0000000000000000000000000000000000000000..b6a75403d361223abfff73bb5b598297b8fa105b
Binary files /dev/null and b/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d differ
diff --git a/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d.info b/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d.info
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb12f987dd390a59876315d0ce795f09b35a70
Binary files /dev/null and b/Library/metadata/48/483f37c25f0b91d448a51bfeecaf0c7d.info differ
diff --git a/Library/metadata/48/48755891a9c18cd4682cc826cde7abed b/Library/metadata/48/48755891a9c18cd4682cc826cde7abed
new file mode 100644
index 0000000000000000000000000000000000000000..42608c2be87e2400561ff6547cba65a412c679ca
Binary files /dev/null and b/Library/metadata/48/48755891a9c18cd4682cc826cde7abed differ
diff --git a/Library/metadata/48/48755891a9c18cd4682cc826cde7abed.info b/Library/metadata/48/48755891a9c18cd4682cc826cde7abed.info
new file mode 100644
index 0000000000000000000000000000000000000000..7bf415c7a0fa3cf374bebde32202063cf54d74c4
Binary files /dev/null and b/Library/metadata/48/48755891a9c18cd4682cc826cde7abed.info differ
diff --git a/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6 b/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6
new file mode 100644
index 0000000000000000000000000000000000000000..86d4fc8601eea7564bf74e096370445b38bfb2d0
Binary files /dev/null and b/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6 differ
diff --git a/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6.info b/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6.info
new file mode 100644
index 0000000000000000000000000000000000000000..6076edf1f4627935e9fd45a5182c591263f3aaf1
Binary files /dev/null and b/Library/metadata/48/48986928cc2a449dbaecdd1654bc9bf6.info differ
diff --git a/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8 b/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8
new file mode 100644
index 0000000000000000000000000000000000000000..da5ff7c052feae4e7e9ba64fe9dbe7d5ea574fed
Binary files /dev/null and b/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8 differ
diff --git a/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8.info b/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8.info
new file mode 100644
index 0000000000000000000000000000000000000000..14b42803ef0647f16be8d4b597d307a6f2aea4c9
Binary files /dev/null and b/Library/metadata/48/48b10b41f58d5b49717f376cda59eeb8.info differ
diff --git a/Library/metadata/48/48d034c499ee4697af9dd6e327110249 b/Library/metadata/48/48d034c499ee4697af9dd6e327110249
new file mode 100644
index 0000000000000000000000000000000000000000..bf467bf9a6d4276993767d145a24dd3364714cc7
Binary files /dev/null and b/Library/metadata/48/48d034c499ee4697af9dd6e327110249 differ
diff --git a/Library/metadata/48/48d034c499ee4697af9dd6e327110249.info b/Library/metadata/48/48d034c499ee4697af9dd6e327110249.info
new file mode 100644
index 0000000000000000000000000000000000000000..f3c6a5006f41b92842d5c75d02745e295c11961c
Binary files /dev/null and b/Library/metadata/48/48d034c499ee4697af9dd6e327110249.info differ
diff --git a/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70 b/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70
new file mode 100644
index 0000000000000000000000000000000000000000..baaef20aa521d2e50669d19269e467df4a469e8c
Binary files /dev/null and b/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70 differ
diff --git a/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70.info b/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70.info
new file mode 100644
index 0000000000000000000000000000000000000000..eedccbda3680d502aed6e4f22e258823cf2d707c
Binary files /dev/null and b/Library/metadata/49/490fe93dbc954e3ba3651b7f55eaba70.info differ
diff --git a/Library/metadata/49/49679f302ac6408697f6b9314a38985c b/Library/metadata/49/49679f302ac6408697f6b9314a38985c
new file mode 100644
index 0000000000000000000000000000000000000000..93a2a60e3e6c875460aa33234b627f00e7224dd0
Binary files /dev/null and b/Library/metadata/49/49679f302ac6408697f6b9314a38985c differ
diff --git a/Library/metadata/49/49679f302ac6408697f6b9314a38985c.info b/Library/metadata/49/49679f302ac6408697f6b9314a38985c.info
new file mode 100644
index 0000000000000000000000000000000000000000..d83cc2ccc6d113ea53f669fca5301ceecb6c4406
Binary files /dev/null and b/Library/metadata/49/49679f302ac6408697f6b9314a38985c.info differ
diff --git a/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1 b/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1
new file mode 100644
index 0000000000000000000000000000000000000000..269ee3f042cc59058a10f9987c09877d5e1056d1
Binary files /dev/null and b/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1 differ
diff --git a/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1.info b/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1.info
new file mode 100644
index 0000000000000000000000000000000000000000..3cf39805fd3276e61edace446e088f5b4472fcfa
Binary files /dev/null and b/Library/metadata/4a/4a151cd5fb89b124fb64a0bee60121c1.info differ
diff --git a/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70 b/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70
new file mode 100644
index 0000000000000000000000000000000000000000..6764d6c58842b66e083dc6989fc97881e3972616
Binary files /dev/null and b/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70 differ
diff --git a/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70.info b/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70.info
new file mode 100644
index 0000000000000000000000000000000000000000..54adf87e77b9798af7ea16d1aaee2cbb32f088e7
Binary files /dev/null and b/Library/metadata/4a/4a3ecb1425d14502837abea459cf2b70.info differ
diff --git a/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad
new file mode 100644
index 0000000000000000000000000000000000000000..5f01c2c03669c8dfa008dbaf738b32642ddf218a
Binary files /dev/null and b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad differ
diff --git a/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.info b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.info
new file mode 100644
index 0000000000000000000000000000000000000000..5b396385620a4bece28d551c9a3f38e1e34cbd00
Binary files /dev/null and b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.info differ
diff --git a/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.resource b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.resource
new file mode 100644
index 0000000000000000000000000000000000000000..886c56a98f84fab08f163178578ba2193113669c
Binary files /dev/null and b/Library/metadata/4a/4a432f5f8e9a8e84d942ef5ebc19d9ad.resource differ
diff --git a/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e b/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e
new file mode 100644
index 0000000000000000000000000000000000000000..73a6c166aa5b8ab7478f7890cc9aeacce65a8a8a
Binary files /dev/null and b/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e differ
diff --git a/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e.info b/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d56f13dd9f0dbcc1bd5d2e19e9cd8106d0a796e
Binary files /dev/null and b/Library/metadata/4a/4aa3b3285c6a6d84a9efcc7af6aec17e.info differ
diff --git a/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134 b/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134
new file mode 100644
index 0000000000000000000000000000000000000000..1f6eff141a7067e653e65471558c16466ef73da8
Binary files /dev/null and b/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134 differ
diff --git a/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134.info b/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134.info
new file mode 100644
index 0000000000000000000000000000000000000000..f66cafedae128c64d61973c44109d0fcc97ca8dd
Binary files /dev/null and b/Library/metadata/4a/4ac5b6a65aaeb59478e3b78660e9f134.info differ
diff --git a/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db b/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db
new file mode 100644
index 0000000000000000000000000000000000000000..f34dc08cd93216d003c50735f8fe70c222fff528
Binary files /dev/null and b/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db differ
diff --git a/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db.info b/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db.info
new file mode 100644
index 0000000000000000000000000000000000000000..3a7b1028067ad6be941fe6856e2ad665f8160df8
Binary files /dev/null and b/Library/metadata/4a/4ae64f3f72004807a9f919f9c27af0db.info differ
diff --git a/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8 b/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8
new file mode 100644
index 0000000000000000000000000000000000000000..b8d69f1cf7ad1ec97227bcc42547b601be5157e7
Binary files /dev/null and b/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8 differ
diff --git a/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8.info b/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8.info
new file mode 100644
index 0000000000000000000000000000000000000000..d419994f563fc7cde8ad668a1f75a8a00771ef93
Binary files /dev/null and b/Library/metadata/4b/4b3fa4bde7f1451a8218c03ee6a8ded8.info differ
diff --git a/Library/metadata/4b/4b518b37798c97b0f860962cbf615533 b/Library/metadata/4b/4b518b37798c97b0f860962cbf615533
new file mode 100644
index 0000000000000000000000000000000000000000..8c9186e106b3b21a7fabcabe498a3e01413e9950
Binary files /dev/null and b/Library/metadata/4b/4b518b37798c97b0f860962cbf615533 differ
diff --git a/Library/metadata/4b/4b518b37798c97b0f860962cbf615533.info b/Library/metadata/4b/4b518b37798c97b0f860962cbf615533.info
new file mode 100644
index 0000000000000000000000000000000000000000..fa8cee0c4517f5dda71f5dfca6b7f494ea8d68a7
Binary files /dev/null and b/Library/metadata/4b/4b518b37798c97b0f860962cbf615533.info differ
diff --git a/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f b/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f
new file mode 100644
index 0000000000000000000000000000000000000000..f7837315ec393303d6a3f544fc64f2071672ee09
Binary files /dev/null and b/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f differ
diff --git a/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info b/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info
new file mode 100644
index 0000000000000000000000000000000000000000..20ea559d61eb79c102029f278f0d8af767ea766a
Binary files /dev/null and b/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info differ
diff --git a/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc b/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc
new file mode 100644
index 0000000000000000000000000000000000000000..a482559d1d50eb41ff5abbf08d136d2512c65aa6
Binary files /dev/null and b/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc differ
diff --git a/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc.info b/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc.info
new file mode 100644
index 0000000000000000000000000000000000000000..9012d0a6d904b6fea7b594071ea3e8dfdefd459d
Binary files /dev/null and b/Library/metadata/4c/4c433abcdb28444ebb7bd395ba5c76fc.info differ
diff --git a/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209 b/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209
new file mode 100644
index 0000000000000000000000000000000000000000..7bad89b37db01c6b5e55823920fc8494b05bbb22
Binary files /dev/null and b/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209 differ
diff --git a/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209.info b/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209.info
new file mode 100644
index 0000000000000000000000000000000000000000..f0c1fbb6ffa9f60c24b29d259114688b71a3cb0f
Binary files /dev/null and b/Library/metadata/4c/4c6fe94acbb24417c988bab18cbd5209.info differ
diff --git a/Library/metadata/4c/4c723433a8625204aaa024123e366b23 b/Library/metadata/4c/4c723433a8625204aaa024123e366b23
new file mode 100644
index 0000000000000000000000000000000000000000..c161114697a1a3f9248ff02450fccce4e0581bca
Binary files /dev/null and b/Library/metadata/4c/4c723433a8625204aaa024123e366b23 differ
diff --git a/Library/metadata/4c/4c723433a8625204aaa024123e366b23.info b/Library/metadata/4c/4c723433a8625204aaa024123e366b23.info
new file mode 100644
index 0000000000000000000000000000000000000000..3a3094a2cb52f8adcd37b945b1914d50fc4f82d7
Binary files /dev/null and b/Library/metadata/4c/4c723433a8625204aaa024123e366b23.info differ
diff --git a/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72 b/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72
new file mode 100644
index 0000000000000000000000000000000000000000..fb10a68d0fd043dc41610f0ea4e8e2d52a5548b5
Binary files /dev/null and b/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72 differ
diff --git a/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72.info b/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72.info
new file mode 100644
index 0000000000000000000000000000000000000000..58eafd7791ae9461a6b9b82c7531f366392c4456
Binary files /dev/null and b/Library/metadata/4c/4cb753b105cab14409a05ea1aac20d72.info differ
diff --git a/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd b/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd
new file mode 100644
index 0000000000000000000000000000000000000000..1a450918d6b87b129a2537db20c0e79e1024ec59
Binary files /dev/null and b/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd differ
diff --git a/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd.info b/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd.info
new file mode 100644
index 0000000000000000000000000000000000000000..42a46ee0767480ba644647d16d726a4de574a5fc
Binary files /dev/null and b/Library/metadata/4d/4d443ad1baea3ef4cbb286611f953ddd.info differ
diff --git a/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6 b/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6
new file mode 100644
index 0000000000000000000000000000000000000000..26f0ccc658f4d98036b9bdeb8beaf15baed7c8b3
Binary files /dev/null and b/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6 differ
diff --git a/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6.info b/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d0e7e62ec2b136186475d20ec7b50122c73c068
Binary files /dev/null and b/Library/metadata/4d/4dfd3f5da88944ec6ac5977d676c30c6.info differ
diff --git a/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe b/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe
new file mode 100644
index 0000000000000000000000000000000000000000..a6646a9e06385e8877c14c62dbe19f7bb5677086
Binary files /dev/null and b/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe differ
diff --git a/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe.info b/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe.info
new file mode 100644
index 0000000000000000000000000000000000000000..027f6c219ab443dabf44054a4c1a5b492760c821
Binary files /dev/null and b/Library/metadata/4e/4e830e2dbc3315b4b97cd5311a54e4fe.info differ
diff --git a/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc b/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc
new file mode 100644
index 0000000000000000000000000000000000000000..a525c65b70c5c2f112e158fea0cc2d6fc91122b6
Binary files /dev/null and b/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc differ
diff --git a/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc.info b/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc.info
new file mode 100644
index 0000000000000000000000000000000000000000..8a396e4e773140ac9f83576583bede91aeab2df3
Binary files /dev/null and b/Library/metadata/4f/4f0ca6874aa74540bb3d4fe5a0f86bcc.info differ
diff --git a/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2 b/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2
new file mode 100644
index 0000000000000000000000000000000000000000..95ceec0ad264bc3cf113d72a1ea4ff86962d9210
Binary files /dev/null and b/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2 differ
diff --git a/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2.info b/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2.info
new file mode 100644
index 0000000000000000000000000000000000000000..db9dbb621f18f1b2f51dbfdd9fa2aa415fe53b2b
Binary files /dev/null and b/Library/metadata/4f/4f0f9b9f3ed97ad2b9ba8f1a8e4666c2.info differ
diff --git a/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2 b/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2
new file mode 100644
index 0000000000000000000000000000000000000000..f1a1ab6535e475015879e80d795a3a601f5a0a9f
Binary files /dev/null and b/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2 differ
diff --git a/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2.info b/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2.info
new file mode 100644
index 0000000000000000000000000000000000000000..15de5bc3727e0382478af68f97a74bef8799a17b
Binary files /dev/null and b/Library/metadata/4f/4f234578336894dc081edf696f2ff5f2.info differ
diff --git a/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf b/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf
new file mode 100644
index 0000000000000000000000000000000000000000..21649176582353c3f66b142d40b006d95a6fa6ed
Binary files /dev/null and b/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf differ
diff --git a/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf.info b/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7b986fbb21fda41f353d2e1828e012f4cac0a21
Binary files /dev/null and b/Library/metadata/4f/4f5362359d4548b44a34a45f19efb4bf.info differ
diff --git a/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379 b/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379
new file mode 100644
index 0000000000000000000000000000000000000000..0d4082d1e85ddf43f2199e9b10c318db14d4f31a
Binary files /dev/null and b/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379 differ
diff --git a/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379.info b/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379.info
new file mode 100644
index 0000000000000000000000000000000000000000..0c3f2909f25b83c0d5123abbe31407dca43a2b48
Binary files /dev/null and b/Library/metadata/4f/4f768b64e6c37495699fffe3007e4379.info differ
diff --git a/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5 b/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5
new file mode 100644
index 0000000000000000000000000000000000000000..0b5454c7162a22481dfea7c4cd32327a35bf2304
Binary files /dev/null and b/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5 differ
diff --git a/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5.info b/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5.info
new file mode 100644
index 0000000000000000000000000000000000000000..fa1c2974cbb2d108b2aa8744ce35073a48972839
Binary files /dev/null and b/Library/metadata/4f/4fc12201ddc4b4d45b9bdecdf7f00ea5.info differ
diff --git a/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00 b/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00
new file mode 100644
index 0000000000000000000000000000000000000000..e1ce782fefe6740f572e3196fcb254567d47b4f7
Binary files /dev/null and b/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00 differ
diff --git a/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00.info b/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00.info
new file mode 100644
index 0000000000000000000000000000000000000000..f7b43d33cf0eb904770851122fb0b17d4cf1f17d
Binary files /dev/null and b/Library/metadata/4f/4fdf546d5b2970b4699447a4362bca00.info differ
diff --git a/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3 b/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3
new file mode 100644
index 0000000000000000000000000000000000000000..84193f46ccc86a0e283ae8c0eaea1f65f7fac69a
Binary files /dev/null and b/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3 differ
diff --git a/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3.info b/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3.info
new file mode 100644
index 0000000000000000000000000000000000000000..981cde03cf837d98726c321a83a657414fbe45d2
Binary files /dev/null and b/Library/metadata/4f/4feab40945fe47c46ab90b2d36c9cbc3.info differ
diff --git a/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e b/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e
new file mode 100644
index 0000000000000000000000000000000000000000..5995ae33a9cda3d64e3ff27a1c73c50e1484c046
Binary files /dev/null and b/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e differ
diff --git a/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e.info b/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e.info
new file mode 100644
index 0000000000000000000000000000000000000000..1d2c74dc4d17beb84450a2a05c35dbd430f93d46
Binary files /dev/null and b/Library/metadata/50/5075cb5aa3254b099b11b2840d7cd46e.info differ
diff --git a/Library/metadata/50/50de529b6a28f4a7093045e08810a5df b/Library/metadata/50/50de529b6a28f4a7093045e08810a5df
new file mode 100644
index 0000000000000000000000000000000000000000..99de1fda04ce8742d58431c09df4e3fb7012ed37
Binary files /dev/null and b/Library/metadata/50/50de529b6a28f4a7093045e08810a5df differ
diff --git a/Library/metadata/50/50de529b6a28f4a7093045e08810a5df.info b/Library/metadata/50/50de529b6a28f4a7093045e08810a5df.info
new file mode 100644
index 0000000000000000000000000000000000000000..9f6702d4214303c6ab3c2bb8e38f26b323f86c60
Binary files /dev/null and b/Library/metadata/50/50de529b6a28f4a7093045e08810a5df.info differ
diff --git a/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0 b/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0
new file mode 100644
index 0000000000000000000000000000000000000000..8fcc5d2af666d6b12b7e56e3f984aed920ceabbb
Binary files /dev/null and b/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0 differ
diff --git a/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0.info b/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0.info
new file mode 100644
index 0000000000000000000000000000000000000000..8eda38c4248bc0ffef8e8830c87699acd49f2a61
Binary files /dev/null and b/Library/metadata/51/510d1d319d2754ea4a47c6dd8c421ea0.info differ
diff --git a/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd b/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd
new file mode 100644
index 0000000000000000000000000000000000000000..59d6d40e043c3bf5298068da2639e5362ae44975
Binary files /dev/null and b/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd differ
diff --git a/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd.info b/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd.info
new file mode 100644
index 0000000000000000000000000000000000000000..49596b868a1afe1113b17e7cf92d2c91b46fbce3
Binary files /dev/null and b/Library/metadata/51/5143f58107604835ab1a5efa2d8818fd.info differ
diff --git a/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e b/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e
new file mode 100644
index 0000000000000000000000000000000000000000..bad30c38b5cf924424739bab9759969e8a778c57
Binary files /dev/null and b/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e differ
diff --git a/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e.info b/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e.info
new file mode 100644
index 0000000000000000000000000000000000000000..7b1239573d96315cecaade24845c55aa7d3837d7
Binary files /dev/null and b/Library/metadata/51/515638b803bef8599dbd6d5c8bdaa53e.info differ
diff --git a/Library/metadata/51/51b9083dfe89c7045996906effa67f3e b/Library/metadata/51/51b9083dfe89c7045996906effa67f3e
new file mode 100644
index 0000000000000000000000000000000000000000..4304893f76d49b106e46e019ad29a05dae5dc0e9
Binary files /dev/null and b/Library/metadata/51/51b9083dfe89c7045996906effa67f3e differ
diff --git a/Library/metadata/51/51b9083dfe89c7045996906effa67f3e.info b/Library/metadata/51/51b9083dfe89c7045996906effa67f3e.info
new file mode 100644
index 0000000000000000000000000000000000000000..6e4e00c89fb840601c759c2b8acb59a9a3b9af08
Binary files /dev/null and b/Library/metadata/51/51b9083dfe89c7045996906effa67f3e.info differ
diff --git a/Library/metadata/53/536c0048c80e8407084e29942e15685b b/Library/metadata/53/536c0048c80e8407084e29942e15685b
new file mode 100644
index 0000000000000000000000000000000000000000..1a93f75a43f1a58f3803f19c83e265bc7d318e26
Binary files /dev/null and b/Library/metadata/53/536c0048c80e8407084e29942e15685b differ
diff --git a/Library/metadata/53/536c0048c80e8407084e29942e15685b.info b/Library/metadata/53/536c0048c80e8407084e29942e15685b.info
new file mode 100644
index 0000000000000000000000000000000000000000..ec57ca4c535e8f48f5fdd2014810ac8f26b17e44
Binary files /dev/null and b/Library/metadata/53/536c0048c80e8407084e29942e15685b.info differ
diff --git a/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 b/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1
new file mode 100644
index 0000000000000000000000000000000000000000..38530c76ea8586875b698797e8b009bffd3431cb
Binary files /dev/null and b/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 differ
diff --git a/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info b/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info
new file mode 100644
index 0000000000000000000000000000000000000000..0f282bd0e275329068aa358e491f9875084550b8
Binary files /dev/null and b/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info differ
diff --git a/Library/metadata/53/53f55179de74d574b8fa00fb7950c924 b/Library/metadata/53/53f55179de74d574b8fa00fb7950c924
new file mode 100644
index 0000000000000000000000000000000000000000..861feaafc898b861a0423d99b38a394566c6d153
Binary files /dev/null and b/Library/metadata/53/53f55179de74d574b8fa00fb7950c924 differ
diff --git a/Library/metadata/53/53f55179de74d574b8fa00fb7950c924.info b/Library/metadata/53/53f55179de74d574b8fa00fb7950c924.info
new file mode 100644
index 0000000000000000000000000000000000000000..bdf09ba6bb386fb81b34ba23ee33811f2d04cf7b
Binary files /dev/null and b/Library/metadata/53/53f55179de74d574b8fa00fb7950c924.info differ
diff --git a/Library/metadata/54/543674eec776b1442a192c932e6cd9b3 b/Library/metadata/54/543674eec776b1442a192c932e6cd9b3
new file mode 100644
index 0000000000000000000000000000000000000000..3e9fb6d27b122c3766ed2b8cad112e05f838dcd7
Binary files /dev/null and b/Library/metadata/54/543674eec776b1442a192c932e6cd9b3 differ
diff --git a/Library/metadata/54/543674eec776b1442a192c932e6cd9b3.info b/Library/metadata/54/543674eec776b1442a192c932e6cd9b3.info
new file mode 100644
index 0000000000000000000000000000000000000000..55843719ed6cd202f76f71e425259292a2f07fde
Binary files /dev/null and b/Library/metadata/54/543674eec776b1442a192c932e6cd9b3.info differ
diff --git a/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4 b/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4
new file mode 100644
index 0000000000000000000000000000000000000000..f66406aa8866e4344e77e0e8f78f892b7416b3dd
Binary files /dev/null and b/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4 differ
diff --git a/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4.info b/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4.info
new file mode 100644
index 0000000000000000000000000000000000000000..8922b1cde1d38c9c2ab12bd8d3729d8ab106c639
Binary files /dev/null and b/Library/metadata/54/5469ef0820152a4ae45d400fdc4626e4.info differ
diff --git a/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e b/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e
new file mode 100644
index 0000000000000000000000000000000000000000..ac1f8c85265eccd2e35d86a537b4d29e8d4a1d85
Binary files /dev/null and b/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e differ
diff --git a/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e.info b/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e.info
new file mode 100644
index 0000000000000000000000000000000000000000..cb4dbf52ec3ac5ea3287a7dae9c3e2a2c75d224c
Binary files /dev/null and b/Library/metadata/54/54b9f4f056b83d2409dead4657b9270e.info differ
diff --git a/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0 b/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0
new file mode 100644
index 0000000000000000000000000000000000000000..671fc34f214af0669a7bba8c5f548800124ac1b7
Binary files /dev/null and b/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0 differ
diff --git a/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0.info b/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0.info
new file mode 100644
index 0000000000000000000000000000000000000000..255db2403f15cc32a24ed2bbafcc87e4ce094ea2
Binary files /dev/null and b/Library/metadata/54/54d21f6ece3b46479f0c328f8c6007e0.info differ
diff --git a/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5 b/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5
new file mode 100644
index 0000000000000000000000000000000000000000..098aac054024be7571954ef6ee030326cf645e1b
Binary files /dev/null and b/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5 differ
diff --git a/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5.info b/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5.info
new file mode 100644
index 0000000000000000000000000000000000000000..c197d8c7ceb00aba76e19fd3f331bba895392c92
Binary files /dev/null and b/Library/metadata/54/54e5fc61925bc4ca3b2c1e82dfb35eb5.info differ
diff --git a/Library/metadata/55/5533086cc69e03d4ab837de104b62517 b/Library/metadata/55/5533086cc69e03d4ab837de104b62517
new file mode 100644
index 0000000000000000000000000000000000000000..c71aff2c967cc2d7232082c129f153c24d74b3b7
Binary files /dev/null and b/Library/metadata/55/5533086cc69e03d4ab837de104b62517 differ
diff --git a/Library/metadata/55/5533086cc69e03d4ab837de104b62517.info b/Library/metadata/55/5533086cc69e03d4ab837de104b62517.info
new file mode 100644
index 0000000000000000000000000000000000000000..ef9a42446dd0e038bb62d2eb0d997392a57cb25c
Binary files /dev/null and b/Library/metadata/55/5533086cc69e03d4ab837de104b62517.info differ
diff --git a/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a b/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a
new file mode 100644
index 0000000000000000000000000000000000000000..838b637ecab9ea83de3f61b9bcf2dec1a68a76c9
Binary files /dev/null and b/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a differ
diff --git a/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a.info b/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a.info
new file mode 100644
index 0000000000000000000000000000000000000000..a052cf79a0018d2db3d1d4e9447645803e5cccdb
Binary files /dev/null and b/Library/metadata/56/566f8bae715954c65a2a7a4b5818fc7a.info differ
diff --git a/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b b/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b
new file mode 100644
index 0000000000000000000000000000000000000000..1ac20f16047c253e1bef9a3ebea7797a165d5976
Binary files /dev/null and b/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b differ
diff --git a/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b.info b/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b.info
new file mode 100644
index 0000000000000000000000000000000000000000..dd5ec48f6455165da0b1ffbd0d603984e4f746fa
Binary files /dev/null and b/Library/metadata/57/57b0c806ba25b48aa8a6ecb3345a4a9b.info differ
diff --git a/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2 b/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2
new file mode 100644
index 0000000000000000000000000000000000000000..306d96359c04a3afb49e702674f142521a7ac141
Binary files /dev/null and b/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2 differ
diff --git a/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2.info b/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2.info
new file mode 100644
index 0000000000000000000000000000000000000000..03f1e80b616350a04d4193103dbfe2e27b39bae2
Binary files /dev/null and b/Library/metadata/57/57b225205d5c95f4788249d0e4385ef2.info differ
diff --git a/Library/metadata/58/585b70cb75dd43efbfead809c30a1731 b/Library/metadata/58/585b70cb75dd43efbfead809c30a1731
new file mode 100644
index 0000000000000000000000000000000000000000..ebe90faa392fc94a230a630c5d25f12a33aa496f
Binary files /dev/null and b/Library/metadata/58/585b70cb75dd43efbfead809c30a1731 differ
diff --git a/Library/metadata/58/585b70cb75dd43efbfead809c30a1731.info b/Library/metadata/58/585b70cb75dd43efbfead809c30a1731.info
new file mode 100644
index 0000000000000000000000000000000000000000..48fb0dd12bb203bdb61a01cb35e29f4856f3ae0f
Binary files /dev/null and b/Library/metadata/58/585b70cb75dd43efbfead809c30a1731.info differ
diff --git a/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434 b/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434
new file mode 100644
index 0000000000000000000000000000000000000000..f79c3ac7dedc02cffaad110096d5030cf83ad95c
Binary files /dev/null and b/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434 differ
diff --git a/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434.info b/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434.info
new file mode 100644
index 0000000000000000000000000000000000000000..a66eaf833524f02afd88aa6cfd4f8ab88b3e0a45
Binary files /dev/null and b/Library/metadata/58/589b3ddef1e4d44cea68e0144bd95434.info differ
diff --git a/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99 b/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99
new file mode 100644
index 0000000000000000000000000000000000000000..d41966a6378c0152cf9d2cd511fee9aa4a5e99cc
Binary files /dev/null and b/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99 differ
diff --git a/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99.info b/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99.info
new file mode 100644
index 0000000000000000000000000000000000000000..7ce7a89e36f25404e30a11452962d1acd4a73e8b
Binary files /dev/null and b/Library/metadata/59/592d3538a9273584fbb80beb46e9ed99.info differ
diff --git a/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023 b/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023
new file mode 100644
index 0000000000000000000000000000000000000000..dedc33507d4ebf457e812aa51752b1ce0e3a3bfd
Binary files /dev/null and b/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023 differ
diff --git a/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023.info b/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023.info
new file mode 100644
index 0000000000000000000000000000000000000000..ccbb38fb6eaaba602cc18b9abf628b3e3640a627
Binary files /dev/null and b/Library/metadata/59/592f7288ed0df2c4b884e2cd9baac023.info differ
diff --git a/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15 b/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15
new file mode 100644
index 0000000000000000000000000000000000000000..ea2dc8ed9269c779a88d75b0864b039dd482aa84
Binary files /dev/null and b/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15 differ
diff --git a/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15.info b/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15.info
new file mode 100644
index 0000000000000000000000000000000000000000..0fc69e1a7b65d0db0ff38b591545f5dab5e5b832
Binary files /dev/null and b/Library/metadata/59/5941c79cb78c34a0d9c677ece9784f15.info differ
diff --git a/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5 b/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5
new file mode 100644
index 0000000000000000000000000000000000000000..bec97f2c1840a7072fb7c898e8a0beae60fa7c0d
Binary files /dev/null and b/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5 differ
diff --git a/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5.info b/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5.info
new file mode 100644
index 0000000000000000000000000000000000000000..c6d212e59809bcbc0e96ab3079227dca5903bb35
Binary files /dev/null and b/Library/metadata/59/5953794ba01370145bc8aa7585bff6e5.info differ
diff --git a/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60 b/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60
new file mode 100644
index 0000000000000000000000000000000000000000..e6968c43d58bead4e011da8b6ae7e5454cbe5630
Binary files /dev/null and b/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60 differ
diff --git a/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60.info b/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60.info
new file mode 100644
index 0000000000000000000000000000000000000000..a93b8c71b88cd1eeb0298d22188aac4ac04a0fea
Binary files /dev/null and b/Library/metadata/59/599a5fd92bab81a4ab02e52d0b1b1c60.info differ
diff --git a/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea b/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea
new file mode 100644
index 0000000000000000000000000000000000000000..36deee0b5afb1e354c4cce3c4ef09d7736de026b
Binary files /dev/null and b/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea differ
diff --git a/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea.info b/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea.info
new file mode 100644
index 0000000000000000000000000000000000000000..6a6772ecd2f04fd039b3dc691f4aa97b68756a23
Binary files /dev/null and b/Library/metadata/5a/5a1bcd9f6bcd22940882a93ee43f1eea.info differ
diff --git a/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39 b/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39
new file mode 100644
index 0000000000000000000000000000000000000000..1253fb6f04769fbc79e24a585c1971ae1de10c3e
Binary files /dev/null and b/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39 differ
diff --git a/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39.info b/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39.info
new file mode 100644
index 0000000000000000000000000000000000000000..a7f09233df2feaf131a9f96bde5d6688e06e8ac1
Binary files /dev/null and b/Library/metadata/5a/5a835701b5c36f54da18e162a6590a39.info differ
diff --git a/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5 b/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5
new file mode 100644
index 0000000000000000000000000000000000000000..bd708a83cf52aa1fde0f290f08b6cb00c73fc582
Binary files /dev/null and b/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5 differ
diff --git a/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5.info b/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5.info
new file mode 100644
index 0000000000000000000000000000000000000000..f251ccd69cbe6ea6fef955e2193e1b42733fa00c
Binary files /dev/null and b/Library/metadata/5a/5a9c1c408e1502d42befe580f215d2d5.info differ
diff --git a/Library/metadata/5a/5afb9687033af4bca957216add3fe854 b/Library/metadata/5a/5afb9687033af4bca957216add3fe854
new file mode 100644
index 0000000000000000000000000000000000000000..e52d199ad6cf71ce7921898af7a2446b51b36b0f
Binary files /dev/null and b/Library/metadata/5a/5afb9687033af4bca957216add3fe854 differ
diff --git a/Library/metadata/5a/5afb9687033af4bca957216add3fe854.info b/Library/metadata/5a/5afb9687033af4bca957216add3fe854.info
new file mode 100644
index 0000000000000000000000000000000000000000..50ef7c30a2111c8083762d0d3c8572b32bf288cf
Binary files /dev/null and b/Library/metadata/5a/5afb9687033af4bca957216add3fe854.info differ
diff --git a/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57 b/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57
new file mode 100644
index 0000000000000000000000000000000000000000..7b86b3fa6646102770c6a21ab3f073624b31ccaf
Binary files /dev/null and b/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57 differ
diff --git a/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57.info b/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c178008628291154524d6a37fbc91b2c4c82c0c
Binary files /dev/null and b/Library/metadata/5b/5b328b15bd3e3b544be1261c87465d57.info differ
diff --git a/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27 b/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27
new file mode 100644
index 0000000000000000000000000000000000000000..099277b8128ac8f686eb91770fdc39fece773407
Binary files /dev/null and b/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27 differ
diff --git a/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27.info b/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27.info
new file mode 100644
index 0000000000000000000000000000000000000000..77d6b7bef432249701df729608698bc3dd7a9171
Binary files /dev/null and b/Library/metadata/5b/5b5c6a576605b3c4aab7d27193785f27.info differ
diff --git a/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e b/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e
new file mode 100644
index 0000000000000000000000000000000000000000..cf2d47cc3bac2bee7403bdeb0954fb82e8e0ca38
Binary files /dev/null and b/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e differ
diff --git a/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e.info b/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e.info
new file mode 100644
index 0000000000000000000000000000000000000000..d22abd981577aabe4e9bf7706c03acbf4696de3a
Binary files /dev/null and b/Library/metadata/5c/5c38c5679d98faa4ae7df9fae0a8226e.info differ
diff --git a/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482 b/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482
new file mode 100644
index 0000000000000000000000000000000000000000..46c8cf5262cbb37a5843cdaa56e019e68b9ebe1c
Binary files /dev/null and b/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482 differ
diff --git a/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482.info b/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482.info
new file mode 100644
index 0000000000000000000000000000000000000000..d59d981d0d43a24b40c69dec3003348797144c64
Binary files /dev/null and b/Library/metadata/5c/5c9c20367dc78104f9291c9563de9482.info differ
diff --git a/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c b/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c
new file mode 100644
index 0000000000000000000000000000000000000000..b543d38c96638882d871818ccdc0ed0da9d86584
Binary files /dev/null and b/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c differ
diff --git a/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c.info b/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c.info
new file mode 100644
index 0000000000000000000000000000000000000000..b514ec4d843cc50c8986240ec53f23d2ec9fce7d
Binary files /dev/null and b/Library/metadata/5e/5e0d7b2c5d854094d9eba3fe19988b8c.info differ
diff --git a/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164 b/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164
new file mode 100644
index 0000000000000000000000000000000000000000..63e1819cdeba2d24ee286d46b93afef4763dea14
Binary files /dev/null and b/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164 differ
diff --git a/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164.info b/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164.info
new file mode 100644
index 0000000000000000000000000000000000000000..ddb4a6c81d73f78087ad4d4b325d3f505b5b9739
Binary files /dev/null and b/Library/metadata/5e/5e57a6c62c1ec47d0bceb70495845164.info differ
diff --git a/Library/metadata/5e/5e5f024ae514f244794f912640f364b5 b/Library/metadata/5e/5e5f024ae514f244794f912640f364b5
new file mode 100644
index 0000000000000000000000000000000000000000..fdcf7782e5a3b058b6eb2708e9ef8b3dcfc0d09d
Binary files /dev/null and b/Library/metadata/5e/5e5f024ae514f244794f912640f364b5 differ
diff --git a/Library/metadata/5e/5e5f024ae514f244794f912640f364b5.info b/Library/metadata/5e/5e5f024ae514f244794f912640f364b5.info
new file mode 100644
index 0000000000000000000000000000000000000000..5c9099882107911cb96001d0f1859c9e3ea94cba
Binary files /dev/null and b/Library/metadata/5e/5e5f024ae514f244794f912640f364b5.info differ
diff --git a/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141 b/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141
new file mode 100644
index 0000000000000000000000000000000000000000..2dd8f425227e0a67df085eae5d9878833ed964c2
Binary files /dev/null and b/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141 differ
diff --git a/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141.info b/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141.info
new file mode 100644
index 0000000000000000000000000000000000000000..c885500f0260abbc20f8a162e62f9ae7e348e136
Binary files /dev/null and b/Library/metadata/5e/5e7a49a6952af4d4ab2c3b038be68141.info differ
diff --git a/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d b/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d
new file mode 100644
index 0000000000000000000000000000000000000000..41fbfe90a8677d46a0f08823192e0672cd52f164
Binary files /dev/null and b/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d differ
diff --git a/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d.info b/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d.info
new file mode 100644
index 0000000000000000000000000000000000000000..7232e27da54546b0c635bfac4bd5834b764b4cb3
Binary files /dev/null and b/Library/metadata/5e/5e7c9ab97e5884e4eaa5967e9024f39d.info differ
diff --git a/Library/metadata/5e/5e8273be325e1c8498a813de2885162a b/Library/metadata/5e/5e8273be325e1c8498a813de2885162a
new file mode 100644
index 0000000000000000000000000000000000000000..718bda9f2c113a8dd8d7da41c6ea2eba6468f146
Binary files /dev/null and b/Library/metadata/5e/5e8273be325e1c8498a813de2885162a differ
diff --git a/Library/metadata/5e/5e8273be325e1c8498a813de2885162a.info b/Library/metadata/5e/5e8273be325e1c8498a813de2885162a.info
new file mode 100644
index 0000000000000000000000000000000000000000..66a4db4d08ad778bce08cd0f9d098b2ea1dec1ac
Binary files /dev/null and b/Library/metadata/5e/5e8273be325e1c8498a813de2885162a.info differ
diff --git a/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88 b/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88
new file mode 100644
index 0000000000000000000000000000000000000000..cb11507939cba208be73b6e2b07fbb4916d57ea2
Binary files /dev/null and b/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88 differ
diff --git a/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88.info b/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88.info
new file mode 100644
index 0000000000000000000000000000000000000000..bdebb56124578ce8268d5155292d47552050dc74
Binary files /dev/null and b/Library/metadata/5e/5ea9f573d4b800a49b9d83a1f61c0a88.info differ
diff --git a/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9 b/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9
new file mode 100644
index 0000000000000000000000000000000000000000..52c6e4f9b10588a1ba34da92080b5f171d6d40d4
Binary files /dev/null and b/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9 differ
diff --git a/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9.info b/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9.info
new file mode 100644
index 0000000000000000000000000000000000000000..3dbe26e4f7121c6447f830bfabffffc500ad6e42
Binary files /dev/null and b/Library/metadata/5e/5ec95f4d5b2d1f14e9ff8682562553f9.info differ
diff --git a/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d b/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d
new file mode 100644
index 0000000000000000000000000000000000000000..f97c093ebd5f657fc35bf1be9dc4591085b4a2f9
Binary files /dev/null and b/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d differ
diff --git a/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d.info b/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d.info
new file mode 100644
index 0000000000000000000000000000000000000000..8cbd8ace44e765caa93c9aa5142c2a11494677a9
Binary files /dev/null and b/Library/metadata/5f/5f110e9322a4b934e9b821e2fd41061d.info differ
diff --git a/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 b/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7
new file mode 100644
index 0000000000000000000000000000000000000000..880cec35735eb229de8f3216656f15614299d279
Binary files /dev/null and b/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 differ
diff --git a/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info b/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info
new file mode 100644
index 0000000000000000000000000000000000000000..a7442037f6fde88379650ea23466ab982df486c9
Binary files /dev/null and b/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info differ
diff --git a/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45 b/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45
new file mode 100644
index 0000000000000000000000000000000000000000..a2e0ab75f27f2ebfa5c7151b51b95634b5cd0461
Binary files /dev/null and b/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45 differ
diff --git a/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45.info b/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45.info
new file mode 100644
index 0000000000000000000000000000000000000000..1f0b4ef567d43f9f5d3a48c6f8f7a6eec1af3aac
Binary files /dev/null and b/Library/metadata/5f/5fc988a1d5b04aee9a5222502b201a45.info differ
diff --git a/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c b/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c
new file mode 100644
index 0000000000000000000000000000000000000000..3acf042c289700f0087ad15adfad6fdf289f4301
Binary files /dev/null and b/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c differ
diff --git a/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c.info b/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c.info
new file mode 100644
index 0000000000000000000000000000000000000000..0e653737579e19b85160c0d91d7cd90c11d829ee
Binary files /dev/null and b/Library/metadata/5f/5ffd2adf615994485991e37bacbf735c.info differ
diff --git a/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e b/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e
new file mode 100644
index 0000000000000000000000000000000000000000..bdca544ca2aa434c660ca1e230503d43ef0a68a6
Binary files /dev/null and b/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e differ
diff --git a/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e.info b/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e.info
new file mode 100644
index 0000000000000000000000000000000000000000..8f40ba5f39bd5f02bb7aa4008424fa1c8a99a1d7
Binary files /dev/null and b/Library/metadata/60/60235fb861b8bbe4c974f6a5a7d9303e.info differ
diff --git a/Library/metadata/60/60484193e609a5249b8965a6da3e6de5 b/Library/metadata/60/60484193e609a5249b8965a6da3e6de5
new file mode 100644
index 0000000000000000000000000000000000000000..9f3b628e1536be66bd0c043a7016a560ebe1bb7e
Binary files /dev/null and b/Library/metadata/60/60484193e609a5249b8965a6da3e6de5 differ
diff --git a/Library/metadata/60/60484193e609a5249b8965a6da3e6de5.info b/Library/metadata/60/60484193e609a5249b8965a6da3e6de5.info
new file mode 100644
index 0000000000000000000000000000000000000000..b6a95ff637f8bad47563c77873aa214d6ea7eea8
Binary files /dev/null and b/Library/metadata/60/60484193e609a5249b8965a6da3e6de5.info differ
diff --git a/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f b/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f
new file mode 100644
index 0000000000000000000000000000000000000000..8d6df35db9487d327de4970951933d23d5d71701
Binary files /dev/null and b/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f differ
diff --git a/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f.info b/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f.info
new file mode 100644
index 0000000000000000000000000000000000000000..47f9d6c8161b2ab87dd1c0259fa356608f79896a
Binary files /dev/null and b/Library/metadata/60/6055be8ebefd69e48b49212b09b47b2f.info differ
diff --git a/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e b/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e
new file mode 100644
index 0000000000000000000000000000000000000000..f6b02c952513e58150a2d50955a84622bb2dfa24
Binary files /dev/null and b/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e differ
diff --git a/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e.info b/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c42ac16e75274caa5e8e87c367fe435c475b3e3
Binary files /dev/null and b/Library/metadata/60/60bf1c48322e96244ba0e70630b6534e.info differ
diff --git a/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213 b/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213
new file mode 100644
index 0000000000000000000000000000000000000000..7d9496703ffc44d0feda654511dca9f20efbcd1a
Binary files /dev/null and b/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213 differ
diff --git a/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213.info b/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213.info
new file mode 100644
index 0000000000000000000000000000000000000000..eb963567adc49348e95de2c08c089331cf093e5c
Binary files /dev/null and b/Library/metadata/61/612dbbb3e3c5f24478365bd0ccf54213.info differ
diff --git a/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b b/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b
new file mode 100644
index 0000000000000000000000000000000000000000..809cd010c41a26fa2b476066356741799a8e0712
Binary files /dev/null and b/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b differ
diff --git a/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b.info b/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b.info
new file mode 100644
index 0000000000000000000000000000000000000000..9100faafc0d524093c43fd2208367cc1506fec4a
Binary files /dev/null and b/Library/metadata/61/6169383bf3e1d794bb86dbc70f16b91b.info differ
diff --git a/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa b/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa
new file mode 100644
index 0000000000000000000000000000000000000000..bec4d6c401ff63c9217038e933d54d3acf22703b
Binary files /dev/null and b/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa differ
diff --git a/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa.info b/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa.info
new file mode 100644
index 0000000000000000000000000000000000000000..d657c73876417c7ac5325cdd46631f42c189eaef
Binary files /dev/null and b/Library/metadata/61/617202f4e2bed4ef8acccfd6c1ecd6fa.info differ
diff --git a/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1 b/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1
new file mode 100644
index 0000000000000000000000000000000000000000..9e20f9f52b18635947fd73bd3ef743170df49b96
Binary files /dev/null and b/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1 differ
diff --git a/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1.info b/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1.info
new file mode 100644
index 0000000000000000000000000000000000000000..4f6789b90f681b704c78ed1005652aa37b31e4b5
Binary files /dev/null and b/Library/metadata/61/61d72cb49da3040d5ade3edfd6eccfc1.info differ
diff --git a/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f b/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f
new file mode 100644
index 0000000000000000000000000000000000000000..cc229ba493fb2a9783f5793df5babe3f64f3b64d
Binary files /dev/null and b/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f differ
diff --git a/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f.info b/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f.info
new file mode 100644
index 0000000000000000000000000000000000000000..5fa5483b866bba384c5bcadc84090a64095f4936
Binary files /dev/null and b/Library/metadata/62/62772aad98ed04f0d955b7d20de61f7f.info differ
diff --git a/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0 b/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0
new file mode 100644
index 0000000000000000000000000000000000000000..9319d71b5a25f3eba75e9b24275465b68a3a2134
Binary files /dev/null and b/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0 differ
diff --git a/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0.info b/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0.info
new file mode 100644
index 0000000000000000000000000000000000000000..cac0fafa47ab35f9ae3c0b1e07cad4efc8e3e2bc
Binary files /dev/null and b/Library/metadata/62/6277a751c6c9f46359fc7004b3ee12f0.info differ
diff --git a/Library/metadata/63/6366ee97f6b541449155028b9487355a b/Library/metadata/63/6366ee97f6b541449155028b9487355a
new file mode 100644
index 0000000000000000000000000000000000000000..bb39d36dbbfd23214ee998d263e72698c6950627
Binary files /dev/null and b/Library/metadata/63/6366ee97f6b541449155028b9487355a differ
diff --git a/Library/metadata/63/6366ee97f6b541449155028b9487355a.info b/Library/metadata/63/6366ee97f6b541449155028b9487355a.info
new file mode 100644
index 0000000000000000000000000000000000000000..da01b50e0aad991379fe0fd05dbbb3d8516c3779
Binary files /dev/null and b/Library/metadata/63/6366ee97f6b541449155028b9487355a.info differ
diff --git a/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466 b/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466
new file mode 100644
index 0000000000000000000000000000000000000000..02e9e4e830e9c84c10a3dc48b5a9ba948a04cf87
Binary files /dev/null and b/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466 differ
diff --git a/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466.info b/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466.info
new file mode 100644
index 0000000000000000000000000000000000000000..94d59517868a9f7f37fa8682014d53a65ad4a2ad
Binary files /dev/null and b/Library/metadata/63/636d1568e709f224db16dfc9fbe7b466.info differ
diff --git a/Library/metadata/63/63d5b4042818ff147a08b398a0548567 b/Library/metadata/63/63d5b4042818ff147a08b398a0548567
new file mode 100644
index 0000000000000000000000000000000000000000..9c34aef5a600fd209c828f83d41d17245016ebb4
Binary files /dev/null and b/Library/metadata/63/63d5b4042818ff147a08b398a0548567 differ
diff --git a/Library/metadata/63/63d5b4042818ff147a08b398a0548567.info b/Library/metadata/63/63d5b4042818ff147a08b398a0548567.info
new file mode 100644
index 0000000000000000000000000000000000000000..212c3095bcf2024f1d008301f574d3c7b19187d0
Binary files /dev/null and b/Library/metadata/63/63d5b4042818ff147a08b398a0548567.info differ
diff --git a/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9 b/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9
new file mode 100644
index 0000000000000000000000000000000000000000..571073d2391d0840d6f642237e2a901a129f59d0
Binary files /dev/null and b/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9 differ
diff --git a/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9.info b/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9.info
new file mode 100644
index 0000000000000000000000000000000000000000..c6ee27a2c57e3a73b34fc1a66ec875a4c784300d
Binary files /dev/null and b/Library/metadata/63/63e8a6023745e4347bb661e87a9be1d9.info differ
diff --git a/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5 b/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5
new file mode 100644
index 0000000000000000000000000000000000000000..7e637c38c809f28c0c74bd07386f11de6d8befd8
Binary files /dev/null and b/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5 differ
diff --git a/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5.info b/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5.info
new file mode 100644
index 0000000000000000000000000000000000000000..05e841f9c5eba4ec358cb5f5408e310034c47434
Binary files /dev/null and b/Library/metadata/64/645165c8169474bfbbeb8fb0bcfd26f5.info differ
diff --git a/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c b/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c
new file mode 100644
index 0000000000000000000000000000000000000000..98b47147fd2914af889d83602a9fd71a8e16c4a6
Binary files /dev/null and b/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c differ
diff --git a/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c.info b/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c.info
new file mode 100644
index 0000000000000000000000000000000000000000..ba8126faa08cdb17355e7191cfe201bfb3b9556f
Binary files /dev/null and b/Library/metadata/64/64b9fad609434c489c32b1cdf2004a1c.info differ
diff --git a/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f b/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f
new file mode 100644
index 0000000000000000000000000000000000000000..0c730708ede8e0ef6c24b274957b0e0323179a54
Binary files /dev/null and b/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f differ
diff --git a/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f.info b/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f.info
new file mode 100644
index 0000000000000000000000000000000000000000..c20e502cce52c229e0c191203dcaa83bc152f708
Binary files /dev/null and b/Library/metadata/65/650ea1d167b834d0f86d94e1e8c3b80f.info differ
diff --git a/Library/metadata/65/6546d7765b4165b40850b3667f981c26 b/Library/metadata/65/6546d7765b4165b40850b3667f981c26
new file mode 100644
index 0000000000000000000000000000000000000000..9ba73ebda0ef0f133385b43d809f2da9c58b8144
Binary files /dev/null and b/Library/metadata/65/6546d7765b4165b40850b3667f981c26 differ
diff --git a/Library/metadata/65/6546d7765b4165b40850b3667f981c26.info b/Library/metadata/65/6546d7765b4165b40850b3667f981c26.info
new file mode 100644
index 0000000000000000000000000000000000000000..fa49ce12b93b4cb68dc009a2a81e8e4bc6f30337
Binary files /dev/null and b/Library/metadata/65/6546d7765b4165b40850b3667f981c26.info differ
diff --git a/Library/metadata/65/656e461844099ae43a609ff6109b0877 b/Library/metadata/65/656e461844099ae43a609ff6109b0877
new file mode 100644
index 0000000000000000000000000000000000000000..8350709e3eb9ddff571033f67017bf03aff2185c
Binary files /dev/null and b/Library/metadata/65/656e461844099ae43a609ff6109b0877 differ
diff --git a/Library/metadata/65/656e461844099ae43a609ff6109b0877.info b/Library/metadata/65/656e461844099ae43a609ff6109b0877.info
new file mode 100644
index 0000000000000000000000000000000000000000..858661cf15262db171d493654c84c3514bf659bd
Binary files /dev/null and b/Library/metadata/65/656e461844099ae43a609ff6109b0877.info differ
diff --git a/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0 b/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0
new file mode 100644
index 0000000000000000000000000000000000000000..481052791e64a2d8b66e93b29aedefa2be0a477f
Binary files /dev/null and b/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0 differ
diff --git a/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0.info b/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0.info
new file mode 100644
index 0000000000000000000000000000000000000000..fd8d334eca35ed591eead702e2a7c30472280f88
Binary files /dev/null and b/Library/metadata/65/658c1fb149e7498aa072b0c0f3bf13f0.info differ
diff --git a/Library/metadata/65/6597c6ea86d36477081342001145d8d9 b/Library/metadata/65/6597c6ea86d36477081342001145d8d9
new file mode 100644
index 0000000000000000000000000000000000000000..39fd1d0b03a12b4684bb29b36321c19cd85b73b5
Binary files /dev/null and b/Library/metadata/65/6597c6ea86d36477081342001145d8d9 differ
diff --git a/Library/metadata/65/6597c6ea86d36477081342001145d8d9.info b/Library/metadata/65/6597c6ea86d36477081342001145d8d9.info
new file mode 100644
index 0000000000000000000000000000000000000000..75908b0d4437147d843226862c694d7fed5782e8
Binary files /dev/null and b/Library/metadata/65/6597c6ea86d36477081342001145d8d9.info differ
diff --git a/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b b/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b
new file mode 100644
index 0000000000000000000000000000000000000000..035131731535f5f2759dc4bb18028f5bede07bda
Binary files /dev/null and b/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b differ
diff --git a/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b.info b/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b.info
new file mode 100644
index 0000000000000000000000000000000000000000..b40857153eeaab59ad7434a84903900eef7c68bc
Binary files /dev/null and b/Library/metadata/65/65d58d50c3db54f979b1ffae3777d74b.info differ
diff --git a/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88 b/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88
new file mode 100644
index 0000000000000000000000000000000000000000..506371c2dbebfc98e91ece0f5fb2df67d08a6d4d
Binary files /dev/null and b/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88 differ
diff --git a/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88.info b/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88.info
new file mode 100644
index 0000000000000000000000000000000000000000..d78973be5c82c77b454e1bea1621c05fc7eabfb2
Binary files /dev/null and b/Library/metadata/66/66083b7f6dc2e433eae33f3244b2ce88.info differ
diff --git a/Library/metadata/66/663dc299359662f44b24715f5f793b4e b/Library/metadata/66/663dc299359662f44b24715f5f793b4e
new file mode 100644
index 0000000000000000000000000000000000000000..a17e51564d77299fb5d7c7b3bbedbf0e3fa7f86a
Binary files /dev/null and b/Library/metadata/66/663dc299359662f44b24715f5f793b4e differ
diff --git a/Library/metadata/66/663dc299359662f44b24715f5f793b4e.info b/Library/metadata/66/663dc299359662f44b24715f5f793b4e.info
new file mode 100644
index 0000000000000000000000000000000000000000..bc181690f6daee9e601e585d7bef08e84be32b49
Binary files /dev/null and b/Library/metadata/66/663dc299359662f44b24715f5f793b4e.info differ
diff --git a/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade b/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade
new file mode 100644
index 0000000000000000000000000000000000000000..9ec888c9de124d79b8febcb38fc4e9f6b3d53891
Binary files /dev/null and b/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade differ
diff --git a/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade.info b/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade.info
new file mode 100644
index 0000000000000000000000000000000000000000..90c3f940725322a6fa0409cb6ab6edce846fdfd9
Binary files /dev/null and b/Library/metadata/66/667edac0c86cd7041ad41b91ee8b9ade.info differ
diff --git a/Library/metadata/66/669717f3193a457b9bad9665ebcae836 b/Library/metadata/66/669717f3193a457b9bad9665ebcae836
new file mode 100644
index 0000000000000000000000000000000000000000..77ba1a1570afac8b4e96a2cfbff92750c1c0169b
Binary files /dev/null and b/Library/metadata/66/669717f3193a457b9bad9665ebcae836 differ
diff --git a/Library/metadata/66/669717f3193a457b9bad9665ebcae836.info b/Library/metadata/66/669717f3193a457b9bad9665ebcae836.info
new file mode 100644
index 0000000000000000000000000000000000000000..ed46092d052c09085c37076b0b7206cb5547d800
Binary files /dev/null and b/Library/metadata/66/669717f3193a457b9bad9665ebcae836.info differ
diff --git a/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76 b/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76
new file mode 100644
index 0000000000000000000000000000000000000000..8468521dd76c09878db8911bfbecf13622f105a0
Binary files /dev/null and b/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76 differ
diff --git a/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76.info b/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76.info
new file mode 100644
index 0000000000000000000000000000000000000000..75569de677f62280429580de9fa4692f22f3238f
Binary files /dev/null and b/Library/metadata/66/66af5995e65ce4d41b4fcd436e66af76.info differ
diff --git a/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df b/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df
new file mode 100644
index 0000000000000000000000000000000000000000..2634f36929211831cab920264dcde2f249f1edbd
Binary files /dev/null and b/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df differ
diff --git a/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df.info b/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df.info
new file mode 100644
index 0000000000000000000000000000000000000000..a65ff42b400bc29804cddccfa0fd63d085fde4c3
Binary files /dev/null and b/Library/metadata/67/677e759c4d7078440b49c1e54d3a69df.info differ
diff --git a/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a b/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a
new file mode 100644
index 0000000000000000000000000000000000000000..ff192b62fc5616f28a17fb176cd2a7968b0589d1
Binary files /dev/null and b/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a differ
diff --git a/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a.info b/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a.info
new file mode 100644
index 0000000000000000000000000000000000000000..6d8cb54eebfa86210ab59c5717713eeaee260907
Binary files /dev/null and b/Library/metadata/68/6831d8d7395cfec4f89225e63aaf0f5a.info differ
diff --git a/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461 b/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461
new file mode 100644
index 0000000000000000000000000000000000000000..a6779cd03ad8adc200984317dc85357edc479694
Binary files /dev/null and b/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461 differ
diff --git a/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461.info b/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461.info
new file mode 100644
index 0000000000000000000000000000000000000000..27dc32cf294a7771392151f291a8cc08f89678bc
Binary files /dev/null and b/Library/metadata/68/6887b29fa3d5b8442bc6d7a79cefd461.info differ
diff --git a/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe b/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe
new file mode 100644
index 0000000000000000000000000000000000000000..29a75b830d2c934cb4226f9a04a1c8990c0ef19e
Binary files /dev/null and b/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe differ
diff --git a/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe.info b/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe.info
new file mode 100644
index 0000000000000000000000000000000000000000..9280ce16540df4a91c97f003f207a027e69eb469
Binary files /dev/null and b/Library/metadata/68/68eedd4e5b33b37429c02c4add0036fe.info differ
diff --git a/Library/metadata/69/691475c57a824010be0c6f474caeb7e1 b/Library/metadata/69/691475c57a824010be0c6f474caeb7e1
new file mode 100644
index 0000000000000000000000000000000000000000..e7a021f83d48b5241f7cf25a6443daa981560cc9
Binary files /dev/null and b/Library/metadata/69/691475c57a824010be0c6f474caeb7e1 differ
diff --git a/Library/metadata/69/691475c57a824010be0c6f474caeb7e1.info b/Library/metadata/69/691475c57a824010be0c6f474caeb7e1.info
new file mode 100644
index 0000000000000000000000000000000000000000..c6b4043f9130b4f986b85bd7e857bb33385b3d37
Binary files /dev/null and b/Library/metadata/69/691475c57a824010be0c6f474caeb7e1.info differ
diff --git a/Library/metadata/69/691db8cb70c4426a8ae718465c21345f b/Library/metadata/69/691db8cb70c4426a8ae718465c21345f
new file mode 100644
index 0000000000000000000000000000000000000000..2ce943a5c063f687727931af499921458c79295c
Binary files /dev/null and b/Library/metadata/69/691db8cb70c4426a8ae718465c21345f differ
diff --git a/Library/metadata/69/691db8cb70c4426a8ae718465c21345f.info b/Library/metadata/69/691db8cb70c4426a8ae718465c21345f.info
new file mode 100644
index 0000000000000000000000000000000000000000..c5ba7102791a6cfd9f53e1e6d3007ddafa97408d
Binary files /dev/null and b/Library/metadata/69/691db8cb70c4426a8ae718465c21345f.info differ
diff --git a/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2 b/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2
new file mode 100644
index 0000000000000000000000000000000000000000..1ee04f0209811cad31e54a8a3ea247dcf21ea6fb
Binary files /dev/null and b/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2 differ
diff --git a/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2.info b/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2.info
new file mode 100644
index 0000000000000000000000000000000000000000..fb1c52cb527a590697440c4a9f8c570b08b67ecd
Binary files /dev/null and b/Library/metadata/69/69ab96fda5bd9544a89606daca971ca2.info differ
diff --git a/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309 b/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309
new file mode 100644
index 0000000000000000000000000000000000000000..945b736c75d9575d40f3f46715d02b1b975c6e5f
Binary files /dev/null and b/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309 differ
diff --git a/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309.info b/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309.info
new file mode 100644
index 0000000000000000000000000000000000000000..e7c1c27095c21684bb83b04ff26337266808301c
Binary files /dev/null and b/Library/metadata/69/69dcb5a7806bdbf418d2b18aaedff309.info differ
diff --git a/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5 b/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5
new file mode 100644
index 0000000000000000000000000000000000000000..f91b40583fb3fde722aa71fa46ce971db560055b
Binary files /dev/null and b/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5 differ
diff --git a/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5.info b/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5.info
new file mode 100644
index 0000000000000000000000000000000000000000..bfed484830621133f060bc82fce476a9f70705c8
Binary files /dev/null and b/Library/metadata/6a/6a10b2909283487f913b00d94cd3faf5.info differ
diff --git a/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d b/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d
new file mode 100644
index 0000000000000000000000000000000000000000..a595d787a841db99b02c2d3f0553622de5762b11
Binary files /dev/null and b/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d differ
diff --git a/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d.info b/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d.info
new file mode 100644
index 0000000000000000000000000000000000000000..0098171ad2dfaa1f80d19b68850d8a438b905714
Binary files /dev/null and b/Library/metadata/6a/6ace62d30f494c948b71d5594afce11d.info differ
diff --git a/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5 b/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5
new file mode 100644
index 0000000000000000000000000000000000000000..22461fc9bdf6c12bfc2ed47d336f04325a7e92aa
Binary files /dev/null and b/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5 differ
diff --git a/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5.info b/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5.info
new file mode 100644
index 0000000000000000000000000000000000000000..fdeb4f954e9f84e09f6451ebc23b7ec3efdc4d9f
Binary files /dev/null and b/Library/metadata/6a/6ad632cbcc87f634d9b86006cdffdaf5.info differ
diff --git a/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832 b/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832
new file mode 100644
index 0000000000000000000000000000000000000000..7db347f8ac4710a591c4ac5348e2bc1c93cafd0b
Binary files /dev/null and b/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832 differ
diff --git a/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832.info b/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832.info
new file mode 100644
index 0000000000000000000000000000000000000000..22facec2599166a6bf52d46f7f2c22dd2d6f5186
Binary files /dev/null and b/Library/metadata/6a/6afb166a156df2d20433d981f4bb2832.info differ
diff --git a/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040 b/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040
new file mode 100644
index 0000000000000000000000000000000000000000..66412ce3e5785a5a09c682d109015c93a6a6079b
Binary files /dev/null and b/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040 differ
diff --git a/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040.info b/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040.info
new file mode 100644
index 0000000000000000000000000000000000000000..fc1720d906e21eab4283063bc5bdf2fa2b5aeecb
Binary files /dev/null and b/Library/metadata/6b/6b01141ed8f74d198965c86f25eb7040.info differ
diff --git a/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f b/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f
new file mode 100644
index 0000000000000000000000000000000000000000..5959c98714f1a5f052a8b59510db626f9745283f
Binary files /dev/null and b/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f differ
diff --git a/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f.info b/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f.info
new file mode 100644
index 0000000000000000000000000000000000000000..8166002f62122fc5ef3c0435a9d274e2598b32e9
Binary files /dev/null and b/Library/metadata/6b/6b1ae1e78552c459d9ce27048ff51c7f.info differ
diff --git a/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5 b/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5
new file mode 100644
index 0000000000000000000000000000000000000000..9acb1f5bb0c50988a964a10f9ea5cee856d6e009
Binary files /dev/null and b/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5 differ
diff --git a/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5.info b/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5.info
new file mode 100644
index 0000000000000000000000000000000000000000..5805cec634ff2486a4ef6c54c61c5dc2fa39c242
Binary files /dev/null and b/Library/metadata/6b/6b259c4003a802847b9ada90744e34c5.info differ
diff --git a/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1 b/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1
new file mode 100644
index 0000000000000000000000000000000000000000..448b8bed80d37f2c7b5e3802768824e49fec1169
Binary files /dev/null and b/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1 differ
diff --git a/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1.info b/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1.info
new file mode 100644
index 0000000000000000000000000000000000000000..4273923f257af5ba9e345e13857fad2a36a1adfa
Binary files /dev/null and b/Library/metadata/6b/6b2cccc3d6283984589a7c0e8ee06cf1.info differ
diff --git a/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c b/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c
new file mode 100644
index 0000000000000000000000000000000000000000..6c707493b352bdc60ca1818ab7d876fd55dc7a45
Binary files /dev/null and b/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c differ
diff --git a/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c.info b/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c.info
new file mode 100644
index 0000000000000000000000000000000000000000..22b4a63f374975e2cca432083f9ce78510231bb8
Binary files /dev/null and b/Library/metadata/6b/6be651f1bb41d5d4f87732a4cabd701c.info differ
diff --git a/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b b/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b
new file mode 100644
index 0000000000000000000000000000000000000000..61e8679b42dbbc538eafd71e670614a360f13440
Binary files /dev/null and b/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b differ
diff --git a/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b.info b/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b.info
new file mode 100644
index 0000000000000000000000000000000000000000..5b028e1c95a790a379fad30879691361829a1f29
Binary files /dev/null and b/Library/metadata/6d/6d437b997e074079b4b2f6e395394f4b.info differ
diff --git a/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f b/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f
new file mode 100644
index 0000000000000000000000000000000000000000..0b4596013faf507f5016808c528490d38a496a51
Binary files /dev/null and b/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f differ
diff --git a/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f.info b/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f.info
new file mode 100644
index 0000000000000000000000000000000000000000..f43963aba47d153d4d635240e60cb6fc24add591
Binary files /dev/null and b/Library/metadata/6d/6d56244f8c39a851975d3c0bd432c66f.info differ
diff --git a/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9 b/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9
new file mode 100644
index 0000000000000000000000000000000000000000..854b10db03706edbcffab8d8bc16e7c599b40b03
Binary files /dev/null and b/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9 differ
diff --git a/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9.info b/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9.info
new file mode 100644
index 0000000000000000000000000000000000000000..cad88730e89415b2a61caf4b0e64786fc2a789a5
Binary files /dev/null and b/Library/metadata/6d/6d6f82a762acb4417b895d3babc790f9.info differ
diff --git a/Library/metadata/6d/6d9df2bc198c417db00037803568139c b/Library/metadata/6d/6d9df2bc198c417db00037803568139c
new file mode 100644
index 0000000000000000000000000000000000000000..d1f32c9b859ab9333651c9b6d22935fb20690f48
Binary files /dev/null and b/Library/metadata/6d/6d9df2bc198c417db00037803568139c differ
diff --git a/Library/metadata/6d/6d9df2bc198c417db00037803568139c.info b/Library/metadata/6d/6d9df2bc198c417db00037803568139c.info
new file mode 100644
index 0000000000000000000000000000000000000000..860fb6cde616085082751bcbf305a585fa895833
Binary files /dev/null and b/Library/metadata/6d/6d9df2bc198c417db00037803568139c.info differ
diff --git a/Library/metadata/6d/6dbcf248c987476181a37f01a1814975 b/Library/metadata/6d/6dbcf248c987476181a37f01a1814975
new file mode 100644
index 0000000000000000000000000000000000000000..f838260c20e3697b2789303fa802052acf695e96
Binary files /dev/null and b/Library/metadata/6d/6dbcf248c987476181a37f01a1814975 differ
diff --git a/Library/metadata/6d/6dbcf248c987476181a37f01a1814975.info b/Library/metadata/6d/6dbcf248c987476181a37f01a1814975.info
new file mode 100644
index 0000000000000000000000000000000000000000..c65c715d756821e62f4ec28373327a4ee0462356
Binary files /dev/null and b/Library/metadata/6d/6dbcf248c987476181a37f01a1814975.info differ
diff --git a/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558 b/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558
new file mode 100644
index 0000000000000000000000000000000000000000..a6fd0aa59a12672a04793a144196de1353fefc40
Binary files /dev/null and b/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558 differ
diff --git a/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558.info b/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558.info
new file mode 100644
index 0000000000000000000000000000000000000000..9ecca9edb9f79d45c57742b60a196672bd9f86a6
Binary files /dev/null and b/Library/metadata/6e/6e1c8b97ec8aa0464e92506ffe099558.info differ
diff --git a/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442 b/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442
new file mode 100644
index 0000000000000000000000000000000000000000..f345e5663b8d3a955c59db09cc8cb0cb21aec346
Binary files /dev/null and b/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442 differ
diff --git a/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442.info b/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442.info
new file mode 100644
index 0000000000000000000000000000000000000000..9a76bf066372afc3e872e2ad45ceb949d9bdaae7
Binary files /dev/null and b/Library/metadata/6e/6e2d432c5ea14e75aa3a79f90f704442.info differ
diff --git a/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b b/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b
new file mode 100644
index 0000000000000000000000000000000000000000..6ebf98dd07389ddee8d8a851877e59c584a7fd4d
Binary files /dev/null and b/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b differ
diff --git a/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b.info b/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b.info
new file mode 100644
index 0000000000000000000000000000000000000000..8c319e44b6213210142377b9807324fdc3bd84e2
Binary files /dev/null and b/Library/metadata/6e/6e339d0ed9db0a440bad4d3fa6ed4c7b.info differ
diff --git a/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441 b/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441
new file mode 100644
index 0000000000000000000000000000000000000000..5d0e37c60f60cac04cfcf2fa816d6e53a097c3b5
Binary files /dev/null and b/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441 differ
diff --git a/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441.info b/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441.info
new file mode 100644
index 0000000000000000000000000000000000000000..a2808532fab16bb16a316ee9495cc7f4cee1d948
Binary files /dev/null and b/Library/metadata/6e/6e7c8cfeedae74eb3a562055e069e441.info differ
diff --git a/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba b/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba
new file mode 100644
index 0000000000000000000000000000000000000000..327a5e56b5178c5ca9389e4824c8640a4b9fcad4
Binary files /dev/null and b/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba differ
diff --git a/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba.info b/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba.info
new file mode 100644
index 0000000000000000000000000000000000000000..bf38c747bc316454c639eaac63a9823671e9005f
Binary files /dev/null and b/Library/metadata/6f/6f1c7ebc8ac78cb951be24c238cbd3ba.info differ
diff --git a/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535 b/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535
new file mode 100644
index 0000000000000000000000000000000000000000..04b94406e8ae68717e0cadb405b4e42288f9f52d
Binary files /dev/null and b/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535 differ
diff --git a/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535.info b/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535.info
new file mode 100644
index 0000000000000000000000000000000000000000..cb57d4fb6dd3f0112b2e89bf35a14ad721d9a16c
Binary files /dev/null and b/Library/metadata/6f/6f516f1ec21a54a59a92bf99db2d9535.info differ
diff --git a/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb b/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb
new file mode 100644
index 0000000000000000000000000000000000000000..2cb55892f820cfefd4546909c96a2b1c5f1ba882
Binary files /dev/null and b/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb differ
diff --git a/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb.info b/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb.info
new file mode 100644
index 0000000000000000000000000000000000000000..23633e6d51330fd8ed498ac034b071e827abfb18
Binary files /dev/null and b/Library/metadata/6f/6fdea2af3daa40fe8f88e5e9cfc17abb.info differ
diff --git a/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9 b/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9
new file mode 100644
index 0000000000000000000000000000000000000000..7e5d6505394a6bda9e6fdee184a31706ab7a83c6
Binary files /dev/null and b/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9 differ
diff --git a/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9.info b/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9.info
new file mode 100644
index 0000000000000000000000000000000000000000..96ee7fd88b0b19aaf007f437047c61e530a51830
Binary files /dev/null and b/Library/metadata/6f/6fe576b47d8b47688ec5d02bccd15cf9.info differ
diff --git a/Library/metadata/70/7065397ff8184621aa3ca4f854491259 b/Library/metadata/70/7065397ff8184621aa3ca4f854491259
new file mode 100644
index 0000000000000000000000000000000000000000..bd75ecd75e02a10575076bb0d4adc7f93ebfb304
Binary files /dev/null and b/Library/metadata/70/7065397ff8184621aa3ca4f854491259 differ
diff --git a/Library/metadata/70/7065397ff8184621aa3ca4f854491259.info b/Library/metadata/70/7065397ff8184621aa3ca4f854491259.info
new file mode 100644
index 0000000000000000000000000000000000000000..afba0ad8a5ee3e82fe564826d2096142686691ef
Binary files /dev/null and b/Library/metadata/70/7065397ff8184621aa3ca4f854491259.info differ
diff --git a/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb b/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb
new file mode 100644
index 0000000000000000000000000000000000000000..d77805d4c88e7ed552bd98957d9c79aa9979fe86
Binary files /dev/null and b/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb differ
diff --git a/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb.info b/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..7cd9b6a799487e80fedc00173e153b8ade914c85
Binary files /dev/null and b/Library/metadata/70/70d4d75a2877243758b0750cbc75b6eb.info differ
diff --git a/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18 b/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18
new file mode 100644
index 0000000000000000000000000000000000000000..3e108f832d71a0d5bbf686d904c4581b5858ccda
Binary files /dev/null and b/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18 differ
diff --git a/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18.info b/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18.info
new file mode 100644
index 0000000000000000000000000000000000000000..40e9b3c1f9392a934ba17cfa47b2c15c27f8f889
Binary files /dev/null and b/Library/metadata/70/70f60d01cf6063d488cea9ee17a02d18.info differ
diff --git a/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7 b/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7
new file mode 100644
index 0000000000000000000000000000000000000000..93c50cc07b1c882d610eac80ba922ec56e98a96d
Binary files /dev/null and b/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7 differ
diff --git a/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7.info b/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7.info
new file mode 100644
index 0000000000000000000000000000000000000000..41bd6df35961eebe8067c038e3413b3f604686e1
Binary files /dev/null and b/Library/metadata/71/7141934703a36b144a1aa8f0f31a55a7.info differ
diff --git a/Library/metadata/71/71b11355001648444b41d17fd36c150d b/Library/metadata/71/71b11355001648444b41d17fd36c150d
new file mode 100644
index 0000000000000000000000000000000000000000..40fdc0dfb63371b7d3486a545c646c05e8100949
Binary files /dev/null and b/Library/metadata/71/71b11355001648444b41d17fd36c150d differ
diff --git a/Library/metadata/71/71b11355001648444b41d17fd36c150d.info b/Library/metadata/71/71b11355001648444b41d17fd36c150d.info
new file mode 100644
index 0000000000000000000000000000000000000000..0cc1b4cbe44b4adf6d6b9efd62441f5e670460a2
Binary files /dev/null and b/Library/metadata/71/71b11355001648444b41d17fd36c150d.info differ
diff --git a/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04 b/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04
new file mode 100644
index 0000000000000000000000000000000000000000..e3f3ba53b42446861494f2fa0736ae06aeaa5ea9
Binary files /dev/null and b/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04 differ
diff --git a/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04.info b/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04.info
new file mode 100644
index 0000000000000000000000000000000000000000..47a6ebf4efc2471c1553de2692169952149f4d99
Binary files /dev/null and b/Library/metadata/71/71c1514a6bd24e1e882cebbe1904ce04.info differ
diff --git a/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90 b/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90
new file mode 100644
index 0000000000000000000000000000000000000000..c2d6c6f2a3b50516f51e320f1d1c250e8f15bee6
Binary files /dev/null and b/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90 differ
diff --git a/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90.info b/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90.info
new file mode 100644
index 0000000000000000000000000000000000000000..432a76b3e71e6803169de048edb56665edeab24a
Binary files /dev/null and b/Library/metadata/71/71e1652fdff664f9bb0ae9e0327b0d90.info differ
diff --git a/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363 b/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363
new file mode 100644
index 0000000000000000000000000000000000000000..d1ec7597a622a53d20d30b793291ef8d3df3bec1
Binary files /dev/null and b/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363 differ
diff --git a/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363.info b/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363.info
new file mode 100644
index 0000000000000000000000000000000000000000..ca5bce12ba1b10f834223088d2f9bf7df33e1999
Binary files /dev/null and b/Library/metadata/72/7241c7dc25374fc1a6ab3ef9da79c363.info differ
diff --git a/Library/metadata/72/72955380d3c9a8042a147513f224c58d b/Library/metadata/72/72955380d3c9a8042a147513f224c58d
new file mode 100644
index 0000000000000000000000000000000000000000..f85d94166e10692d3e7cb2a48e05fabde5b69b71
Binary files /dev/null and b/Library/metadata/72/72955380d3c9a8042a147513f224c58d differ
diff --git a/Library/metadata/72/72955380d3c9a8042a147513f224c58d.info b/Library/metadata/72/72955380d3c9a8042a147513f224c58d.info
new file mode 100644
index 0000000000000000000000000000000000000000..7cae706f50185b32d2c0803a3a84fa4ed1f41e4a
Binary files /dev/null and b/Library/metadata/72/72955380d3c9a8042a147513f224c58d.info differ
diff --git a/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c b/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c
new file mode 100644
index 0000000000000000000000000000000000000000..daee3529507f0dfbddec87f01864599a60e07ea8
Binary files /dev/null and b/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c differ
diff --git a/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c.info b/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c.info
new file mode 100644
index 0000000000000000000000000000000000000000..713fc3b57b228cf20bbbf1fd6e3f6b682adeae03
Binary files /dev/null and b/Library/metadata/72/72da580ddc62254448bfbc92dc6c5a0c.info differ
diff --git a/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1 b/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1
new file mode 100644
index 0000000000000000000000000000000000000000..4afa30418b20ab5813bdba0c637e5f7307cab5ec
Binary files /dev/null and b/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1 differ
diff --git a/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1.info b/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1.info
new file mode 100644
index 0000000000000000000000000000000000000000..604123a80f369d12adf06be9b002e485bc8523ba
Binary files /dev/null and b/Library/metadata/73/7304f2e9e60197e4799c9fa13c28ccd1.info differ
diff --git a/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6 b/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6
new file mode 100644
index 0000000000000000000000000000000000000000..eac04308844fb7982131523b7c2e0d7bed2b5c1e
Binary files /dev/null and b/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6 differ
diff --git a/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6.info b/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6.info
new file mode 100644
index 0000000000000000000000000000000000000000..f3d813d04bd4db7142cfa219660e5220ba251fee
Binary files /dev/null and b/Library/metadata/74/7405a92151387284bb13bab3e8e90cc6.info differ
diff --git a/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4 b/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4
new file mode 100644
index 0000000000000000000000000000000000000000..f889a5dba51531f998a22a501dae2c72cb72685f
Binary files /dev/null and b/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4 differ
diff --git a/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4.info b/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4.info
new file mode 100644
index 0000000000000000000000000000000000000000..92a1879887ddf67f5cffdcd57a37a5ee0bb7db42
Binary files /dev/null and b/Library/metadata/74/74311c3ad825a8544a8c0e8656a3edb4.info differ
diff --git a/Library/metadata/74/7434eb8b119e46f4b8900335693070cf b/Library/metadata/74/7434eb8b119e46f4b8900335693070cf
new file mode 100644
index 0000000000000000000000000000000000000000..4b44b9023f6c6d09a50ab316f6b5be47a1dc9086
Binary files /dev/null and b/Library/metadata/74/7434eb8b119e46f4b8900335693070cf differ
diff --git a/Library/metadata/74/7434eb8b119e46f4b8900335693070cf.info b/Library/metadata/74/7434eb8b119e46f4b8900335693070cf.info
new file mode 100644
index 0000000000000000000000000000000000000000..3500b4837e806a642b783071792eb54024d5060c
Binary files /dev/null and b/Library/metadata/74/7434eb8b119e46f4b8900335693070cf.info differ
diff --git a/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106 b/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106
new file mode 100644
index 0000000000000000000000000000000000000000..41ebe5ef9aea2c551c5eb82702ab8f9687632435
Binary files /dev/null and b/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106 differ
diff --git a/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106.info b/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106.info
new file mode 100644
index 0000000000000000000000000000000000000000..b80b22ae2a1d3c5325d26a2b9f8ab60649850a2a
Binary files /dev/null and b/Library/metadata/74/7496af95dfe67cf429ac65edaaf99106.info differ
diff --git a/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65 b/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65
new file mode 100644
index 0000000000000000000000000000000000000000..3304284593a4bc264a1664f639e256115453d30b
Binary files /dev/null and b/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65 differ
diff --git a/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65.info b/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65.info
new file mode 100644
index 0000000000000000000000000000000000000000..ab2f8605b6e143d5db70beff22f316f8b8dc9948
Binary files /dev/null and b/Library/metadata/74/74ad733a535afde4fab6d97c5eb00d65.info differ
diff --git a/Library/metadata/75/75938f72739584ed9925bf4ae8989079 b/Library/metadata/75/75938f72739584ed9925bf4ae8989079
new file mode 100644
index 0000000000000000000000000000000000000000..f7c08c5aaf7dcbd687f5042bf20975f53a7cc7fa
Binary files /dev/null and b/Library/metadata/75/75938f72739584ed9925bf4ae8989079 differ
diff --git a/Library/metadata/75/75938f72739584ed9925bf4ae8989079.info b/Library/metadata/75/75938f72739584ed9925bf4ae8989079.info
new file mode 100644
index 0000000000000000000000000000000000000000..db1b84c04f0a13ed2e233fdef7b7f2932886854c
Binary files /dev/null and b/Library/metadata/75/75938f72739584ed9925bf4ae8989079.info differ
diff --git a/Library/metadata/76/76078ddafb924ce19edc6034201cb15b b/Library/metadata/76/76078ddafb924ce19edc6034201cb15b
new file mode 100644
index 0000000000000000000000000000000000000000..696339bb32318504b65d6079ec34cbe74c438a28
Binary files /dev/null and b/Library/metadata/76/76078ddafb924ce19edc6034201cb15b differ
diff --git a/Library/metadata/76/76078ddafb924ce19edc6034201cb15b.info b/Library/metadata/76/76078ddafb924ce19edc6034201cb15b.info
new file mode 100644
index 0000000000000000000000000000000000000000..d31b175df33bc06cecb0cc1bebee4c811745b6b1
Binary files /dev/null and b/Library/metadata/76/76078ddafb924ce19edc6034201cb15b.info differ
diff --git a/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4 b/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4
new file mode 100644
index 0000000000000000000000000000000000000000..7d443b42b4269393b51480c794bb9948dddb5890
Binary files /dev/null and b/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4 differ
diff --git a/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4.info b/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4.info
new file mode 100644
index 0000000000000000000000000000000000000000..76cb7da2c81d32571db54ae78cf616f883738dc9
Binary files /dev/null and b/Library/metadata/76/760934a36e5f490db3c9fcaf497625a4.info differ
diff --git a/Library/metadata/76/7668179ede524d6396c8b7d84461ea29 b/Library/metadata/76/7668179ede524d6396c8b7d84461ea29
new file mode 100644
index 0000000000000000000000000000000000000000..045cac95e47eb3cf58543fabe34be48aa05e24be
Binary files /dev/null and b/Library/metadata/76/7668179ede524d6396c8b7d84461ea29 differ
diff --git a/Library/metadata/76/7668179ede524d6396c8b7d84461ea29.info b/Library/metadata/76/7668179ede524d6396c8b7d84461ea29.info
new file mode 100644
index 0000000000000000000000000000000000000000..7770956074b58004589f4cd880107a624497ff0e
Binary files /dev/null and b/Library/metadata/76/7668179ede524d6396c8b7d84461ea29.info differ
diff --git a/Library/metadata/76/768d77435df35443bad74aedc993c0cf b/Library/metadata/76/768d77435df35443bad74aedc993c0cf
new file mode 100644
index 0000000000000000000000000000000000000000..c8b613330794ba66ecaf4e354ba6593e224e7ef1
Binary files /dev/null and b/Library/metadata/76/768d77435df35443bad74aedc993c0cf differ
diff --git a/Library/metadata/76/768d77435df35443bad74aedc993c0cf.info b/Library/metadata/76/768d77435df35443bad74aedc993c0cf.info
new file mode 100644
index 0000000000000000000000000000000000000000..77099f3a240a3a106e4d3f2f11e27b6c975415df
Binary files /dev/null and b/Library/metadata/76/768d77435df35443bad74aedc993c0cf.info differ
diff --git a/Library/metadata/77/77476292f9fa4905a787e6417853846b b/Library/metadata/77/77476292f9fa4905a787e6417853846b
new file mode 100644
index 0000000000000000000000000000000000000000..74063348116e09006bc27337a333314da9c55bf8
Binary files /dev/null and b/Library/metadata/77/77476292f9fa4905a787e6417853846b differ
diff --git a/Library/metadata/77/77476292f9fa4905a787e6417853846b.info b/Library/metadata/77/77476292f9fa4905a787e6417853846b.info
new file mode 100644
index 0000000000000000000000000000000000000000..e214952adbe7aff3bb2c4ae6c19e666b1fb992d0
Binary files /dev/null and b/Library/metadata/77/77476292f9fa4905a787e6417853846b.info differ
diff --git a/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce b/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce
new file mode 100644
index 0000000000000000000000000000000000000000..416401d4eceeaaed2da8b6c455790bf30b3e43d6
Binary files /dev/null and b/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce differ
diff --git a/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce.info b/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce.info
new file mode 100644
index 0000000000000000000000000000000000000000..0364df11e58b697092e60977a06047dc5b867e09
Binary files /dev/null and b/Library/metadata/78/782c49e6e68074dc7ba12c95537825ce.info differ
diff --git a/Library/metadata/78/782de34c17796430ba8d0ceddb60944e b/Library/metadata/78/782de34c17796430ba8d0ceddb60944e
new file mode 100644
index 0000000000000000000000000000000000000000..d1a71139cc4fb88c42c861b3bda571ca82d01d1a
Binary files /dev/null and b/Library/metadata/78/782de34c17796430ba8d0ceddb60944e differ
diff --git a/Library/metadata/78/782de34c17796430ba8d0ceddb60944e.info b/Library/metadata/78/782de34c17796430ba8d0ceddb60944e.info
new file mode 100644
index 0000000000000000000000000000000000000000..754f44b6816a237a29872aebae3fa40d59b18c30
Binary files /dev/null and b/Library/metadata/78/782de34c17796430ba8d0ceddb60944e.info differ
diff --git a/Library/metadata/78/78759e25237a7430587982cd92a2a0d8 b/Library/metadata/78/78759e25237a7430587982cd92a2a0d8
new file mode 100644
index 0000000000000000000000000000000000000000..d024b6e9fa8f48490282a872be0876c887acc993
Binary files /dev/null and b/Library/metadata/78/78759e25237a7430587982cd92a2a0d8 differ
diff --git a/Library/metadata/78/78759e25237a7430587982cd92a2a0d8.info b/Library/metadata/78/78759e25237a7430587982cd92a2a0d8.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a165e88b0fb75f590bfc1252ec3db081f2baef0
Binary files /dev/null and b/Library/metadata/78/78759e25237a7430587982cd92a2a0d8.info differ
diff --git a/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e b/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e
new file mode 100644
index 0000000000000000000000000000000000000000..c4f1cbf84bed3a06b8e0d3fc060b51b7cf3ff323
Binary files /dev/null and b/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e differ
diff --git a/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e.info b/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e.info
new file mode 100644
index 0000000000000000000000000000000000000000..51db78ab2f4521a0818ddd10810b278ceefe3139
Binary files /dev/null and b/Library/metadata/78/78e267bad6d564d49803ba3e9c13ff2e.info differ
diff --git a/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359 b/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359
new file mode 100644
index 0000000000000000000000000000000000000000..aaa65447e86b92b820692e4537f552f4db78d1c9
Binary files /dev/null and b/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359 differ
diff --git a/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359.info b/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359.info
new file mode 100644
index 0000000000000000000000000000000000000000..cd70bf96398386275381a2d5eb10e82025658e4d
Binary files /dev/null and b/Library/metadata/79/790f5bf0f45da7e4199c91ebe3b44359.info differ
diff --git a/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec b/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec
new file mode 100644
index 0000000000000000000000000000000000000000..3c704dd210383e1298bc75ce3f68f241d549f605
Binary files /dev/null and b/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec differ
diff --git a/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec.info b/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec.info
new file mode 100644
index 0000000000000000000000000000000000000000..3d98bc1fa12a5d5d32f18ca3510b88610a26ab37
Binary files /dev/null and b/Library/metadata/79/7927683d1fc5848b5abfb54ebb1028ec.info differ
diff --git a/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb b/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb
new file mode 100644
index 0000000000000000000000000000000000000000..c688a8895dcbe08673f2da40b9c0ebaf8d3fb61a
Binary files /dev/null and b/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb differ
diff --git a/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb.info b/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..8e504b47d9d91936966ca165c11e7d19f56c6896
Binary files /dev/null and b/Library/metadata/79/797cf0c5f1b7e4e1ab17481bd9b698eb.info differ
diff --git a/Library/metadata/79/79ed1db6028c2de409380d4c123437a7 b/Library/metadata/79/79ed1db6028c2de409380d4c123437a7
new file mode 100644
index 0000000000000000000000000000000000000000..44fb4ac1d8ef750e76c2851cc129ab71f2d53864
Binary files /dev/null and b/Library/metadata/79/79ed1db6028c2de409380d4c123437a7 differ
diff --git a/Library/metadata/79/79ed1db6028c2de409380d4c123437a7.info b/Library/metadata/79/79ed1db6028c2de409380d4c123437a7.info
new file mode 100644
index 0000000000000000000000000000000000000000..3c829a9491edc2ea8a5035ccfd051c1fc2fe34b2
Binary files /dev/null and b/Library/metadata/79/79ed1db6028c2de409380d4c123437a7.info differ
diff --git a/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d b/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d
new file mode 100644
index 0000000000000000000000000000000000000000..1fbff386e745608f5d7ef9f3dab022f247298222
Binary files /dev/null and b/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d differ
diff --git a/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d.info b/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d.info
new file mode 100644
index 0000000000000000000000000000000000000000..a7d77bfa42a54dea13ee9d293bc8d9ab9cfb259c
Binary files /dev/null and b/Library/metadata/79/79ff392d1bde4ad78a3836a4a480392d.info differ
diff --git a/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876 b/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876
new file mode 100644
index 0000000000000000000000000000000000000000..2591d66c6ea6447706888f5ff0ce18805b181824
Binary files /dev/null and b/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876 differ
diff --git a/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876.info b/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876.info
new file mode 100644
index 0000000000000000000000000000000000000000..ee4984686ef25522a3854068febae92cf07e7fbf
Binary files /dev/null and b/Library/metadata/7a/7a4024159218f184b9ce3b667f3b6876.info differ
diff --git a/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a b/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a
new file mode 100644
index 0000000000000000000000000000000000000000..da07d869c46947d50c515d25b4ce21c881d1405c
Binary files /dev/null and b/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a differ
diff --git a/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a.info b/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a.info
new file mode 100644
index 0000000000000000000000000000000000000000..156bd330ec240cc3335b45b57eadfb7cd2a7a6a0
Binary files /dev/null and b/Library/metadata/7a/7a573b834e2608c4f982daf527bdb47a.info differ
diff --git a/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea b/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea
new file mode 100644
index 0000000000000000000000000000000000000000..cb57d11bf1a0e6bc29b5922b9034bd45f0b06021
Binary files /dev/null and b/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea differ
diff --git a/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea.info b/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea.info
new file mode 100644
index 0000000000000000000000000000000000000000..728e1a4b5afe9e5d6fedad548c4281e8ea8c3b58
Binary files /dev/null and b/Library/metadata/7a/7a74094b34f74992a5121c0586ccf6ea.info differ
diff --git a/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187 b/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187
new file mode 100644
index 0000000000000000000000000000000000000000..37e92953f96ecc94bde7935d9953253f7a33a320
Binary files /dev/null and b/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187 differ
diff --git a/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187.info b/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187.info
new file mode 100644
index 0000000000000000000000000000000000000000..8d72dc04e9d4bc383de38ba7ae8ead8a9698053d
Binary files /dev/null and b/Library/metadata/7a/7a9c0fd3c6cf2f74b95173c4dd496187.info differ
diff --git a/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386 b/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386
new file mode 100644
index 0000000000000000000000000000000000000000..47c025fafa7345188ef289ea0723c5a58bfae45f
Binary files /dev/null and b/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386 differ
diff --git a/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386.info b/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386.info
new file mode 100644
index 0000000000000000000000000000000000000000..9ac7c619451d47f930e31a64ad26dd71b33db312
Binary files /dev/null and b/Library/metadata/7a/7aad9e80c95b4991a1f4d017c8caf386.info differ
diff --git a/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e b/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e
new file mode 100644
index 0000000000000000000000000000000000000000..0d05b8ed1b099670aef3bcfd9c3e6872820fbc36
Binary files /dev/null and b/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e differ
diff --git a/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e.info b/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e.info
new file mode 100644
index 0000000000000000000000000000000000000000..e3793d4da1258e4ebb179b2c9995629b1eed9744
Binary files /dev/null and b/Library/metadata/7b/7b186a0d29a784d81809e8a5471d155e.info differ
diff --git a/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a b/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a
new file mode 100644
index 0000000000000000000000000000000000000000..9faf6f7bdf7fcf4dd3080c454ce5a4d7fad63e71
Binary files /dev/null and b/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a differ
diff --git a/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a.info b/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a.info
new file mode 100644
index 0000000000000000000000000000000000000000..604c700e851c9b0451c0e60571fb48aaa29cacc8
Binary files /dev/null and b/Library/metadata/7b/7b743370ac3e4ec2a1668f5455a8ef8a.info differ
diff --git a/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89 b/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89
new file mode 100644
index 0000000000000000000000000000000000000000..723f689e8d00b750e901d6ed3fd352e9f022f485
Binary files /dev/null and b/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89 differ
diff --git a/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89.info b/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89.info
new file mode 100644
index 0000000000000000000000000000000000000000..ae4c5e2c2550e576912770ef62afd07488bb66ae
Binary files /dev/null and b/Library/metadata/7b/7b87dac66d6e74d5f848d26f169bbe89.info differ
diff --git a/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94 b/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94
new file mode 100644
index 0000000000000000000000000000000000000000..fa4a1e68ed5b143e5fe3f8db57bbd130ea4b3043
Binary files /dev/null and b/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94 differ
diff --git a/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94.info b/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94.info
new file mode 100644
index 0000000000000000000000000000000000000000..b62166bdf7e037e897dbb301bd830aec6e98aa77
Binary files /dev/null and b/Library/metadata/7c/7c200ac59be94c44ead64d0173b58c94.info differ
diff --git a/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513 b/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513
new file mode 100644
index 0000000000000000000000000000000000000000..789c80ac4c543a7c2fd507980b365211337820a0
Binary files /dev/null and b/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513 differ
diff --git a/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513.info b/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513.info
new file mode 100644
index 0000000000000000000000000000000000000000..be83f1d78d5f0c6db8061b388d73db8315b2565d
Binary files /dev/null and b/Library/metadata/7c/7c3a5d6e39b874f468b2691537168513.info differ
diff --git a/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e b/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e
new file mode 100644
index 0000000000000000000000000000000000000000..6054d9a40e1f4dafb21a8cab3e702e64d64bf157
Binary files /dev/null and b/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e differ
diff --git a/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e.info b/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e.info
new file mode 100644
index 0000000000000000000000000000000000000000..4e8c1c555bbf5bd08b55486391cd5ae8942b8417
Binary files /dev/null and b/Library/metadata/7d/7d22934bf84ccd14082fd2d5a9f5951e.info differ
diff --git a/Library/metadata/7d/7da0c11c52b4044de81c175887699282 b/Library/metadata/7d/7da0c11c52b4044de81c175887699282
new file mode 100644
index 0000000000000000000000000000000000000000..594f39b32c89d88ed349427f8df8134877a375e7
Binary files /dev/null and b/Library/metadata/7d/7da0c11c52b4044de81c175887699282 differ
diff --git a/Library/metadata/7d/7da0c11c52b4044de81c175887699282.info b/Library/metadata/7d/7da0c11c52b4044de81c175887699282.info
new file mode 100644
index 0000000000000000000000000000000000000000..0aab4ee364b56a0da5c742bff589236537ccaceb
Binary files /dev/null and b/Library/metadata/7d/7da0c11c52b4044de81c175887699282.info differ
diff --git a/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e b/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e
new file mode 100644
index 0000000000000000000000000000000000000000..bf85e6097496386fa5b506434663f9f6de701e00
Binary files /dev/null and b/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e differ
diff --git a/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e.info b/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e.info
new file mode 100644
index 0000000000000000000000000000000000000000..fb7a351953926baf5b7b5d7cb9041c264dc8386e
Binary files /dev/null and b/Library/metadata/7e/7e0991703f2d24f41996e1cce6db6a2e.info differ
diff --git a/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188 b/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188
new file mode 100644
index 0000000000000000000000000000000000000000..1ce93119337ba35a3c8b87bdce9749ff49fc032a
Binary files /dev/null and b/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188 differ
diff --git a/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188.info b/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188.info
new file mode 100644
index 0000000000000000000000000000000000000000..c3da18a7702bf842d3775517af3e7777794ede5b
Binary files /dev/null and b/Library/metadata/7e/7e32ee33bbeeea44ab12fc7f6efa0188.info differ
diff --git a/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5 b/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5
new file mode 100644
index 0000000000000000000000000000000000000000..885d06c27d63ec684f2b2c427243f6c19f748744
Binary files /dev/null and b/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5 differ
diff --git a/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5.info b/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5.info
new file mode 100644
index 0000000000000000000000000000000000000000..b578c39c1ef4782e77568acbde4aff9a5b959f41
Binary files /dev/null and b/Library/metadata/7e/7e601a0c686b0944c95d5c9edf7e38e5.info differ
diff --git a/Library/metadata/7e/7ed48dcc992234c659018e00590315b7 b/Library/metadata/7e/7ed48dcc992234c659018e00590315b7
new file mode 100644
index 0000000000000000000000000000000000000000..20df84101cfa160e69957449d84f7b70d42d4201
Binary files /dev/null and b/Library/metadata/7e/7ed48dcc992234c659018e00590315b7 differ
diff --git a/Library/metadata/7e/7ed48dcc992234c659018e00590315b7.info b/Library/metadata/7e/7ed48dcc992234c659018e00590315b7.info
new file mode 100644
index 0000000000000000000000000000000000000000..35dbc108d5ebe41c05ce454f7592e06145dfc0a3
Binary files /dev/null and b/Library/metadata/7e/7ed48dcc992234c659018e00590315b7.info differ
diff --git a/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87 b/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87
new file mode 100644
index 0000000000000000000000000000000000000000..fda26a949e976b18858085f9efb40e9bdb55d837
Binary files /dev/null and b/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87 differ
diff --git a/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87.info b/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87.info
new file mode 100644
index 0000000000000000000000000000000000000000..e8a1ad58c3579195bc405ba6c5e76211e9d95275
Binary files /dev/null and b/Library/metadata/7e/7ef8348b8ea834d7e1bc214b07f7fb87.info differ
diff --git a/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13 b/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13
new file mode 100644
index 0000000000000000000000000000000000000000..04dc9bad3748d0f7184c7d3841f5a066530f053f
Binary files /dev/null and b/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13 differ
diff --git a/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13.info b/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13.info
new file mode 100644
index 0000000000000000000000000000000000000000..ef96c81fe77ea00b18a13b6cb37096fe05cb674d
Binary files /dev/null and b/Library/metadata/7f/7f9e62135e44bac41b829b230473dd13.info differ
diff --git a/Library/metadata/7f/7fba5f72b28d2b649a53922858865139 b/Library/metadata/7f/7fba5f72b28d2b649a53922858865139
new file mode 100644
index 0000000000000000000000000000000000000000..85850c24adcd7f79cfd6264c501b367a641df373
Binary files /dev/null and b/Library/metadata/7f/7fba5f72b28d2b649a53922858865139 differ
diff --git a/Library/metadata/7f/7fba5f72b28d2b649a53922858865139.info b/Library/metadata/7f/7fba5f72b28d2b649a53922858865139.info
new file mode 100644
index 0000000000000000000000000000000000000000..43c8049b6ea639ded3591ca0f876c58b45768f74
Binary files /dev/null and b/Library/metadata/7f/7fba5f72b28d2b649a53922858865139.info differ
diff --git a/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814 b/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814
new file mode 100644
index 0000000000000000000000000000000000000000..d0d609b6bfa97316fa826abd0c360d9d15866105
Binary files /dev/null and b/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814 differ
diff --git a/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814.info b/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814.info
new file mode 100644
index 0000000000000000000000000000000000000000..985892274f06f39c2f34ff52395602fac89c3436
Binary files /dev/null and b/Library/metadata/7f/7fd5e77e7e7ea4eea8198138cd9cc814.info differ
diff --git a/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4 b/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4
new file mode 100644
index 0000000000000000000000000000000000000000..60eda2a47f6ec8ae9d067558d4f96e4bcab7b968
Binary files /dev/null and b/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4 differ
diff --git a/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4.info b/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4.info
new file mode 100644
index 0000000000000000000000000000000000000000..9d232411f3bb668bebf7b74f61bccd89cfa59f71
Binary files /dev/null and b/Library/metadata/80/806de5a9211448c8b65c8435ebb48dd4.info differ
diff --git a/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f b/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f
new file mode 100644
index 0000000000000000000000000000000000000000..24b1f6252dbc8e3ed04954b0113eff6c802af74c
Binary files /dev/null and b/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f differ
diff --git a/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info b/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info
new file mode 100644
index 0000000000000000000000000000000000000000..beedd87c9323f4ac3934ade0bd7cc249368477cb
Binary files /dev/null and b/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info differ
diff --git a/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485 b/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485
new file mode 100644
index 0000000000000000000000000000000000000000..874ed09b0645e013aab2f9e931ae7966d8ef9828
Binary files /dev/null and b/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485 differ
diff --git a/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485.info b/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485.info
new file mode 100644
index 0000000000000000000000000000000000000000..f05bda2701c8858530ef2e1db097e27df1afd6c2
Binary files /dev/null and b/Library/metadata/80/80beef77cb19e713c7c2d481b65ed485.info differ
diff --git a/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba b/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba
new file mode 100644
index 0000000000000000000000000000000000000000..5b67f03de7d91bcd88e3adccfb4d789d71c0e77a
Binary files /dev/null and b/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba differ
diff --git a/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba.info b/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba.info
new file mode 100644
index 0000000000000000000000000000000000000000..9741e246e2bd63d7d8c73b18222eb3751274b837
Binary files /dev/null and b/Library/metadata/81/811f7f1f5920641c0a9233503492c9ba.info differ
diff --git a/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a b/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a
new file mode 100644
index 0000000000000000000000000000000000000000..5715f56299785eefa2ad98f036cdabf4ea640192
Binary files /dev/null and b/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a differ
diff --git a/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a.info b/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a.info
new file mode 100644
index 0000000000000000000000000000000000000000..5837cbb9323cc461a42d79d5802c2fa4d5f7f8c3
Binary files /dev/null and b/Library/metadata/81/81ac9186482a2ea4ba2fc7c78080256a.info differ
diff --git a/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2 b/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2
new file mode 100644
index 0000000000000000000000000000000000000000..11551a0bb2962efde4348bfea37f0d98f5f2b1a5
Binary files /dev/null and b/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2 differ
diff --git a/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2.info b/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2.info
new file mode 100644
index 0000000000000000000000000000000000000000..bcb24ec8467d9acc60178896319eb4baef79f257
Binary files /dev/null and b/Library/metadata/81/81adcf7401f49804eb0b69d7c592e4f2.info differ
diff --git a/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f b/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f
new file mode 100644
index 0000000000000000000000000000000000000000..911aeeef1cb2db745f8135a659de4b754d9c2ea0
Binary files /dev/null and b/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f differ
diff --git a/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f.info b/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f.info
new file mode 100644
index 0000000000000000000000000000000000000000..585c214da7f31b074047b186153c1497363cc30f
Binary files /dev/null and b/Library/metadata/81/81ed8c76d2bc4a4c95d092c98af4e58f.info differ
diff --git a/Library/metadata/82/821f5482c5a3f4389885f4432433f56f b/Library/metadata/82/821f5482c5a3f4389885f4432433f56f
new file mode 100644
index 0000000000000000000000000000000000000000..bef820067dcfb072e03e6239a556c961c24bd9b5
Binary files /dev/null and b/Library/metadata/82/821f5482c5a3f4389885f4432433f56f differ
diff --git a/Library/metadata/82/821f5482c5a3f4389885f4432433f56f.info b/Library/metadata/82/821f5482c5a3f4389885f4432433f56f.info
new file mode 100644
index 0000000000000000000000000000000000000000..92c5c454ad0332f1d243397afaf69495eb595f52
Binary files /dev/null and b/Library/metadata/82/821f5482c5a3f4389885f4432433f56f.info differ
diff --git a/Library/metadata/82/828ec02863ac580498e5437c3dec3d79 b/Library/metadata/82/828ec02863ac580498e5437c3dec3d79
new file mode 100644
index 0000000000000000000000000000000000000000..a09d2ffd551aa4990f25575290f54200a971b3ef
Binary files /dev/null and b/Library/metadata/82/828ec02863ac580498e5437c3dec3d79 differ
diff --git a/Library/metadata/82/828ec02863ac580498e5437c3dec3d79.info b/Library/metadata/82/828ec02863ac580498e5437c3dec3d79.info
new file mode 100644
index 0000000000000000000000000000000000000000..047128c9ac95e44bdef6acf594a3d58da21ce6aa
Binary files /dev/null and b/Library/metadata/82/828ec02863ac580498e5437c3dec3d79.info differ
diff --git a/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16 b/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16
new file mode 100644
index 0000000000000000000000000000000000000000..140a8339ed3d1179d8f8dad45ade6357a677e21f
Binary files /dev/null and b/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16 differ
diff --git a/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16.info b/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16.info
new file mode 100644
index 0000000000000000000000000000000000000000..d214ab816f7b83be60edb16401b81b242ac0ddc9
Binary files /dev/null and b/Library/metadata/84/8413ca0e506d42a1a4bd9769f204ad16.info differ
diff --git a/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d b/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d
new file mode 100644
index 0000000000000000000000000000000000000000..791ee6d53248a34a234280b03ea1ea9e16f690d9
Binary files /dev/null and b/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d differ
diff --git a/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d.info b/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d.info
new file mode 100644
index 0000000000000000000000000000000000000000..8597cfebd0af54037396f90ca93c5405a3224cc9
Binary files /dev/null and b/Library/metadata/84/843020839a7cf934bbd8f30d5aaa099d.info differ
diff --git a/Library/metadata/84/844f815391db42d49455cbf1a7bfc434 b/Library/metadata/84/844f815391db42d49455cbf1a7bfc434
new file mode 100644
index 0000000000000000000000000000000000000000..5983964c97b8ce5ba255e1f5d5e2d66dafc11cb0
Binary files /dev/null and b/Library/metadata/84/844f815391db42d49455cbf1a7bfc434 differ
diff --git a/Library/metadata/84/844f815391db42d49455cbf1a7bfc434.info b/Library/metadata/84/844f815391db42d49455cbf1a7bfc434.info
new file mode 100644
index 0000000000000000000000000000000000000000..bb8effc3d122477789b02f035c00ed7a1cc927da
Binary files /dev/null and b/Library/metadata/84/844f815391db42d49455cbf1a7bfc434.info differ
diff --git a/Library/metadata/84/84a92b25f83d49b9bc132d206b370281 b/Library/metadata/84/84a92b25f83d49b9bc132d206b370281
new file mode 100644
index 0000000000000000000000000000000000000000..960665906a4b36de7a71cdbe01fbcb5821679efc
Binary files /dev/null and b/Library/metadata/84/84a92b25f83d49b9bc132d206b370281 differ
diff --git a/Library/metadata/84/84a92b25f83d49b9bc132d206b370281.info b/Library/metadata/84/84a92b25f83d49b9bc132d206b370281.info
new file mode 100644
index 0000000000000000000000000000000000000000..32b992994acd37eb294c9d63347ea97def912b8b
Binary files /dev/null and b/Library/metadata/84/84a92b25f83d49b9bc132d206b370281.info differ
diff --git a/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26 b/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26
new file mode 100644
index 0000000000000000000000000000000000000000..496948d10cea012e92ac64941d3c7e4af3b7abdc
Binary files /dev/null and b/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26 differ
diff --git a/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26.info b/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26.info
new file mode 100644
index 0000000000000000000000000000000000000000..4eb057391ec7999de3ed06dbceeb6afc84dcca86
Binary files /dev/null and b/Library/metadata/85/850c54ee0b9e1aa740b1c67792eb1f26.info differ
diff --git a/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2 b/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2
new file mode 100644
index 0000000000000000000000000000000000000000..e71ecc9bf190137ecf4678f194e920c30a32f2dc
Binary files /dev/null and b/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2 differ
diff --git a/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2.info b/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2.info
new file mode 100644
index 0000000000000000000000000000000000000000..72fb35d130d31964b79ef7e1a1adb7eb8c015abf
Binary files /dev/null and b/Library/metadata/85/85dba6b2d7204a7f9a1f976eb0a6b4d2.info differ
diff --git a/Library/metadata/86/86c008322e7c647149878156c5b81940 b/Library/metadata/86/86c008322e7c647149878156c5b81940
new file mode 100644
index 0000000000000000000000000000000000000000..9a6d0949b7cfbc2ef5691038779e474f3ed813fe
Binary files /dev/null and b/Library/metadata/86/86c008322e7c647149878156c5b81940 differ
diff --git a/Library/metadata/86/86c008322e7c647149878156c5b81940.info b/Library/metadata/86/86c008322e7c647149878156c5b81940.info
new file mode 100644
index 0000000000000000000000000000000000000000..af4b739e91ef9252b3ef9678c0968a0a106a1eb3
Binary files /dev/null and b/Library/metadata/86/86c008322e7c647149878156c5b81940.info differ
diff --git a/Library/metadata/86/86c18994495874297b469aaa57ef9b44 b/Library/metadata/86/86c18994495874297b469aaa57ef9b44
new file mode 100644
index 0000000000000000000000000000000000000000..046ce2a2da4d347d92de61adb255ebe764a10847
Binary files /dev/null and b/Library/metadata/86/86c18994495874297b469aaa57ef9b44 differ
diff --git a/Library/metadata/86/86c18994495874297b469aaa57ef9b44.info b/Library/metadata/86/86c18994495874297b469aaa57ef9b44.info
new file mode 100644
index 0000000000000000000000000000000000000000..a49be6ecc0ee87b95360a87985ede1fe45e62715
Binary files /dev/null and b/Library/metadata/86/86c18994495874297b469aaa57ef9b44.info differ
diff --git a/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61 b/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61
new file mode 100644
index 0000000000000000000000000000000000000000..494eb946f918ff8e710265bcfd25495f48b5b759
Binary files /dev/null and b/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61 differ
diff --git a/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61.info b/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61.info
new file mode 100644
index 0000000000000000000000000000000000000000..f322c9b95d78cd2eb0d0f3a7028dabd7697cac68
Binary files /dev/null and b/Library/metadata/86/86d0242b70e6ab24aaf5a0e67edf2a61.info differ
diff --git a/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba b/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba
new file mode 100644
index 0000000000000000000000000000000000000000..9dec24f41d1e9d359898fe5506ea9d815bd5003d
Binary files /dev/null and b/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba differ
diff --git a/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info b/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info
new file mode 100644
index 0000000000000000000000000000000000000000..a35de2ac569bfe56f9d278120a86009e5ac37e17
Binary files /dev/null and b/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info differ
diff --git a/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36 b/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36
new file mode 100644
index 0000000000000000000000000000000000000000..2ddae84bea4f348de7ad3553fe0a8f9456bcf99f
Binary files /dev/null and b/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36 differ
diff --git a/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36.info b/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36.info
new file mode 100644
index 0000000000000000000000000000000000000000..d3460bc71fa6942f8607e01897452776beea453d
Binary files /dev/null and b/Library/metadata/87/871f8edd56e84b8fb295b10cc3c78f36.info differ
diff --git a/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0 b/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0
new file mode 100644
index 0000000000000000000000000000000000000000..1e8f8f269775ac3cd66503de3c3a4f1b528dd2b8
Binary files /dev/null and b/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0 differ
diff --git a/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0.info b/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0.info
new file mode 100644
index 0000000000000000000000000000000000000000..8bcdda4f05c5df78fdb82b8c6ab4c3fed28307bf
Binary files /dev/null and b/Library/metadata/87/873d4ae1798ef3f468618f345bf96ad0.info differ
diff --git a/Library/metadata/87/876d47a520ae34f81a97792e1afed14b b/Library/metadata/87/876d47a520ae34f81a97792e1afed14b
new file mode 100644
index 0000000000000000000000000000000000000000..3c50480a206a3d46425a6dde68a319d9f7945858
Binary files /dev/null and b/Library/metadata/87/876d47a520ae34f81a97792e1afed14b differ
diff --git a/Library/metadata/87/876d47a520ae34f81a97792e1afed14b.info b/Library/metadata/87/876d47a520ae34f81a97792e1afed14b.info
new file mode 100644
index 0000000000000000000000000000000000000000..03d8ef5a542587ca20303c850d4a6e4fb24547d1
Binary files /dev/null and b/Library/metadata/87/876d47a520ae34f81a97792e1afed14b.info differ
diff --git a/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594 b/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594
new file mode 100644
index 0000000000000000000000000000000000000000..18e488ac8947e6d23032c5d2b7e30e3d170fda01
Binary files /dev/null and b/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594 differ
diff --git a/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594.info b/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594.info
new file mode 100644
index 0000000000000000000000000000000000000000..42e2c763b8b03f1338143b5433e6945608ae0065
Binary files /dev/null and b/Library/metadata/87/87738e82a4f047cc947cff8a2ccea594.info differ
diff --git a/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58 b/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58
new file mode 100644
index 0000000000000000000000000000000000000000..00e33d6468c1a1d042155d4b7465b3416c0c6932
Binary files /dev/null and b/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58 differ
diff --git a/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58.info b/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58.info
new file mode 100644
index 0000000000000000000000000000000000000000..b0af915aabb437646be38fdab159b77b58708649
Binary files /dev/null and b/Library/metadata/87/87ab1bebe13f41f89d5427e7d2c34d58.info differ
diff --git a/Library/metadata/87/87d720faa37005c08600090e04d8c739 b/Library/metadata/87/87d720faa37005c08600090e04d8c739
new file mode 100644
index 0000000000000000000000000000000000000000..f02ff108d0eb0e20b4330330f5c1e6c9132922ba
Binary files /dev/null and b/Library/metadata/87/87d720faa37005c08600090e04d8c739 differ
diff --git a/Library/metadata/87/87d720faa37005c08600090e04d8c739.info b/Library/metadata/87/87d720faa37005c08600090e04d8c739.info
new file mode 100644
index 0000000000000000000000000000000000000000..25b02c1fc043d4370e93783a20838d0020e8c849
Binary files /dev/null and b/Library/metadata/87/87d720faa37005c08600090e04d8c739.info differ
diff --git a/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c b/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c
new file mode 100644
index 0000000000000000000000000000000000000000..6b79f2c63dcca12bb43c8fef079da31a4ad0b2dd
Binary files /dev/null and b/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c differ
diff --git a/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c.info b/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c.info
new file mode 100644
index 0000000000000000000000000000000000000000..620b76b1b9fb5cca06fe2c156f0dac66c65dc19c
Binary files /dev/null and b/Library/metadata/88/880f2fc52037c4fe09edb80cfe84ac7c.info differ
diff --git a/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda b/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda
new file mode 100644
index 0000000000000000000000000000000000000000..f9a515510fb82f7d3e8096012e46b4c48d043622
Binary files /dev/null and b/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda differ
diff --git a/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda.info b/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda.info
new file mode 100644
index 0000000000000000000000000000000000000000..259a5d4541905d3361df3a448698c7c3d18e3263
Binary files /dev/null and b/Library/metadata/88/880f4ac0d72cd874db9dc710298d7fda.info differ
diff --git a/Library/metadata/88/882f1a4147a284f028899b9c018e63eb b/Library/metadata/88/882f1a4147a284f028899b9c018e63eb
new file mode 100644
index 0000000000000000000000000000000000000000..1fd73545f51e251c23e0f748124412ee34d0730a
Binary files /dev/null and b/Library/metadata/88/882f1a4147a284f028899b9c018e63eb differ
diff --git a/Library/metadata/88/882f1a4147a284f028899b9c018e63eb.info b/Library/metadata/88/882f1a4147a284f028899b9c018e63eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..9673d008fd8dd36b3cdf2771f64eff6f6b16b261
Binary files /dev/null and b/Library/metadata/88/882f1a4147a284f028899b9c018e63eb.info differ
diff --git a/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1 b/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1
new file mode 100644
index 0000000000000000000000000000000000000000..c60069838c65879ecdc912409229f7d4fddb525b
Binary files /dev/null and b/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1 differ
diff --git a/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1.info b/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1.info
new file mode 100644
index 0000000000000000000000000000000000000000..64bd3190e22e0fa500ecb1aefa4c907734aab238
Binary files /dev/null and b/Library/metadata/88/884f8f0e4025a420893d3a8d1d3063e1.info differ
diff --git a/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1 b/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1
new file mode 100644
index 0000000000000000000000000000000000000000..f77dff46942436a2a42b2b5e5d3d8b410ad9094c
Binary files /dev/null and b/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1 differ
diff --git a/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1.info b/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1.info
new file mode 100644
index 0000000000000000000000000000000000000000..31cb87f35a5b909f4a8e2d8ebb85b18e1adb93b7
Binary files /dev/null and b/Library/metadata/88/88c5a6f3ddc0b9b488d857616d5488e1.info differ
diff --git a/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e b/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e
new file mode 100644
index 0000000000000000000000000000000000000000..717a144c6eb6a4220c58be53d019c292f652f12c
Binary files /dev/null and b/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e differ
diff --git a/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e.info b/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e.info
new file mode 100644
index 0000000000000000000000000000000000000000..e8413f372677219c72ef3786e27468d9ed848bd8
Binary files /dev/null and b/Library/metadata/88/88ed537c17c34f339121fe9a7d6d7a0e.info differ
diff --git a/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70 b/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70
new file mode 100644
index 0000000000000000000000000000000000000000..16c5f18d06d9a83028c7b273f7be37bc2b1d10eb
Binary files /dev/null and b/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70 differ
diff --git a/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70.info b/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70.info
new file mode 100644
index 0000000000000000000000000000000000000000..60554c1bf7bcda588d86e48108bc944c93374e93
Binary files /dev/null and b/Library/metadata/89/8915267f4fee6f647bbfe77f1b94fb70.info differ
diff --git a/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27 b/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27
new file mode 100644
index 0000000000000000000000000000000000000000..49f2cecca6ea79997e72f9e7acbab8b7ed37ebba
Binary files /dev/null and b/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27 differ
diff --git a/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27.info b/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27.info
new file mode 100644
index 0000000000000000000000000000000000000000..409350da977ebf977c8241d356969247745dd28d
Binary files /dev/null and b/Library/metadata/89/8933010149fb2d24ca47f930dc9fef27.info differ
diff --git a/Library/metadata/89/89991bec782e76e41bd3cf4e62957935 b/Library/metadata/89/89991bec782e76e41bd3cf4e62957935
new file mode 100644
index 0000000000000000000000000000000000000000..68f33ef5189ddd8dbdb85be89a238fc7c8d64bca
Binary files /dev/null and b/Library/metadata/89/89991bec782e76e41bd3cf4e62957935 differ
diff --git a/Library/metadata/89/89991bec782e76e41bd3cf4e62957935.info b/Library/metadata/89/89991bec782e76e41bd3cf4e62957935.info
new file mode 100644
index 0000000000000000000000000000000000000000..a00adaff81dd7a1c436bac205751ece9bdf878fe
Binary files /dev/null and b/Library/metadata/89/89991bec782e76e41bd3cf4e62957935.info differ
diff --git a/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc b/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc
new file mode 100644
index 0000000000000000000000000000000000000000..2fcbbd276a8f957e5a2263064c550ad93600b7be
Binary files /dev/null and b/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc differ
diff --git a/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc.info b/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc.info
new file mode 100644
index 0000000000000000000000000000000000000000..ea47019f35ae68c69e90d0f1e648e0ce55d49997
Binary files /dev/null and b/Library/metadata/8a/8a0ddab77e8dfa94ebac6100b1cc8dbc.info differ
diff --git a/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd b/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd
new file mode 100644
index 0000000000000000000000000000000000000000..6fd7e644bc3e53adcb90325a366c942322b7e55c
Binary files /dev/null and b/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd differ
diff --git a/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd.info b/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd.info
new file mode 100644
index 0000000000000000000000000000000000000000..14436adbebf30c17bb830fa796f38bfe75bfb893
Binary files /dev/null and b/Library/metadata/8a/8aa8171e088f94069bbd1978a053f7dd.info differ
diff --git a/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d b/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d
new file mode 100644
index 0000000000000000000000000000000000000000..f41e7a23280e7be87c96455242bab139d65912a7
Binary files /dev/null and b/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d differ
diff --git a/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d.info b/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d.info
new file mode 100644
index 0000000000000000000000000000000000000000..24c8c38eaeb74b403679169a61e2a1bfde77a622
Binary files /dev/null and b/Library/metadata/8a/8aafd27f78c12564281bac0d0067df8d.info differ
diff --git a/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a b/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a
new file mode 100644
index 0000000000000000000000000000000000000000..db0f38615d8fe1e7e53b0683f2b84b62ae09a3fc
Binary files /dev/null and b/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a differ
diff --git a/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a.info b/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a.info
new file mode 100644
index 0000000000000000000000000000000000000000..e15002b7b146bc2e7bd6d692704bd68426aac508
Binary files /dev/null and b/Library/metadata/8b/8b0f0c8689876421c90e7b60f096325a.info differ
diff --git a/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf b/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf
new file mode 100644
index 0000000000000000000000000000000000000000..419c3198a77a2e4746fd8152f4f28415dca1aedb
Binary files /dev/null and b/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf differ
diff --git a/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf.info b/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf.info
new file mode 100644
index 0000000000000000000000000000000000000000..200a94e974297522f9a9e33213b9c9bdc589188f
Binary files /dev/null and b/Library/metadata/8b/8b3a6d7906cffec47b445e25e680acaf.info differ
diff --git a/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d b/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d
new file mode 100644
index 0000000000000000000000000000000000000000..fa551412298d73b11602caa4484e3e8e43ecea7b
Binary files /dev/null and b/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d differ
diff --git a/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d.info b/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d.info
new file mode 100644
index 0000000000000000000000000000000000000000..d4dde8f06fae19334a78ede5c8877395ed5650d0
Binary files /dev/null and b/Library/metadata/8b/8b4a8234f532f4b34aba0ab70400d90d.info differ
diff --git a/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c b/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c
new file mode 100644
index 0000000000000000000000000000000000000000..3f0b21af2a9a3892acb32c6c949471b93f66a966
Binary files /dev/null and b/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c differ
diff --git a/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c.info b/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c.info
new file mode 100644
index 0000000000000000000000000000000000000000..c51d525a5745aff1e6fdee01b63d5e8ea065ee39
Binary files /dev/null and b/Library/metadata/8b/8b662d22e9424ce4285dadca78d4cb5c.info differ
diff --git a/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c b/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c
new file mode 100644
index 0000000000000000000000000000000000000000..627409541a4f34a5fd9ef6f6984dca3961c35240
Binary files /dev/null and b/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c differ
diff --git a/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c.info b/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c.info
new file mode 100644
index 0000000000000000000000000000000000000000..95746ed593cbeaa1740bb1ee6399ac39e7b8a5dd
Binary files /dev/null and b/Library/metadata/8b/8bc2b083b068f3546a9509c805e0541c.info differ
diff --git a/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92 b/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92
new file mode 100644
index 0000000000000000000000000000000000000000..5f6858de8864ba47459ae5dea8d3d8c345456165
Binary files /dev/null and b/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92 differ
diff --git a/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92.info b/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92.info
new file mode 100644
index 0000000000000000000000000000000000000000..a45a3cc3307cf5359f4d5005a2a77bfdf4796402
Binary files /dev/null and b/Library/metadata/8b/8bc445bb79654bf496c92d0407840a92.info differ
diff --git a/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d b/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d
new file mode 100644
index 0000000000000000000000000000000000000000..1d6312c8099d56522cd901716f0242dc7b81da62
Binary files /dev/null and b/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d differ
diff --git a/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d.info b/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d.info
new file mode 100644
index 0000000000000000000000000000000000000000..258e7b0f52fe99ba010d475b1fa4e6ac5e17ef76
Binary files /dev/null and b/Library/metadata/8c/8c25f8b5c9da143328c516248414b95d.info differ
diff --git a/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb b/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb
new file mode 100644
index 0000000000000000000000000000000000000000..87b27e22372bca8e0846646d7585739d462e33d3
Binary files /dev/null and b/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb differ
diff --git a/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb.info b/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb.info
new file mode 100644
index 0000000000000000000000000000000000000000..e83a51f7af73ee0da4297bd00b14ca8b81ecd271
Binary files /dev/null and b/Library/metadata/8d/8d2b16f5c68d9f84b8ae48b6cfca65bb.info differ
diff --git a/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b b/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b
new file mode 100644
index 0000000000000000000000000000000000000000..40db138cd584e5a76bb21a29fd06577f81b9d048
Binary files /dev/null and b/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b differ
diff --git a/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b.info b/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b.info
new file mode 100644
index 0000000000000000000000000000000000000000..70c89b4dfd15f17ca831336c83d2a942c927e122
Binary files /dev/null and b/Library/metadata/8d/8d4973baa43aece46b894d92bb516b9b.info differ
diff --git a/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277 b/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277
new file mode 100644
index 0000000000000000000000000000000000000000..d97751bcdcfafffd4eb2b18b13699c0f8f86de0d
Binary files /dev/null and b/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277 differ
diff --git a/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277.info b/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277.info
new file mode 100644
index 0000000000000000000000000000000000000000..78030d230f80d63adee94fd2c49128c56af86f8f
Binary files /dev/null and b/Library/metadata/8d/8d65a43500ec84d9186cb6d9ab681277.info differ
diff --git a/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021 b/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021
new file mode 100644
index 0000000000000000000000000000000000000000..ace9fd9e7f041d192f7471f94b70d873918ff86f
Binary files /dev/null and b/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021 differ
diff --git a/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021.info b/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021.info
new file mode 100644
index 0000000000000000000000000000000000000000..b2a03bfdba7816f12dfe2d1d22071e004da52c6e
Binary files /dev/null and b/Library/metadata/8d/8d6aa912ce5aad341bc6497fd4c2f021.info differ
diff --git a/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d b/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d
new file mode 100644
index 0000000000000000000000000000000000000000..20f52953b1eb3105bd4932d28544317c57de584a
Binary files /dev/null and b/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d differ
diff --git a/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d.info b/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d.info
new file mode 100644
index 0000000000000000000000000000000000000000..9cad67f62218b3a8e7a43ffe133bfbf48d9fadbc
Binary files /dev/null and b/Library/metadata/8d/8df48545d236f3b43b0eea6f0bb5829d.info differ
diff --git a/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e b/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e
new file mode 100644
index 0000000000000000000000000000000000000000..23f7db46e099595a38a4c77972b0694448fe41c3
Binary files /dev/null and b/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e differ
diff --git a/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e.info b/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e.info
new file mode 100644
index 0000000000000000000000000000000000000000..5bde8bd14158ae13c0f48391058bb0a3f1b938a5
Binary files /dev/null and b/Library/metadata/8e/8e319388af59e2d4e914ce868be79e8e.info differ
diff --git a/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4 b/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4
new file mode 100644
index 0000000000000000000000000000000000000000..28f7bab9c7cebfaaea0c72335f55764876cc4383
Binary files /dev/null and b/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4 differ
diff --git a/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4.info b/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4.info
new file mode 100644
index 0000000000000000000000000000000000000000..f2d786d4b5c611661f74f3b43c300d5061218d77
Binary files /dev/null and b/Library/metadata/8f/8f8b248abe6b4dcebd6cdd0d754717f4.info differ
diff --git a/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935 b/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935
new file mode 100644
index 0000000000000000000000000000000000000000..6685fd334e6504e039781cf11390b2714ea850a5
Binary files /dev/null and b/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935 differ
diff --git a/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935.info b/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935.info
new file mode 100644
index 0000000000000000000000000000000000000000..fd4f8c165fd921e366ea675859c105b719ffee20
Binary files /dev/null and b/Library/metadata/90/900f1a451c764dc3bdcc0de815a15935.info differ
diff --git a/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78 b/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78
new file mode 100644
index 0000000000000000000000000000000000000000..7fd1d96797c3ffb84d4b4bca28e3923a905f3062
Binary files /dev/null and b/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78 differ
diff --git a/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78.info b/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78.info
new file mode 100644
index 0000000000000000000000000000000000000000..fd135f0b13301a59bbe678ad06f287949bbc0a76
Binary files /dev/null and b/Library/metadata/90/906c12bc9cd95d3963c6d58f62522c78.info differ
diff --git a/Library/metadata/90/907731821455c4fa989ac14278e02251 b/Library/metadata/90/907731821455c4fa989ac14278e02251
new file mode 100644
index 0000000000000000000000000000000000000000..375118697ad8d72d9feed06f852bcd0df05dcce8
Binary files /dev/null and b/Library/metadata/90/907731821455c4fa989ac14278e02251 differ
diff --git a/Library/metadata/90/907731821455c4fa989ac14278e02251.info b/Library/metadata/90/907731821455c4fa989ac14278e02251.info
new file mode 100644
index 0000000000000000000000000000000000000000..acd889beb50f7d6748b407b1399220fdeec0e7ef
Binary files /dev/null and b/Library/metadata/90/907731821455c4fa989ac14278e02251.info differ
diff --git a/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c b/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c
new file mode 100644
index 0000000000000000000000000000000000000000..6c0e5190166434b24b89be45c35084e9c118f2a8
Binary files /dev/null and b/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c differ
diff --git a/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c.info b/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c.info
new file mode 100644
index 0000000000000000000000000000000000000000..02ab77f68e6e328681e31b6481ec44c64f435ccc
Binary files /dev/null and b/Library/metadata/90/90791303b72ec4ae198f99d637dfdf6c.info differ
diff --git a/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26 b/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26
new file mode 100644
index 0000000000000000000000000000000000000000..122cce8db1140dfc35c51b66145968a93fb4db59
Binary files /dev/null and b/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26 differ
diff --git a/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26.info b/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26.info
new file mode 100644
index 0000000000000000000000000000000000000000..b97b2def2e98f80d848742a7fdaa6a11b8e7993b
Binary files /dev/null and b/Library/metadata/90/90cc90090cd34ed41bd8714fc29c0e26.info differ
diff --git a/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e b/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e
new file mode 100644
index 0000000000000000000000000000000000000000..4d2b297a14c2dfd34f6e8e161a87b992b269a4c9
Binary files /dev/null and b/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e differ
diff --git a/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e.info b/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e.info
new file mode 100644
index 0000000000000000000000000000000000000000..8db2d1825281ee678ce6a424d692fd091669909c
Binary files /dev/null and b/Library/metadata/90/90fe1c65e6bb3bc4e90862df7297719e.info differ
diff --git a/Library/metadata/91/91950f78729ab144aa36e94690b28fad b/Library/metadata/91/91950f78729ab144aa36e94690b28fad
new file mode 100644
index 0000000000000000000000000000000000000000..49496cb15db314fb85aad855b0c3e7a5becf59f6
Binary files /dev/null and b/Library/metadata/91/91950f78729ab144aa36e94690b28fad differ
diff --git a/Library/metadata/91/91950f78729ab144aa36e94690b28fad.info b/Library/metadata/91/91950f78729ab144aa36e94690b28fad.info
new file mode 100644
index 0000000000000000000000000000000000000000..73af3ff58d827343be7222d26b401443a3de7ff0
Binary files /dev/null and b/Library/metadata/91/91950f78729ab144aa36e94690b28fad.info differ
diff --git a/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46 b/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46
new file mode 100644
index 0000000000000000000000000000000000000000..0d03bc4b6ab11a26e00f2b4c55295946f797e612
Binary files /dev/null and b/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46 differ
diff --git a/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46.info b/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46.info
new file mode 100644
index 0000000000000000000000000000000000000000..81e6876eb7e6149ca72666af82c391475587e8b2
Binary files /dev/null and b/Library/metadata/92/92027f7f8cfc4feaa477da0dc38d3d46.info differ
diff --git a/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0 b/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0
new file mode 100644
index 0000000000000000000000000000000000000000..66df3f10bed9edb277cc5254707ffeb6e83aa108
Binary files /dev/null and b/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0 differ
diff --git a/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0.info b/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7e118aeefe3590cc0838267d2096bb48c80f164
Binary files /dev/null and b/Library/metadata/92/9288066c33474b94b6ee5465f4df1cc0.info differ
diff --git a/Library/metadata/92/92a378669877c05c6071d0fed687bb95 b/Library/metadata/92/92a378669877c05c6071d0fed687bb95
new file mode 100644
index 0000000000000000000000000000000000000000..c6723de1e02534f9953549c4cc14153a04b26037
Binary files /dev/null and b/Library/metadata/92/92a378669877c05c6071d0fed687bb95 differ
diff --git a/Library/metadata/92/92a378669877c05c6071d0fed687bb95.info b/Library/metadata/92/92a378669877c05c6071d0fed687bb95.info
new file mode 100644
index 0000000000000000000000000000000000000000..4f2d08fa932fd3024ff0b0f2f36858fcca4c07c1
Binary files /dev/null and b/Library/metadata/92/92a378669877c05c6071d0fed687bb95.info differ
diff --git a/Library/metadata/93/931f3395378214a6c94333853bd0659b b/Library/metadata/93/931f3395378214a6c94333853bd0659b
new file mode 100644
index 0000000000000000000000000000000000000000..c853c93b9f6ba4839a169b715a577ebda039ae34
Binary files /dev/null and b/Library/metadata/93/931f3395378214a6c94333853bd0659b differ
diff --git a/Library/metadata/93/931f3395378214a6c94333853bd0659b.info b/Library/metadata/93/931f3395378214a6c94333853bd0659b.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c9b71096251792e0d9fe30abd18f1ad0f32662e
Binary files /dev/null and b/Library/metadata/93/931f3395378214a6c94333853bd0659b.info differ
diff --git a/Library/metadata/93/93c1370867fcb45079592da39e0994c5 b/Library/metadata/93/93c1370867fcb45079592da39e0994c5
new file mode 100644
index 0000000000000000000000000000000000000000..7c0f7c936923a927ef8fdeb73e10b6e0150859e5
Binary files /dev/null and b/Library/metadata/93/93c1370867fcb45079592da39e0994c5 differ
diff --git a/Library/metadata/93/93c1370867fcb45079592da39e0994c5.info b/Library/metadata/93/93c1370867fcb45079592da39e0994c5.info
new file mode 100644
index 0000000000000000000000000000000000000000..08d7ca699827d71b81d8d57b058aef8db965db5b
Binary files /dev/null and b/Library/metadata/93/93c1370867fcb45079592da39e0994c5.info differ
diff --git a/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0 b/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0
new file mode 100644
index 0000000000000000000000000000000000000000..11cca3309e1400ae0540f4119e194f18e883cd88
Binary files /dev/null and b/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0 differ
diff --git a/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0.info b/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0.info
new file mode 100644
index 0000000000000000000000000000000000000000..1d378b769e54f8b072d67253a87f8daf55483655
Binary files /dev/null and b/Library/metadata/93/93f7ca1a9c5c945a89e884f9611c70f0.info differ
diff --git a/Library/metadata/94/9405b416c158444b19157040fd664533 b/Library/metadata/94/9405b416c158444b19157040fd664533
new file mode 100644
index 0000000000000000000000000000000000000000..2d101fbe6cb79279a1a121208bc975d25aaa0481
Binary files /dev/null and b/Library/metadata/94/9405b416c158444b19157040fd664533 differ
diff --git a/Library/metadata/94/9405b416c158444b19157040fd664533.info b/Library/metadata/94/9405b416c158444b19157040fd664533.info
new file mode 100644
index 0000000000000000000000000000000000000000..d35abc3b590b3295f00dc004b03020e646de1ced
Binary files /dev/null and b/Library/metadata/94/9405b416c158444b19157040fd664533.info differ
diff --git a/Library/metadata/94/940777fea6fd34e448a822c292147e59 b/Library/metadata/94/940777fea6fd34e448a822c292147e59
new file mode 100644
index 0000000000000000000000000000000000000000..2606e1d1da8bf37f5594ccbe771bae84c91561a6
Binary files /dev/null and b/Library/metadata/94/940777fea6fd34e448a822c292147e59 differ
diff --git a/Library/metadata/94/940777fea6fd34e448a822c292147e59.info b/Library/metadata/94/940777fea6fd34e448a822c292147e59.info
new file mode 100644
index 0000000000000000000000000000000000000000..3c250a3e5660c24ed73404ae8743570012d2ae9a
Binary files /dev/null and b/Library/metadata/94/940777fea6fd34e448a822c292147e59.info differ
diff --git a/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad b/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad
new file mode 100644
index 0000000000000000000000000000000000000000..08c8d054a81ea00e6c0595ff78c9ea60f31f5efa
Binary files /dev/null and b/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad differ
diff --git a/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad.info b/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad.info
new file mode 100644
index 0000000000000000000000000000000000000000..a665a8515e6662470f3a7f1aa38bb3744758bdac
Binary files /dev/null and b/Library/metadata/95/953fab16d15d5885b3600fcd6388b2ad.info differ
diff --git a/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab b/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab
new file mode 100644
index 0000000000000000000000000000000000000000..481983af7edb5e1024835ef2424db8baf7ead2d4
Binary files /dev/null and b/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab differ
diff --git a/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab.info b/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab.info
new file mode 100644
index 0000000000000000000000000000000000000000..e065b4c95656bae1a88433d1264a1d303b257c1a
Binary files /dev/null and b/Library/metadata/95/9541d86e2fd84c1d9990edf0852d74ab.info differ
diff --git a/Library/metadata/95/9545c9eb3bf94265810463794fec8334 b/Library/metadata/95/9545c9eb3bf94265810463794fec8334
new file mode 100644
index 0000000000000000000000000000000000000000..ac4303061328bdc38842551c4d185c79004af385
Binary files /dev/null and b/Library/metadata/95/9545c9eb3bf94265810463794fec8334 differ
diff --git a/Library/metadata/95/9545c9eb3bf94265810463794fec8334.info b/Library/metadata/95/9545c9eb3bf94265810463794fec8334.info
new file mode 100644
index 0000000000000000000000000000000000000000..2f48b06afa2d37215e02a6cff5937f2e899f49e0
Binary files /dev/null and b/Library/metadata/95/9545c9eb3bf94265810463794fec8334.info differ
diff --git a/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9 b/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9
new file mode 100644
index 0000000000000000000000000000000000000000..49bf4396fecb7e2625ee9023dcfa0554aaee422f
Binary files /dev/null and b/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9 differ
diff --git a/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9.info b/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9.info
new file mode 100644
index 0000000000000000000000000000000000000000..0809e55a28e3df8acf62b0463300a0c23ea8767a
Binary files /dev/null and b/Library/metadata/95/95f85adeda79e994f011eb2152cf4fc9.info differ
diff --git a/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca b/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca
new file mode 100644
index 0000000000000000000000000000000000000000..8d492f923dc66d1f417300d85286f08a663ecb95
Binary files /dev/null and b/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca differ
diff --git a/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca.info b/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca.info
new file mode 100644
index 0000000000000000000000000000000000000000..e3a312d495dff0cbbf76f16d33cbf08f7e587fae
Binary files /dev/null and b/Library/metadata/96/963cea26ffac28747bf29abbb60b6fca.info differ
diff --git a/Library/metadata/96/96626a3e271e94e76a848c68828fbbac b/Library/metadata/96/96626a3e271e94e76a848c68828fbbac
new file mode 100644
index 0000000000000000000000000000000000000000..2c07bae7b5aa8f245b379e31524c0d11c852890a
Binary files /dev/null and b/Library/metadata/96/96626a3e271e94e76a848c68828fbbac differ
diff --git a/Library/metadata/96/96626a3e271e94e76a848c68828fbbac.info b/Library/metadata/96/96626a3e271e94e76a848c68828fbbac.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c3e076ae6e05f95a79d99269a145045b483c73b
Binary files /dev/null and b/Library/metadata/96/96626a3e271e94e76a848c68828fbbac.info differ
diff --git a/Library/metadata/96/968a09f153574430a6e15ae975145768 b/Library/metadata/96/968a09f153574430a6e15ae975145768
new file mode 100644
index 0000000000000000000000000000000000000000..ffe499522e0581b7866a8d963e878391885e8696
Binary files /dev/null and b/Library/metadata/96/968a09f153574430a6e15ae975145768 differ
diff --git a/Library/metadata/96/968a09f153574430a6e15ae975145768.info b/Library/metadata/96/968a09f153574430a6e15ae975145768.info
new file mode 100644
index 0000000000000000000000000000000000000000..aae4d47d16be3e13db7019c47fd50935b8164906
Binary files /dev/null and b/Library/metadata/96/968a09f153574430a6e15ae975145768.info differ
diff --git a/Library/metadata/96/96b44f7d98314b139324a8a87eb66067 b/Library/metadata/96/96b44f7d98314b139324a8a87eb66067
new file mode 100644
index 0000000000000000000000000000000000000000..cd6465789e32f182b607d30dae676fd541a4b4da
Binary files /dev/null and b/Library/metadata/96/96b44f7d98314b139324a8a87eb66067 differ
diff --git a/Library/metadata/96/96b44f7d98314b139324a8a87eb66067.info b/Library/metadata/96/96b44f7d98314b139324a8a87eb66067.info
new file mode 100644
index 0000000000000000000000000000000000000000..9094b18bf7989d99fbff640a16f612cf739cc5bc
Binary files /dev/null and b/Library/metadata/96/96b44f7d98314b139324a8a87eb66067.info differ
diff --git a/Library/metadata/96/96d14b71b907bb52333b2886e665aba6 b/Library/metadata/96/96d14b71b907bb52333b2886e665aba6
new file mode 100644
index 0000000000000000000000000000000000000000..e9ecec65b09550adc7563d1b035b25cd0f1e6912
Binary files /dev/null and b/Library/metadata/96/96d14b71b907bb52333b2886e665aba6 differ
diff --git a/Library/metadata/96/96d14b71b907bb52333b2886e665aba6.info b/Library/metadata/96/96d14b71b907bb52333b2886e665aba6.info
new file mode 100644
index 0000000000000000000000000000000000000000..4dbddc9c8ff7559c6464621866b8f871bf0cdcbe
Binary files /dev/null and b/Library/metadata/96/96d14b71b907bb52333b2886e665aba6.info differ
diff --git a/Library/metadata/96/96e1a81adb349464a97ebed166911b0e b/Library/metadata/96/96e1a81adb349464a97ebed166911b0e
new file mode 100644
index 0000000000000000000000000000000000000000..42e9e0fbb95eceeef173801b3e4e052ab3bd8bda
Binary files /dev/null and b/Library/metadata/96/96e1a81adb349464a97ebed166911b0e differ
diff --git a/Library/metadata/96/96e1a81adb349464a97ebed166911b0e.info b/Library/metadata/96/96e1a81adb349464a97ebed166911b0e.info
new file mode 100644
index 0000000000000000000000000000000000000000..6472fb450902f5d8800accde15fb1f01d1b94027
Binary files /dev/null and b/Library/metadata/96/96e1a81adb349464a97ebed166911b0e.info differ
diff --git a/Library/metadata/96/96e9072453a441618754c478755b3028 b/Library/metadata/96/96e9072453a441618754c478755b3028
new file mode 100644
index 0000000000000000000000000000000000000000..84a73a497c38555a989d0deeca38da303037113a
Binary files /dev/null and b/Library/metadata/96/96e9072453a441618754c478755b3028 differ
diff --git a/Library/metadata/96/96e9072453a441618754c478755b3028.info b/Library/metadata/96/96e9072453a441618754c478755b3028.info
new file mode 100644
index 0000000000000000000000000000000000000000..79d9bf755f730a9b9986fca01d7e3b51f8ef10c3
Binary files /dev/null and b/Library/metadata/96/96e9072453a441618754c478755b3028.info differ
diff --git a/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7 b/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7
new file mode 100644
index 0000000000000000000000000000000000000000..19337ce7f50ea80bbc1023a994b1b28650176d0a
Binary files /dev/null and b/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7 differ
diff --git a/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7.info b/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7.info
new file mode 100644
index 0000000000000000000000000000000000000000..ce8f863c18f2e0cd4e24e7170791f06efd3dbe30
Binary files /dev/null and b/Library/metadata/97/9768f82ea595f7d4a8d7ef0994db7be7.info differ
diff --git a/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499 b/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499
new file mode 100644
index 0000000000000000000000000000000000000000..448c2cd9c4898184ed07f4f2bf3624eea76cf6bc
Binary files /dev/null and b/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499 differ
diff --git a/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499.info b/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a165ddd0fa937787dab260feac2d49d98cd20e8
Binary files /dev/null and b/Library/metadata/97/97dff1b5ae41ee84886ae7a80ae21499.info differ
diff --git a/Library/metadata/98/9811a7ba202944de58374f6369b5bceb b/Library/metadata/98/9811a7ba202944de58374f6369b5bceb
new file mode 100644
index 0000000000000000000000000000000000000000..6ed2096149a26d4bca9b375a2a93eaeb912c87e9
Binary files /dev/null and b/Library/metadata/98/9811a7ba202944de58374f6369b5bceb differ
diff --git a/Library/metadata/98/9811a7ba202944de58374f6369b5bceb.info b/Library/metadata/98/9811a7ba202944de58374f6369b5bceb.info
new file mode 100644
index 0000000000000000000000000000000000000000..570b52daff4bdadb470ab4018834d602115690df
Binary files /dev/null and b/Library/metadata/98/9811a7ba202944de58374f6369b5bceb.info differ
diff --git a/Library/metadata/98/983d491088dbb4db8b83c926939a08c5 b/Library/metadata/98/983d491088dbb4db8b83c926939a08c5
new file mode 100644
index 0000000000000000000000000000000000000000..2a3c3cdd9abc76a4f39a1a72d46222cceb3bf186
Binary files /dev/null and b/Library/metadata/98/983d491088dbb4db8b83c926939a08c5 differ
diff --git a/Library/metadata/98/983d491088dbb4db8b83c926939a08c5.info b/Library/metadata/98/983d491088dbb4db8b83c926939a08c5.info
new file mode 100644
index 0000000000000000000000000000000000000000..d9bcd73f5e36d49af5c8fd5a12a9433a56948c70
Binary files /dev/null and b/Library/metadata/98/983d491088dbb4db8b83c926939a08c5.info differ
diff --git a/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926 b/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926
new file mode 100644
index 0000000000000000000000000000000000000000..5b880b63b8251429077c366ec788db7326633b9c
Binary files /dev/null and b/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926 differ
diff --git a/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926.info b/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926.info
new file mode 100644
index 0000000000000000000000000000000000000000..d23b16b4ab159d98ce695f78f70cf6c899aff8a0
Binary files /dev/null and b/Library/metadata/99/996ae9bb6e3f77245b77d1b29cd9b926.info differ
diff --git a/Library/metadata/99/99ddb49592ff84811804420a1910cb89 b/Library/metadata/99/99ddb49592ff84811804420a1910cb89
new file mode 100644
index 0000000000000000000000000000000000000000..d0d1f88834ba00a08c082f80e89f3d81194be00b
Binary files /dev/null and b/Library/metadata/99/99ddb49592ff84811804420a1910cb89 differ
diff --git a/Library/metadata/99/99ddb49592ff84811804420a1910cb89.info b/Library/metadata/99/99ddb49592ff84811804420a1910cb89.info
new file mode 100644
index 0000000000000000000000000000000000000000..bd823ad0749b642041345e00c90e06e591b4f16c
Binary files /dev/null and b/Library/metadata/99/99ddb49592ff84811804420a1910cb89.info differ
diff --git a/Library/metadata/9a/9a2c874c382e2419184b302497279dd9 b/Library/metadata/9a/9a2c874c382e2419184b302497279dd9
new file mode 100644
index 0000000000000000000000000000000000000000..b2b82606575b532224f9ec68c9e3ab67bf9e1ee5
Binary files /dev/null and b/Library/metadata/9a/9a2c874c382e2419184b302497279dd9 differ
diff --git a/Library/metadata/9a/9a2c874c382e2419184b302497279dd9.info b/Library/metadata/9a/9a2c874c382e2419184b302497279dd9.info
new file mode 100644
index 0000000000000000000000000000000000000000..26098db78660e279dfb54d3d0679defb2e9c7a34
Binary files /dev/null and b/Library/metadata/9a/9a2c874c382e2419184b302497279dd9.info differ
diff --git a/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67 b/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67
new file mode 100644
index 0000000000000000000000000000000000000000..de372f70b5c678ed9be03bd5e6e2cd9dadbcd908
Binary files /dev/null and b/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67 differ
diff --git a/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67.info b/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67.info
new file mode 100644
index 0000000000000000000000000000000000000000..9dea9cca3f8e617d7265a50e79cdab95dfece0af
Binary files /dev/null and b/Library/metadata/9a/9ab40593e600b0b448211af1e6faea67.info differ
diff --git a/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69 b/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69
new file mode 100644
index 0000000000000000000000000000000000000000..cb2d25468ef27517699f72e8cc00b9ddf8a76776
Binary files /dev/null and b/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69 differ
diff --git a/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69.info b/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69.info
new file mode 100644
index 0000000000000000000000000000000000000000..c9f39ae15bd3536e4bf9da6e8cc9043397b5273f
Binary files /dev/null and b/Library/metadata/9a/9af739a42eff7ec48b14cc2f7999fd69.info differ
diff --git a/Library/metadata/9b/9b15bf7623656e349873d8564211ca16 b/Library/metadata/9b/9b15bf7623656e349873d8564211ca16
new file mode 100644
index 0000000000000000000000000000000000000000..dc88a3d15d6223abda1e0c46038b8e1444ab16aa
Binary files /dev/null and b/Library/metadata/9b/9b15bf7623656e349873d8564211ca16 differ
diff --git a/Library/metadata/9b/9b15bf7623656e349873d8564211ca16.info b/Library/metadata/9b/9b15bf7623656e349873d8564211ca16.info
new file mode 100644
index 0000000000000000000000000000000000000000..643fe0554e2d440f7d9ce5e7c62803c9ae2f1576
Binary files /dev/null and b/Library/metadata/9b/9b15bf7623656e349873d8564211ca16.info differ
diff --git a/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a b/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a
new file mode 100644
index 0000000000000000000000000000000000000000..8e054909897abdc10e6e8d6ebd20422791b6dcc9
Binary files /dev/null and b/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a differ
diff --git a/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a.info b/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a.info
new file mode 100644
index 0000000000000000000000000000000000000000..d0802e76bbc9e82e5b2ff301cb0750583af7faa7
Binary files /dev/null and b/Library/metadata/9c/9c28ac06b3e4042b49dd5e1471a4c81a.info differ
diff --git a/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548 b/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548
new file mode 100644
index 0000000000000000000000000000000000000000..30c65ee168c9cd509e4f83131e2e9f518aae995a
Binary files /dev/null and b/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548 differ
diff --git a/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548.info b/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548.info
new file mode 100644
index 0000000000000000000000000000000000000000..b654b4e65385b241e9265211529ac8416ae45015
Binary files /dev/null and b/Library/metadata/9c/9c4a050f089abb04ebd4125e419f4548.info differ
diff --git a/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d b/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d
new file mode 100644
index 0000000000000000000000000000000000000000..f9cdd224b18fd89fabbce86bdc9f32011e9a246e
Binary files /dev/null and b/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d differ
diff --git a/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d.info b/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d.info
new file mode 100644
index 0000000000000000000000000000000000000000..936c9706229476044f46f8bb7da5573ffc4b1473
Binary files /dev/null and b/Library/metadata/9c/9c65e5da26babc34ba3eba3c0bd58c3d.info differ
diff --git a/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4 b/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4
new file mode 100644
index 0000000000000000000000000000000000000000..55f0574021c8b8a358d9702297af2342c1985b59
Binary files /dev/null and b/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4 differ
diff --git a/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4.info b/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4.info
new file mode 100644
index 0000000000000000000000000000000000000000..af416f036bf1cc7d5d668cbf41213ce46815aced
Binary files /dev/null and b/Library/metadata/9c/9c7c268fa6492449654839df69f2a2f4.info differ
diff --git a/Library/metadata/9d/9da568db70dafa345a908282554b3672 b/Library/metadata/9d/9da568db70dafa345a908282554b3672
new file mode 100644
index 0000000000000000000000000000000000000000..3fe60f5037c99abf766c643af6ddb71af86df952
Binary files /dev/null and b/Library/metadata/9d/9da568db70dafa345a908282554b3672 differ
diff --git a/Library/metadata/9d/9da568db70dafa345a908282554b3672.info b/Library/metadata/9d/9da568db70dafa345a908282554b3672.info
new file mode 100644
index 0000000000000000000000000000000000000000..c5e88c2802a541db5a8c46f51398a65cc55f1da5
Binary files /dev/null and b/Library/metadata/9d/9da568db70dafa345a908282554b3672.info differ
diff --git a/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804 b/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804
new file mode 100644
index 0000000000000000000000000000000000000000..3a221d168b5f744bbe6dfeb861134597ab9a4b75
Binary files /dev/null and b/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804 differ
diff --git a/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804.info b/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804.info
new file mode 100644
index 0000000000000000000000000000000000000000..e61ea0abe45b24089e5b6e40b1bc9541aea06ac7
Binary files /dev/null and b/Library/metadata/9d/9de24983a2c6cbe4f925c3e98a79b804.info differ
diff --git a/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9 b/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9
new file mode 100644
index 0000000000000000000000000000000000000000..0390a602c6943b507c29f9ccf264fcae430ff25e
Binary files /dev/null and b/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9 differ
diff --git a/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9.info b/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9.info
new file mode 100644
index 0000000000000000000000000000000000000000..4912b42f416352bbeda569fcf374cbb52adb7164
Binary files /dev/null and b/Library/metadata/9d/9de9e8523c82543c5b3e40a4b51aa2c9.info differ
diff --git a/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6 b/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6
new file mode 100644
index 0000000000000000000000000000000000000000..86898e493f5a89d0ddd59f116d42f224ab23dc82
Binary files /dev/null and b/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6 differ
diff --git a/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6.info b/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6.info
new file mode 100644
index 0000000000000000000000000000000000000000..9766de949bb3c7086c9c0b806d6210f28d3aaab4
Binary files /dev/null and b/Library/metadata/9e/9e3efe6227e546844b9c2b46589e24e6.info differ
diff --git a/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863 b/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863
new file mode 100644
index 0000000000000000000000000000000000000000..855493515a8c667311a8726edb1492f5ece19bf9
Binary files /dev/null and b/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863 differ
diff --git a/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863.info b/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863.info
new file mode 100644
index 0000000000000000000000000000000000000000..f535e80ca1b0aec40ec04e82d99a6b95a6492c5e
Binary files /dev/null and b/Library/metadata/9e/9e69df8ff024a4dc1a9e5c22725e4863.info differ
diff --git a/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8 b/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8
new file mode 100644
index 0000000000000000000000000000000000000000..b84c3cc375033a485cc527733d8bfa37421fd4ee
Binary files /dev/null and b/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8 differ
diff --git a/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8.info b/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8.info
new file mode 100644
index 0000000000000000000000000000000000000000..6bf97cd7abfa5d047687bf2a018e3a808f24d6c3
Binary files /dev/null and b/Library/metadata/9e/9ec5dc72125424af38a9bfaca532acc8.info differ
diff --git a/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c b/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c
new file mode 100644
index 0000000000000000000000000000000000000000..1ac69173ebbcf2676b23306d5c0b56dd243cf6a7
Binary files /dev/null and b/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c differ
diff --git a/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c.info b/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c.info
new file mode 100644
index 0000000000000000000000000000000000000000..b9491cf47a7e0ca63da0d7e253da493f57444fbc
Binary files /dev/null and b/Library/metadata/9e/9edc9283e7d6409fab242fe8fb6a822c.info differ
diff --git a/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5 b/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5
new file mode 100644
index 0000000000000000000000000000000000000000..fb706260218342d59617c49a16afd439fbdceb9c
Binary files /dev/null and b/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5 differ
diff --git a/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5.info b/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5.info
new file mode 100644
index 0000000000000000000000000000000000000000..0f9e75bbc52caeab6ebcd69ba2f14238a1c27c01
Binary files /dev/null and b/Library/metadata/9f/9f091dea68a1452cb6c04a6dfa73d5f5.info differ
diff --git a/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992 b/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992
new file mode 100644
index 0000000000000000000000000000000000000000..21767d215b32a666ea590053a4a5b0f30331a69f
Binary files /dev/null and b/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992 differ
diff --git a/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992.info b/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992.info
new file mode 100644
index 0000000000000000000000000000000000000000..e53987b65b89a380b92372c1cdb943a90ca3bf03
Binary files /dev/null and b/Library/metadata/9f/9f17a0688211d476f8d8c9742bb9f992.info differ
diff --git a/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9 b/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9
new file mode 100644
index 0000000000000000000000000000000000000000..bf1ecd2bfe80627cacd30e5a79d5ea1676aec717
Binary files /dev/null and b/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9 differ
diff --git a/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9.info b/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9.info
new file mode 100644
index 0000000000000000000000000000000000000000..c3d523366cc78a27f422b611ee07df81e6abf28b
Binary files /dev/null and b/Library/metadata/9f/9f1dd6c8c767b634c8d0547d242011c9.info differ
diff --git a/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7 b/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7
new file mode 100644
index 0000000000000000000000000000000000000000..e249ced97284987dbb5b72b1c961b5c0b05bf08f
Binary files /dev/null and b/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7 differ
diff --git a/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7.info b/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7.info
new file mode 100644
index 0000000000000000000000000000000000000000..c391c6ddfb41a740b13a5f5b21401f0684b5e453
Binary files /dev/null and b/Library/metadata/a1/a10564aae782c458cbf1de024f4870f7.info differ
diff --git a/Library/metadata/a1/a11fdc28c124d1944810640a16d61019 b/Library/metadata/a1/a11fdc28c124d1944810640a16d61019
new file mode 100644
index 0000000000000000000000000000000000000000..6eca3d45b503b227a4f77b2262b046cd58124bef
Binary files /dev/null and b/Library/metadata/a1/a11fdc28c124d1944810640a16d61019 differ
diff --git a/Library/metadata/a1/a11fdc28c124d1944810640a16d61019.info b/Library/metadata/a1/a11fdc28c124d1944810640a16d61019.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a1ef43cbd031201736d8efce02d435aa185c690
Binary files /dev/null and b/Library/metadata/a1/a11fdc28c124d1944810640a16d61019.info differ
diff --git a/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f b/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f
new file mode 100644
index 0000000000000000000000000000000000000000..938c737aebf2b20e0e4accc6d50419ddc19ed66c
Binary files /dev/null and b/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f differ
diff --git a/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f.info b/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f.info
new file mode 100644
index 0000000000000000000000000000000000000000..4b218b3df8dd27c2d0fbcd444aac6e4e04f3a535
Binary files /dev/null and b/Library/metadata/a1/a18243fbf305de846a4ee437cc05477f.info differ
diff --git a/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0 b/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0
new file mode 100644
index 0000000000000000000000000000000000000000..ddedb31464ecf4e70646615191576b3b3067ab09
Binary files /dev/null and b/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0 differ
diff --git a/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0.info b/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0.info
new file mode 100644
index 0000000000000000000000000000000000000000..08d3b37f043f6e5cfcd578703d5c26cdc6b0173c
Binary files /dev/null and b/Library/metadata/a2/a21ee20f75d8eff4184a627c39b3d0a0.info differ
diff --git a/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31 b/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31
new file mode 100644
index 0000000000000000000000000000000000000000..5fa72852d1a480f4e94d1e83db2bd90ddd50777c
Binary files /dev/null and b/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31 differ
diff --git a/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31.info b/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31.info
new file mode 100644
index 0000000000000000000000000000000000000000..a8ffad5716c2db4df5607e9738a34e705e4d5555
Binary files /dev/null and b/Library/metadata/a3/a30e59ca9f68d46db88323ac18f49e31.info differ
diff --git a/Library/metadata/a3/a342381d77833427fa10621e38fbae10 b/Library/metadata/a3/a342381d77833427fa10621e38fbae10
new file mode 100644
index 0000000000000000000000000000000000000000..10e7b9bcf3afa08a439f97e578f7b8e5b98c648f
Binary files /dev/null and b/Library/metadata/a3/a342381d77833427fa10621e38fbae10 differ
diff --git a/Library/metadata/a3/a342381d77833427fa10621e38fbae10.info b/Library/metadata/a3/a342381d77833427fa10621e38fbae10.info
new file mode 100644
index 0000000000000000000000000000000000000000..a8d4a9f8c5cb26e72ac8ba93345f0d886c4dc615
Binary files /dev/null and b/Library/metadata/a3/a342381d77833427fa10621e38fbae10.info differ
diff --git a/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879 b/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879
new file mode 100644
index 0000000000000000000000000000000000000000..17b7c8f258419ffdd0696c3c71c402640f0da113
Binary files /dev/null and b/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879 differ
diff --git a/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879.info b/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879.info
new file mode 100644
index 0000000000000000000000000000000000000000..99b8c82abfe6f8de73af2aaf220fa1b907de9b06
Binary files /dev/null and b/Library/metadata/a3/a37e18887fa954edf92bc36bc353b879.info differ
diff --git a/Library/metadata/a4/a41d318e6018f4141acdadc56150da05 b/Library/metadata/a4/a41d318e6018f4141acdadc56150da05
new file mode 100644
index 0000000000000000000000000000000000000000..2fb0a4846044c583e41fbb670484cf34b6281e64
Binary files /dev/null and b/Library/metadata/a4/a41d318e6018f4141acdadc56150da05 differ
diff --git a/Library/metadata/a4/a41d318e6018f4141acdadc56150da05.info b/Library/metadata/a4/a41d318e6018f4141acdadc56150da05.info
new file mode 100644
index 0000000000000000000000000000000000000000..3e9f5c4d4c4f6ff2dc7b8c5b404af52267c0759f
Binary files /dev/null and b/Library/metadata/a4/a41d318e6018f4141acdadc56150da05.info differ
diff --git a/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee b/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee
new file mode 100644
index 0000000000000000000000000000000000000000..f78289f45e2c3965dbe0db5055e7a85468a157c5
Binary files /dev/null and b/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee differ
diff --git a/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee.info b/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee.info
new file mode 100644
index 0000000000000000000000000000000000000000..697757b49d67bc16dafd0634f38bb81fa53dac36
Binary files /dev/null and b/Library/metadata/a4/a483595b0257945278dc75c5ff7d82ee.info differ
diff --git a/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64 b/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64
new file mode 100644
index 0000000000000000000000000000000000000000..fdc65c9d03c486004fb28c02ca40b08e51c8b486
Binary files /dev/null and b/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64 differ
diff --git a/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64.info b/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64.info
new file mode 100644
index 0000000000000000000000000000000000000000..07c0e86c5a461a81d421ccaaba243093510bcaf5
Binary files /dev/null and b/Library/metadata/a5/a55c097497b7f3843980f3733c7a5e64.info differ
diff --git a/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966 b/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966
new file mode 100644
index 0000000000000000000000000000000000000000..8b333b1199dbbeebed6fb43f8fe3574028401176
Binary files /dev/null and b/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966 differ
diff --git a/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966.info b/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966.info
new file mode 100644
index 0000000000000000000000000000000000000000..cd988052eafab7e9814413169ae9e4dd3385e926
Binary files /dev/null and b/Library/metadata/a5/a55fb7b4961a425381d1282fc424f966.info differ
diff --git a/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c b/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c
new file mode 100644
index 0000000000000000000000000000000000000000..73197a3a29108589092544ad5f36c1ba4540a6c8
Binary files /dev/null and b/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c differ
diff --git a/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c.info b/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c.info
new file mode 100644
index 0000000000000000000000000000000000000000..99d2a881640983135e43174690eb31e8da4069f7
Binary files /dev/null and b/Library/metadata/a5/a571de1bea3cb4c9784493c6f1b0b76c.info differ
diff --git a/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef b/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef
new file mode 100644
index 0000000000000000000000000000000000000000..b204b524b6e9dacb6da8d4162573fc791e7d86a9
Binary files /dev/null and b/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef differ
diff --git a/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef.info b/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef.info
new file mode 100644
index 0000000000000000000000000000000000000000..20335112428434b29b37e24b9bd71b3641057835
Binary files /dev/null and b/Library/metadata/a5/a592d27ead6884163839d4f8da3977ef.info differ
diff --git a/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa b/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa
new file mode 100644
index 0000000000000000000000000000000000000000..2c535e2f26605dc6bbb5c1205914866a74193f84
Binary files /dev/null and b/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa differ
diff --git a/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa.info b/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa.info
new file mode 100644
index 0000000000000000000000000000000000000000..787fc3268721a912baf21a04cd586f3de57329dd
Binary files /dev/null and b/Library/metadata/a5/a5ebb11c6fc3a2f498bd89593f7744aa.info differ
diff --git a/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a b/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a
new file mode 100644
index 0000000000000000000000000000000000000000..b2fa2d9fa074cdc7f228cd70de28fa955287f2e7
Binary files /dev/null and b/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a differ
diff --git a/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a.info b/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a.info
new file mode 100644
index 0000000000000000000000000000000000000000..eeb7f3b4e3add4067fd4c524bbdd058bb0889876
Binary files /dev/null and b/Library/metadata/a5/a5edd19845e0e426eb775477a7988a4a.info differ
diff --git a/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc b/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc
new file mode 100644
index 0000000000000000000000000000000000000000..180bdace4c4af2c5db5ce216726fc0e73f0dd31b
Binary files /dev/null and b/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc differ
diff --git a/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc.info b/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc.info
new file mode 100644
index 0000000000000000000000000000000000000000..2dee516c62ec92a05b1cb5d5cef488bc4c2218eb
Binary files /dev/null and b/Library/metadata/a6/a6842a74831964edc8fefa1c0aed89dc.info differ
diff --git a/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de b/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de
new file mode 100644
index 0000000000000000000000000000000000000000..8f918f3d9358dd043284cb8c7f5e1fea2c6f1758
Binary files /dev/null and b/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de differ
diff --git a/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de.info b/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de.info
new file mode 100644
index 0000000000000000000000000000000000000000..dba6251024035034aa38def85b31347f3b5c49a8
Binary files /dev/null and b/Library/metadata/a6/a6ab6fd2b91214e8a9c8ec2224a528de.info differ
diff --git a/Library/metadata/a7/a7958ea011ebd874785c871049c5686a b/Library/metadata/a7/a7958ea011ebd874785c871049c5686a
new file mode 100644
index 0000000000000000000000000000000000000000..03538f4bec94799439121576f62b90840989ec4f
Binary files /dev/null and b/Library/metadata/a7/a7958ea011ebd874785c871049c5686a differ
diff --git a/Library/metadata/a7/a7958ea011ebd874785c871049c5686a.info b/Library/metadata/a7/a7958ea011ebd874785c871049c5686a.info
new file mode 100644
index 0000000000000000000000000000000000000000..4a03d419bf4142fca6c607c39a358d5f86f713aa
Binary files /dev/null and b/Library/metadata/a7/a7958ea011ebd874785c871049c5686a.info differ
diff --git a/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39 b/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39
new file mode 100644
index 0000000000000000000000000000000000000000..4a193df1b9eb9099444cf3f275a09f67c177c4ea
Binary files /dev/null and b/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39 differ
diff --git a/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39.info b/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39.info
new file mode 100644
index 0000000000000000000000000000000000000000..77c18a56a04dcd6d9cc8f5f25c73cf059a5cf9e2
Binary files /dev/null and b/Library/metadata/a7/a7b89acd74e047778b42209a7a733d39.info differ
diff --git a/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4 b/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4
new file mode 100644
index 0000000000000000000000000000000000000000..ff2c4b4333ad89def628438e64b97a487562c8c3
Binary files /dev/null and b/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4 differ
diff --git a/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4.info b/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4.info
new file mode 100644
index 0000000000000000000000000000000000000000..87a22ec900f89390770a0bbdede8c498a933e0be
Binary files /dev/null and b/Library/metadata/a7/a7c91a123806d41a0873fcdcb629b1c4.info differ
diff --git a/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868 b/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868
new file mode 100644
index 0000000000000000000000000000000000000000..44c5be5fe2cceff8b95dd422cb214de101bdf1f5
Binary files /dev/null and b/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868 differ
diff --git a/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868.info b/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868.info
new file mode 100644
index 0000000000000000000000000000000000000000..d4279531a3e06464643a058b2ceda3dc0485c036
Binary files /dev/null and b/Library/metadata/a7/a7ec9e7ad8b847b7ae4510af83c5d868.info differ
diff --git a/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44 b/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44
new file mode 100644
index 0000000000000000000000000000000000000000..1f8138a19b807b1bfd977c4fd494e629c6c1d037
Binary files /dev/null and b/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44 differ
diff --git a/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44.info b/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44.info
new file mode 100644
index 0000000000000000000000000000000000000000..4e00c1c497eabcbadde373742eaee7e95ab46a77
Binary files /dev/null and b/Library/metadata/a8/a8d9e44eff3f447db9448925617ccb44.info differ
diff --git a/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0 b/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0
new file mode 100644
index 0000000000000000000000000000000000000000..3bb4035bd323bde51654104af4ec3c505443452d
Binary files /dev/null and b/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0 differ
diff --git a/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0.info b/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0.info
new file mode 100644
index 0000000000000000000000000000000000000000..875dde4985e52230378e2b72c5c324e783cb1db5
Binary files /dev/null and b/Library/metadata/a9/a98bc92072da64d49a393088e55ce2a0.info differ
diff --git a/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09 b/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09
new file mode 100644
index 0000000000000000000000000000000000000000..646c29c88c34807d1597b86f196bbc5dfcc709e0
Binary files /dev/null and b/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09 differ
diff --git a/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09.info b/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09.info
new file mode 100644
index 0000000000000000000000000000000000000000..1c06a225804bd5b1cb84b8ed5c0ea0f252347507
Binary files /dev/null and b/Library/metadata/a9/a9d131f178070df48a5f9f7abe2baa09.info differ
diff --git a/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6 b/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6
new file mode 100644
index 0000000000000000000000000000000000000000..821f2b102a4e555b884ce12dcb86dc85d256f219
Binary files /dev/null and b/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6 differ
diff --git a/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6.info b/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6.info
new file mode 100644
index 0000000000000000000000000000000000000000..1b74647257bdb800ac41a3bf0efde3f8ec3fea21
Binary files /dev/null and b/Library/metadata/aa/aa160f27c3fe4052a5850e21108811b6.info differ
diff --git a/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec b/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec
new file mode 100644
index 0000000000000000000000000000000000000000..786aad7fb07c72e9fe438ca3ed7d2cb3d658751a
Binary files /dev/null and b/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec differ
diff --git a/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec.info b/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec.info
new file mode 100644
index 0000000000000000000000000000000000000000..65866b3bbc9cafdf10067f08e72533f3240f885b
Binary files /dev/null and b/Library/metadata/aa/aa677b132f3ec714786ca926c8ebe4ec.info differ
diff --git a/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4 b/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4
new file mode 100644
index 0000000000000000000000000000000000000000..4b8f0871d985dc97cb80e3f506cd7c24c253ee9a
Binary files /dev/null and b/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4 differ
diff --git a/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4.info b/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4.info
new file mode 100644
index 0000000000000000000000000000000000000000..52e62ecbfe6894f214c4b2213ca212f696612bbe
Binary files /dev/null and b/Library/metadata/aa/aa76955fe5bb44f7915d91db8c7043c4.info differ
diff --git a/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039 b/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039
new file mode 100644
index 0000000000000000000000000000000000000000..08493d94d95d24d1eb0a80fa4638f0c5b828e805
Binary files /dev/null and b/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039 differ
diff --git a/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039.info b/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039.info
new file mode 100644
index 0000000000000000000000000000000000000000..a2f9a90d94543220e9ad25234cccbdbf053a3473
Binary files /dev/null and b/Library/metadata/aa/aa9dcaaab8c01ef4a94c37b06d3c2039.info differ
diff --git a/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa b/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa
new file mode 100644
index 0000000000000000000000000000000000000000..ac7276777062b335785c092fb134a2d4d47aa3cf
Binary files /dev/null and b/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa differ
diff --git a/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa.info b/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa.info
new file mode 100644
index 0000000000000000000000000000000000000000..59b0d02bb783aedefcde79cdd7c690c8d236f51b
Binary files /dev/null and b/Library/metadata/aa/aae2662718c5ba447b61f4f79f2485aa.info differ
diff --git a/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410 b/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410
new file mode 100644
index 0000000000000000000000000000000000000000..5c41edcd344120bee25e9152bd876290ef89db65
Binary files /dev/null and b/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410 differ
diff --git a/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410.info b/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410.info
new file mode 100644
index 0000000000000000000000000000000000000000..4de42ab998605bbff9b3fc6a5b894d87fc4f6405
Binary files /dev/null and b/Library/metadata/ab/ab2114bdc8544297b417dfefe9f1e410.info differ
diff --git a/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5 b/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5
new file mode 100644
index 0000000000000000000000000000000000000000..804d4cfd9da1d1985a225850af3792be82bba632
Binary files /dev/null and b/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5 differ
diff --git a/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5.info b/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5.info
new file mode 100644
index 0000000000000000000000000000000000000000..a8993b6cb5946c26e3913bd703ad316baa16db85
Binary files /dev/null and b/Library/metadata/ab/ab687522157bb7a42bf8a6a989fd02d5.info differ
diff --git a/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a b/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a
new file mode 100644
index 0000000000000000000000000000000000000000..b3f1851ad21178951355ab47108d7fb4b6cd76c0
Binary files /dev/null and b/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a differ
diff --git a/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a.info b/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a.info
new file mode 100644
index 0000000000000000000000000000000000000000..3def660cef4483a136e546d9d412b4a5fa8b60a9
Binary files /dev/null and b/Library/metadata/ab/ab85a582e1c99c24d8b0d057e4609d4a.info differ
diff --git a/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e b/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e
new file mode 100644
index 0000000000000000000000000000000000000000..174c11ac1329c6228340d486aeffb3de47022246
Binary files /dev/null and b/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e differ
diff --git a/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e.info b/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e.info
new file mode 100644
index 0000000000000000000000000000000000000000..27c84b74a1dfb9b86e70955c2a654ae229474ddc
Binary files /dev/null and b/Library/metadata/ab/ab866bd39382069418f5c179c1e1ab3e.info differ
diff --git a/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84 b/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84
new file mode 100644
index 0000000000000000000000000000000000000000..7d46d3bdbdb129e95bf81beba2855f3636f4c22c
Binary files /dev/null and b/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84 differ
diff --git a/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84.info b/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84.info
new file mode 100644
index 0000000000000000000000000000000000000000..024d7d57808e7e17b778e011e942aee4c3fe1145
Binary files /dev/null and b/Library/metadata/ab/abdc053b8e3644f299aedc641d609a84.info differ
diff --git a/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429 b/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429
new file mode 100644
index 0000000000000000000000000000000000000000..945f2f7284a37f6d5ffde7e583b65c4909031826
Binary files /dev/null and b/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429 differ
diff --git a/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429.info b/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429.info
new file mode 100644
index 0000000000000000000000000000000000000000..3a84736365c669fb9490009b02d5bb9d64f2ad5f
Binary files /dev/null and b/Library/metadata/ac/ac281230df7b14becb40b3c479f1b429.info differ
diff --git a/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe b/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe
new file mode 100644
index 0000000000000000000000000000000000000000..031f1602fdc021e5de7be92e18721b5fb6f7b6bf
Binary files /dev/null and b/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe differ
diff --git a/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe.info b/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe.info
new file mode 100644
index 0000000000000000000000000000000000000000..5527e62448bd218339317d8b40c9301ee68f8c27
Binary files /dev/null and b/Library/metadata/ac/acc34040a66fe4170bc8885268860cfe.info differ
diff --git a/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa b/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa
new file mode 100644
index 0000000000000000000000000000000000000000..3f65ae9bec010185b7ce0681e6f533f6d99b527e
Binary files /dev/null and b/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa differ
diff --git a/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa.info b/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa.info
new file mode 100644
index 0000000000000000000000000000000000000000..d047f2e5c44461cdc3e45fcd132cd44a4b30c545
Binary files /dev/null and b/Library/metadata/ad/ad48f910d88023649a1807c7bd027afa.info differ
diff --git a/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119 b/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119
new file mode 100644
index 0000000000000000000000000000000000000000..87ad561247f395065a0fc13b9bee1c0d06edc32a
Binary files /dev/null and b/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119 differ
diff --git a/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119.info b/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119.info
new file mode 100644
index 0000000000000000000000000000000000000000..01a0868b88fd367d7d2bc253677e41612877458f
Binary files /dev/null and b/Library/metadata/ad/adee0c1377ef8b2489060e152dd0d119.info differ
diff --git a/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773 b/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773
new file mode 100644
index 0000000000000000000000000000000000000000..07a4d054da3749f91cdf5aea241c56489b405fef
Binary files /dev/null and b/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773 differ
diff --git a/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773.info b/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773.info
new file mode 100644
index 0000000000000000000000000000000000000000..9028788f6b2d233f769003aee808515e12d7eaa5
Binary files /dev/null and b/Library/metadata/ae/ae5439391e8c5c648bdb94f2ef5b3773.info differ
diff --git a/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6 b/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6
new file mode 100644
index 0000000000000000000000000000000000000000..b816309895290629a4985b6ae65f06f76d31995f
Binary files /dev/null and b/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6 differ
diff --git a/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6.info b/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6.info
new file mode 100644
index 0000000000000000000000000000000000000000..2d0cb8b85d0959a5ebdfb210e6cd606c1a75b48d
Binary files /dev/null and b/Library/metadata/ae/ae8388f3c1507554cab2bb7873147eb6.info differ
diff --git a/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb b/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb
new file mode 100644
index 0000000000000000000000000000000000000000..7961c1244bb15bd633168b0edd5f0de14eaa16e4
Binary files /dev/null and b/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb differ
diff --git a/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb.info b/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..abfae55e02357b443d836c46ac32e29f504c4ac4
Binary files /dev/null and b/Library/metadata/af/afc8af15377e8664cb9dd19bdfd842eb.info differ
diff --git a/Library/metadata/af/afd7697844f4142f9aa91471c1fba506 b/Library/metadata/af/afd7697844f4142f9aa91471c1fba506
new file mode 100644
index 0000000000000000000000000000000000000000..e8306a1456f5df6c3a7e7bc0932201a4040da208
Binary files /dev/null and b/Library/metadata/af/afd7697844f4142f9aa91471c1fba506 differ
diff --git a/Library/metadata/af/afd7697844f4142f9aa91471c1fba506.info b/Library/metadata/af/afd7697844f4142f9aa91471c1fba506.info
new file mode 100644
index 0000000000000000000000000000000000000000..b2f76ceb5dd7d4e3f80e18dba450eb82d5a07492
Binary files /dev/null and b/Library/metadata/af/afd7697844f4142f9aa91471c1fba506.info differ
diff --git a/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159 b/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159
new file mode 100644
index 0000000000000000000000000000000000000000..d8e91375c7c178c865868d1859955409eefb7bd8
Binary files /dev/null and b/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159 differ
diff --git a/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159.info b/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a7a3fce232b2f8d084bd6ba488b3d4f605ac9e1
Binary files /dev/null and b/Library/metadata/af/affa80c0b66ae834884a2e9cadb8e159.info differ
diff --git a/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4 b/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4
new file mode 100644
index 0000000000000000000000000000000000000000..21031d36927278303b5e6fd50eb5b0e6c59671f4
Binary files /dev/null and b/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4 differ
diff --git a/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4.info b/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4.info
new file mode 100644
index 0000000000000000000000000000000000000000..929f3156bf84e535041073a14acad2b4aa4d977a
Binary files /dev/null and b/Library/metadata/b0/b025f6f8a47be46418bcb0ed1050cfb4.info differ
diff --git a/Library/metadata/b0/b046bc046be987c459a7c7ec08590836 b/Library/metadata/b0/b046bc046be987c459a7c7ec08590836
new file mode 100644
index 0000000000000000000000000000000000000000..2e334fe15d822a98bb4172b19f7378caf565dcf2
Binary files /dev/null and b/Library/metadata/b0/b046bc046be987c459a7c7ec08590836 differ
diff --git a/Library/metadata/b0/b046bc046be987c459a7c7ec08590836.info b/Library/metadata/b0/b046bc046be987c459a7c7ec08590836.info
new file mode 100644
index 0000000000000000000000000000000000000000..8fc9ffe7cfcb082faf54be14d453fc6c5e1f4926
Binary files /dev/null and b/Library/metadata/b0/b046bc046be987c459a7c7ec08590836.info differ
diff --git a/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1 b/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1
new file mode 100644
index 0000000000000000000000000000000000000000..9293192b05ee606454aaee4a9eed7f9143b00ac1
Binary files /dev/null and b/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1 differ
diff --git a/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1.info b/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1.info
new file mode 100644
index 0000000000000000000000000000000000000000..e357afd892b37d9e84883825c799f60c4fa56b50
Binary files /dev/null and b/Library/metadata/b0/b09be1f217d34247af54863a2f5587e1.info differ
diff --git a/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8 b/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8
new file mode 100644
index 0000000000000000000000000000000000000000..3b6b867367b3780ec78fabac9e0bb1f5e3c0fdbb
Binary files /dev/null and b/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8 differ
diff --git a/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8.info b/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8.info
new file mode 100644
index 0000000000000000000000000000000000000000..0691bcb1e64eccdc48aebde51b143233ca1c4018
Binary files /dev/null and b/Library/metadata/b0/b0bb2afc5cd494e6f9b44455a0fc22f8.info differ
diff --git a/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30 b/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30
new file mode 100644
index 0000000000000000000000000000000000000000..836660d3df4fbf3b79ab919fd12b394c90ab2614
Binary files /dev/null and b/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30 differ
diff --git a/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30.info b/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30.info
new file mode 100644
index 0000000000000000000000000000000000000000..6c6dc53658623994f4a27ed2d3056905ff059ed0
Binary files /dev/null and b/Library/metadata/b0/b0c12f0066bd444a1b3a900679169f30.info differ
diff --git a/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552 b/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552
new file mode 100644
index 0000000000000000000000000000000000000000..0de7761a3f0d99875c58e46033e884edce4703d4
Binary files /dev/null and b/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552 differ
diff --git a/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552.info b/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552.info
new file mode 100644
index 0000000000000000000000000000000000000000..2a6db5a38fa915a484accc46e43b5255eb2cff94
Binary files /dev/null and b/Library/metadata/b1/b1b63463cac1fab48aa45a0c517e6552.info differ
diff --git a/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143 b/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143
new file mode 100644
index 0000000000000000000000000000000000000000..af97a6a7c885978990f81327312ed5f80c67812e
Binary files /dev/null and b/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143 differ
diff --git a/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143.info b/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143.info
new file mode 100644
index 0000000000000000000000000000000000000000..6615033e3e108ee4f4aa6b443ddd1ceb25cc525e
Binary files /dev/null and b/Library/metadata/b1/b1dfb2444315bc149b99779c55c61143.info differ
diff --git a/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4 b/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4
new file mode 100644
index 0000000000000000000000000000000000000000..8c99b84f2d3f3341f5d7e2377f2539daff880f37
Binary files /dev/null and b/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4 differ
diff --git a/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4.info b/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4.info
new file mode 100644
index 0000000000000000000000000000000000000000..c7faea27c9b78479f85b9f9097053f05a0d0fa24
Binary files /dev/null and b/Library/metadata/b2/b219c86ce508e478367c0a46e1aa9fe4.info differ
diff --git a/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2 b/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2
new file mode 100644
index 0000000000000000000000000000000000000000..36aebf44f833da4556af4515596d6b6e8d369aee
Binary files /dev/null and b/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2 differ
diff --git a/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2.info b/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2.info
new file mode 100644
index 0000000000000000000000000000000000000000..b65d8b4ec03fdf1505cbda9fc6531ddc8e17e8f1
Binary files /dev/null and b/Library/metadata/b2/b274f3d1ea05d4bd8a13f4556f7797d2.info differ
diff --git a/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e b/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e
new file mode 100644
index 0000000000000000000000000000000000000000..66285a78b754d6abacfb4adc18a94c8c127ce4a2
Binary files /dev/null and b/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e differ
diff --git a/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e.info b/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e.info
new file mode 100644
index 0000000000000000000000000000000000000000..d172e8471d570f15fd1b2f1530754b202f9e76ba
Binary files /dev/null and b/Library/metadata/b2/b2b693dffac3a4433b3114fea0b7fd4e.info differ
diff --git a/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11 b/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11
new file mode 100644
index 0000000000000000000000000000000000000000..3771ab166d60f91712b015a01251e5999476393b
Binary files /dev/null and b/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11 differ
diff --git a/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11.info b/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11.info
new file mode 100644
index 0000000000000000000000000000000000000000..8415f44c5b9bba1f253e5273c3382f398ec023f3
Binary files /dev/null and b/Library/metadata/b3/b32abd1c9d73a4cce8389f084ac12b11.info differ
diff --git a/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a b/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a
new file mode 100644
index 0000000000000000000000000000000000000000..77deee0203521b7a82c84af5090d4ef52fbf4b3c
Binary files /dev/null and b/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a differ
diff --git a/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a.info b/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a.info
new file mode 100644
index 0000000000000000000000000000000000000000..dfc5b3426ca771115391c92a63ad1aa5a97d99b7
Binary files /dev/null and b/Library/metadata/b3/b3c6f6ddac6afaa48a878b0a8b4c3d1a.info differ
diff --git a/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931 b/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931
new file mode 100644
index 0000000000000000000000000000000000000000..579ecff079f366fd07cae2d2c95ed599c47f6975
Binary files /dev/null and b/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931 differ
diff --git a/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931.info b/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931.info
new file mode 100644
index 0000000000000000000000000000000000000000..b3ac9071841602831407bc008f0a73b87648759c
Binary files /dev/null and b/Library/metadata/b4/b458b2c7f196bdc4581b2f9fd6a5d931.info differ
diff --git a/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97 b/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97
new file mode 100644
index 0000000000000000000000000000000000000000..e7485bc46f70b992a2712ec924bdf2f1c915c099
Binary files /dev/null and b/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97 differ
diff --git a/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97.info b/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97.info
new file mode 100644
index 0000000000000000000000000000000000000000..e954036c4a01ede5ce6901199652aa631bd106e9
Binary files /dev/null and b/Library/metadata/b5/b51b4ab3df234804d8a2e2516ff34c97.info differ
diff --git a/Library/metadata/b5/b52bde26a83564960bcb90217f72b910 b/Library/metadata/b5/b52bde26a83564960bcb90217f72b910
new file mode 100644
index 0000000000000000000000000000000000000000..2b49c453f12e544f5d2b8ca1ce25299982510724
Binary files /dev/null and b/Library/metadata/b5/b52bde26a83564960bcb90217f72b910 differ
diff --git a/Library/metadata/b5/b52bde26a83564960bcb90217f72b910.info b/Library/metadata/b5/b52bde26a83564960bcb90217f72b910.info
new file mode 100644
index 0000000000000000000000000000000000000000..98ed535640a46e6b936911287e7955126f8c2b35
Binary files /dev/null and b/Library/metadata/b5/b52bde26a83564960bcb90217f72b910.info differ
diff --git a/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029 b/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029
new file mode 100644
index 0000000000000000000000000000000000000000..56b81a14d2c3ec5fa69641b8a1f83e302d18fd91
Binary files /dev/null and b/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029 differ
diff --git a/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029.info b/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029.info
new file mode 100644
index 0000000000000000000000000000000000000000..64eea1c05e87bf0a4faedfd5d531c19c159edd3f
Binary files /dev/null and b/Library/metadata/b5/b52e557db2c2b4eebb10444f1d582029.info differ
diff --git a/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a b/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a
new file mode 100644
index 0000000000000000000000000000000000000000..389f45f12d518f81f33fd5bf570cfe35387049f6
Binary files /dev/null and b/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a differ
diff --git a/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a.info b/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a.info
new file mode 100644
index 0000000000000000000000000000000000000000..e67697e9073ef7f46b8db29fec83ec2566c9ec50
Binary files /dev/null and b/Library/metadata/b5/b5366b8adc0f44b3c9cb261a3f752d7a.info differ
diff --git a/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c b/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c
new file mode 100644
index 0000000000000000000000000000000000000000..ce53b2c24af696caf4919d91f3e74532222a7391
Binary files /dev/null and b/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c differ
diff --git a/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c.info b/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c.info
new file mode 100644
index 0000000000000000000000000000000000000000..389834eaad5331d04393c51659dd2e93c7c63f15
Binary files /dev/null and b/Library/metadata/b5/b5d6c28ed7b94775be9e2560f300247c.info differ
diff --git a/Library/metadata/b5/b5da970776034f77a070d99423d68791 b/Library/metadata/b5/b5da970776034f77a070d99423d68791
new file mode 100644
index 0000000000000000000000000000000000000000..989f47a112876f496d31db9d4a2a59c2c814e160
Binary files /dev/null and b/Library/metadata/b5/b5da970776034f77a070d99423d68791 differ
diff --git a/Library/metadata/b5/b5da970776034f77a070d99423d68791.info b/Library/metadata/b5/b5da970776034f77a070d99423d68791.info
new file mode 100644
index 0000000000000000000000000000000000000000..eab10b5f81c23e34a57c94b7cb45c19b8bf1a3e8
Binary files /dev/null and b/Library/metadata/b5/b5da970776034f77a070d99423d68791.info differ
diff --git a/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59 b/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59
new file mode 100644
index 0000000000000000000000000000000000000000..e9563a12e98e1f9d5c5f3d2910cc44be2d56aaca
Binary files /dev/null and b/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59 differ
diff --git a/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59.info b/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59.info
new file mode 100644
index 0000000000000000000000000000000000000000..2964e985f9bcfec941a5b37b8ac621b312a6baa8
Binary files /dev/null and b/Library/metadata/b5/b5f4343795a0e4626ac1fe4a9e6fce59.info differ
diff --git a/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08 b/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08
new file mode 100644
index 0000000000000000000000000000000000000000..d4de0d58b202061ef3314b7c7a87bea44ee32265
Binary files /dev/null and b/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08 differ
diff --git a/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08.info b/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08.info
new file mode 100644
index 0000000000000000000000000000000000000000..3c3951bf1c469d01c4b16db3b78fec8c04133bba
Binary files /dev/null and b/Library/metadata/b6/b6c7db7dacd591844967b34bde3b0d08.info differ
diff --git a/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194 b/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194
new file mode 100644
index 0000000000000000000000000000000000000000..4031bb5816da52ce2b4e2886c8fcc17aade8cf26
Binary files /dev/null and b/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194 differ
diff --git a/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194.info b/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194.info
new file mode 100644
index 0000000000000000000000000000000000000000..4f2db6bffb760c9a7569eb6e935fffee58aa1192
Binary files /dev/null and b/Library/metadata/b6/b6d1682724bab428496b2bd2d8c7b194.info differ
diff --git a/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f b/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f
new file mode 100644
index 0000000000000000000000000000000000000000..92bde973e090077122f8806595bb88a087389d55
Binary files /dev/null and b/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f differ
diff --git a/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f.info b/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f.info
new file mode 100644
index 0000000000000000000000000000000000000000..ee3b99c4c89248dfa2fe818f684c0c9153952ba3
Binary files /dev/null and b/Library/metadata/b6/b6e75d7f429a4e7e9e1ffb4f85cff49f.info differ
diff --git a/Library/metadata/b7/b718fab7db531034d9722193ae056486 b/Library/metadata/b7/b718fab7db531034d9722193ae056486
new file mode 100644
index 0000000000000000000000000000000000000000..5a1f98a71c1c511ab27e60f5735d6bb5bc096280
Binary files /dev/null and b/Library/metadata/b7/b718fab7db531034d9722193ae056486 differ
diff --git a/Library/metadata/b7/b718fab7db531034d9722193ae056486.info b/Library/metadata/b7/b718fab7db531034d9722193ae056486.info
new file mode 100644
index 0000000000000000000000000000000000000000..75cb2d4874cf5dd28d3061278b104c6f84f03711
Binary files /dev/null and b/Library/metadata/b7/b718fab7db531034d9722193ae056486.info differ
diff --git a/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037 b/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037
new file mode 100644
index 0000000000000000000000000000000000000000..55a63e701a1485ba6478481fbf7ada28c057ddc7
Binary files /dev/null and b/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037 differ
diff --git a/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037.info b/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037.info
new file mode 100644
index 0000000000000000000000000000000000000000..357cb88345427e94c9fa6f879add73d0f0bf8459
Binary files /dev/null and b/Library/metadata/b7/b77b1ad9c05af0412725856c6c53b037.info differ
diff --git a/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c b/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c
new file mode 100644
index 0000000000000000000000000000000000000000..e3acb3dac90f514c54a78ef000907ad02e3bf4d8
Binary files /dev/null and b/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c differ
diff --git a/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c.info b/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c.info
new file mode 100644
index 0000000000000000000000000000000000000000..4ec5898af3da24d9b58289a8e001385c2ae21244
Binary files /dev/null and b/Library/metadata/b7/b7914b9393ade4048a9e495eff52019c.info differ
diff --git a/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931 b/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931
new file mode 100644
index 0000000000000000000000000000000000000000..893f45936e879a7cef686f90681206fd0b9aa818
Binary files /dev/null and b/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931 differ
diff --git a/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931.info b/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931.info
new file mode 100644
index 0000000000000000000000000000000000000000..c10435a645db74d5488daf903d91834b138bebd2
Binary files /dev/null and b/Library/metadata/b7/b7c10e584b708734ba6141e7d4797931.info differ
diff --git a/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b b/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b
new file mode 100644
index 0000000000000000000000000000000000000000..dac5bd2bb18f4946782d80a139034762856d4885
Binary files /dev/null and b/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b differ
diff --git a/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b.info b/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b.info
new file mode 100644
index 0000000000000000000000000000000000000000..73e4f6d22f5aef43d35833985002d49616e79966
Binary files /dev/null and b/Library/metadata/b7/b7e8a8fb69eacee439474914ea54bf9b.info differ
diff --git a/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81 b/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81
new file mode 100644
index 0000000000000000000000000000000000000000..8b5ac6b7020273d6f5241d68ae1a84603302f7be
Binary files /dev/null and b/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81 differ
diff --git a/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81.info b/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81.info
new file mode 100644
index 0000000000000000000000000000000000000000..7916ac74a513e6ed007efefbcd3d14cab8a45c97
Binary files /dev/null and b/Library/metadata/b8/b83f06ac0c0696e9563230865ca72b81.info differ
diff --git a/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f b/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f
new file mode 100644
index 0000000000000000000000000000000000000000..9d7722c5ba8659c692378813f31f956d84cc13c2
Binary files /dev/null and b/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f differ
diff --git a/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f.info b/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f.info
new file mode 100644
index 0000000000000000000000000000000000000000..ac223d2544815e88af4d3fb978153f716fa8ad7a
Binary files /dev/null and b/Library/metadata/b9/b9374526debed24449d75f8cc6d0103f.info differ
diff --git a/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df b/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df
new file mode 100644
index 0000000000000000000000000000000000000000..fa7b81d7d7a556cb0591698d9da9e63ae723f16f
Binary files /dev/null and b/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df differ
diff --git a/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df.info b/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df.info
new file mode 100644
index 0000000000000000000000000000000000000000..7d67f64fe7e7a6b821cb94905fd5039d88b27e59
Binary files /dev/null and b/Library/metadata/b9/b94eb138c7296bc4095b1c8a472718df.info differ
diff --git a/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a b/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a
new file mode 100644
index 0000000000000000000000000000000000000000..0904e4ca2a3c618fe13ffc84164016e7259b642d
Binary files /dev/null and b/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a differ
diff --git a/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a.info b/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a.info
new file mode 100644
index 0000000000000000000000000000000000000000..34b7f2af95c0a4781435d68b4c7a9e406eaa9458
Binary files /dev/null and b/Library/metadata/b9/b95ab00277ee47c687d710a3bb623d0a.info differ
diff --git a/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6 b/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6
new file mode 100644
index 0000000000000000000000000000000000000000..22c02694f4da25efce5e719d88bfcdb5ec096da0
Binary files /dev/null and b/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6 differ
diff --git a/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6.info b/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6.info
new file mode 100644
index 0000000000000000000000000000000000000000..35f031210331bac9052ac1e6bca9e6c1a8548ad3
Binary files /dev/null and b/Library/metadata/b9/b9f324f08cd904ec986357c98dd9eaa6.info differ
diff --git a/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49 b/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49
new file mode 100644
index 0000000000000000000000000000000000000000..a63109c9b6006f09c1d1f950e3ea945878e15eaa
Binary files /dev/null and b/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49 differ
diff --git a/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49.info b/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49.info
new file mode 100644
index 0000000000000000000000000000000000000000..5f89c87eab90f59a59c9a5806d1b6f41d830c19a
Binary files /dev/null and b/Library/metadata/ba/bab3f3a731c89504391a72bfa7047e49.info differ
diff --git a/Library/metadata/ba/bac185a28e198c1419b649ca946942ea b/Library/metadata/ba/bac185a28e198c1419b649ca946942ea
new file mode 100644
index 0000000000000000000000000000000000000000..46945939b25a93f7b0d65f4d8cfa929d2b2c4fb8
Binary files /dev/null and b/Library/metadata/ba/bac185a28e198c1419b649ca946942ea differ
diff --git a/Library/metadata/ba/bac185a28e198c1419b649ca946942ea.info b/Library/metadata/ba/bac185a28e198c1419b649ca946942ea.info
new file mode 100644
index 0000000000000000000000000000000000000000..19dc1ad17cc4042176ed7d1b7ed3fbd5687fe97f
Binary files /dev/null and b/Library/metadata/ba/bac185a28e198c1419b649ca946942ea.info differ
diff --git a/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984 b/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984
new file mode 100644
index 0000000000000000000000000000000000000000..246704fd09c8808dd3c120bf1536b90e1bb1035d
Binary files /dev/null and b/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984 differ
diff --git a/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984.info b/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984.info
new file mode 100644
index 0000000000000000000000000000000000000000..7fcd260346d0c601e82b3f5e8ad09e49dedbea0c
Binary files /dev/null and b/Library/metadata/bb/bb05cab7d802aa5468f8f2f86840d984.info differ
diff --git a/Library/metadata/bb/bb15697a279504a90b825c44dc355047 b/Library/metadata/bb/bb15697a279504a90b825c44dc355047
new file mode 100644
index 0000000000000000000000000000000000000000..05278dc8e8d6b0d8c364d6e0dea0ac0f97814d30
Binary files /dev/null and b/Library/metadata/bb/bb15697a279504a90b825c44dc355047 differ
diff --git a/Library/metadata/bb/bb15697a279504a90b825c44dc355047.info b/Library/metadata/bb/bb15697a279504a90b825c44dc355047.info
new file mode 100644
index 0000000000000000000000000000000000000000..24631541770ceaf4a37369fb820b447f26060a69
Binary files /dev/null and b/Library/metadata/bb/bb15697a279504a90b825c44dc355047.info differ
diff --git a/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9 b/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a6a826222e5c23026454624296da722ddef63
Binary files /dev/null and b/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9 differ
diff --git a/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9.info b/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9.info
new file mode 100644
index 0000000000000000000000000000000000000000..663cedebb9b238c3556b5d9eb8d73e1f6671eaa4
Binary files /dev/null and b/Library/metadata/bb/bb42b2d967d6427983c901a4ffc8ecd9.info differ
diff --git a/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063 b/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063
new file mode 100644
index 0000000000000000000000000000000000000000..69cb6ebbef6a02ed3c4961c25505224ffa8dc452
Binary files /dev/null and b/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063 differ
diff --git a/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063.info b/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063.info
new file mode 100644
index 0000000000000000000000000000000000000000..31004f06c05c54090beed65b72cc358419230705
Binary files /dev/null and b/Library/metadata/bb/bbec1324b05a54939ad2fea2d7e11063.info differ
diff --git a/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3 b/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3
new file mode 100644
index 0000000000000000000000000000000000000000..b7c6459e4db489ced99e88a1f08c900fb9f5a553
Binary files /dev/null and b/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3 differ
diff --git a/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3.info b/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3.info
new file mode 100644
index 0000000000000000000000000000000000000000..0a147fd8585f6e4f85a409e67708fe26f1363404
Binary files /dev/null and b/Library/metadata/bc/bc00e25696e4132499f56528d3fed2e3.info differ
diff --git a/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f b/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f
new file mode 100644
index 0000000000000000000000000000000000000000..08544a7cbe15a4db7eed274ee04b794fe1ffdd7d
Binary files /dev/null and b/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f differ
diff --git a/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f.info b/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f.info
new file mode 100644
index 0000000000000000000000000000000000000000..0ba64712feb788f6f735fe1c4490115654294d9e
Binary files /dev/null and b/Library/metadata/bc/bc3e4dee19c670e4bac09907f0bea90f.info differ
diff --git a/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792 b/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792
new file mode 100644
index 0000000000000000000000000000000000000000..b4a1e1c8b70e9547e6321f9e7b17d25f0e40803c
Binary files /dev/null and b/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792 differ
diff --git a/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792.info b/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792.info
new file mode 100644
index 0000000000000000000000000000000000000000..c4322a937acfb1f41f41abdde13c746b0a57ca19
Binary files /dev/null and b/Library/metadata/bc/bcd27da1c9ae94d2cafe094482a20792.info differ
diff --git a/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee b/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee
new file mode 100644
index 0000000000000000000000000000000000000000..75add11254f4a59295b25dce220c4095a430a4e8
Binary files /dev/null and b/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee differ
diff --git a/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee.info b/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee.info
new file mode 100644
index 0000000000000000000000000000000000000000..94e04b1930b1815cfb480518027524ecac12c79a
Binary files /dev/null and b/Library/metadata/bd/bd4da6efdd991254eb2f5b7c617878ee.info differ
diff --git a/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3 b/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3
new file mode 100644
index 0000000000000000000000000000000000000000..9f1382d26bce326ebaef8b9e8681c2d9a6a64968
Binary files /dev/null and b/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3 differ
diff --git a/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3.info b/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3.info
new file mode 100644
index 0000000000000000000000000000000000000000..a53e4e51cb78e0f3fe54279163df1a1c715b7e13
Binary files /dev/null and b/Library/metadata/bd/bdf9dacb21a28ce469a968904c80f1b3.info differ
diff --git a/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d b/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d
new file mode 100644
index 0000000000000000000000000000000000000000..340684b33531fffc1669dc9f7611fcac775d6107
Binary files /dev/null and b/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d differ
diff --git a/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d.info b/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d.info
new file mode 100644
index 0000000000000000000000000000000000000000..75986475ab28b008a5823eedf4d37a4cbff4ace2
Binary files /dev/null and b/Library/metadata/be/be48d66c967b0714b9635d4b32f88d7d.info differ
diff --git a/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214 b/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214
new file mode 100644
index 0000000000000000000000000000000000000000..62bedae38fac08716ab7f843cf8a592ea29cf152
Binary files /dev/null and b/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214 differ
diff --git a/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214.info b/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214.info
new file mode 100644
index 0000000000000000000000000000000000000000..5bab1d222917f3e25287c7b3c3368d7642037cab
Binary files /dev/null and b/Library/metadata/be/be4b06d1ee51e4ac2a01a0e499d4c214.info differ
diff --git a/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2 b/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2
new file mode 100644
index 0000000000000000000000000000000000000000..ce89fe37a932ba5de67225d50495429343e61727
Binary files /dev/null and b/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2 differ
diff --git a/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2.info b/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2.info
new file mode 100644
index 0000000000000000000000000000000000000000..9a002066975a4f283e067932cb3a418c7d6b12c5
Binary files /dev/null and b/Library/metadata/be/be9537cf7bafd0b42b1c0ca8af1920c2.info differ
diff --git a/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f b/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f
new file mode 100644
index 0000000000000000000000000000000000000000..1157fdce309a72644b8f35a4ff86859e2ad60fee
Binary files /dev/null and b/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f differ
diff --git a/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f.info b/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f.info
new file mode 100644
index 0000000000000000000000000000000000000000..3868b6e5ca0fd5e3d9221d6971dcd8302a1e2d77
Binary files /dev/null and b/Library/metadata/be/bec366c396bdcb94db53194db2fbfc3f.info differ
diff --git a/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d b/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d
new file mode 100644
index 0000000000000000000000000000000000000000..fd14bbf71212ebc6103a9effdc3d40c08eac7765
Binary files /dev/null and b/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d differ
diff --git a/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d.info b/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d.info
new file mode 100644
index 0000000000000000000000000000000000000000..40b5c1bbef779a13204cc4b208e7c8d17f6e6643
Binary files /dev/null and b/Library/metadata/bf/bfd567a3d1631a761bca9e99fa53d86d.info differ
diff --git a/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c b/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c
new file mode 100644
index 0000000000000000000000000000000000000000..4ed59dd1c69c6765a8577567ac79d853eedbe36a
Binary files /dev/null and b/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c differ
diff --git a/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c.info b/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c.info
new file mode 100644
index 0000000000000000000000000000000000000000..4e43ed428739c906825f27ff931f965259743fa0
Binary files /dev/null and b/Library/metadata/bf/bfd715cd54ab84c22b128149c12b516c.info differ
diff --git a/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb b/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb
new file mode 100644
index 0000000000000000000000000000000000000000..5090a7a1b41cdfb100af46d22b900408d7370d77
Binary files /dev/null and b/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb differ
diff --git a/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb.info b/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb.info
new file mode 100644
index 0000000000000000000000000000000000000000..9e71e6542acf8c472e3fa637ec6e15ffccbeecb4
Binary files /dev/null and b/Library/metadata/bf/bfe1d044851deb747aa0c65a22d7b7cb.info differ
diff --git a/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b b/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b
new file mode 100644
index 0000000000000000000000000000000000000000..4abaab80a19ac653bbbd3804684eca8120970193
Binary files /dev/null and b/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b differ
diff --git a/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b.info b/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b.info
new file mode 100644
index 0000000000000000000000000000000000000000..816016db1353b1eb720c64414250fcb3c26a4497
Binary files /dev/null and b/Library/metadata/bf/bff25ea4cf0d3d841b6787b9f649f21b.info differ
diff --git a/Library/metadata/c0/c060426bfd6e82575228df6656368eaa b/Library/metadata/c0/c060426bfd6e82575228df6656368eaa
new file mode 100644
index 0000000000000000000000000000000000000000..22adff366770f44ee18322fd3ba5e5b8ea7210c4
Binary files /dev/null and b/Library/metadata/c0/c060426bfd6e82575228df6656368eaa differ
diff --git a/Library/metadata/c0/c060426bfd6e82575228df6656368eaa.info b/Library/metadata/c0/c060426bfd6e82575228df6656368eaa.info
new file mode 100644
index 0000000000000000000000000000000000000000..7e2f80725d8be26568e8300e2090e2cbcac4964e
Binary files /dev/null and b/Library/metadata/c0/c060426bfd6e82575228df6656368eaa.info differ
diff --git a/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5 b/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5
new file mode 100644
index 0000000000000000000000000000000000000000..ed7e48ac5cd1bd924198907b640c1f350e05126d
Binary files /dev/null and b/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5 differ
diff --git a/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5.info b/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5.info
new file mode 100644
index 0000000000000000000000000000000000000000..bd05669132236cbc38882583391724533eaf76e8
Binary files /dev/null and b/Library/metadata/c0/c09652e660b34484cb10d35ed2206df5.info differ
diff --git a/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52 b/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52
new file mode 100644
index 0000000000000000000000000000000000000000..1e59e44299ee801ee1fa0f828cf473a73b3277cc
Binary files /dev/null and b/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52 differ
diff --git a/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52.info b/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52.info
new file mode 100644
index 0000000000000000000000000000000000000000..df61854de01f70c79e1587fd49229436a84aa2dd
Binary files /dev/null and b/Library/metadata/c0/c0a24bc32a7602840bbcb1b7734c6c52.info differ
diff --git a/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d b/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d
new file mode 100644
index 0000000000000000000000000000000000000000..1d4045d4f2a8303a97f390c3c270d35089b7fa8d
Binary files /dev/null and b/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d differ
diff --git a/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d.info b/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d.info
new file mode 100644
index 0000000000000000000000000000000000000000..fa7ba8c2a890076f7885fd3b1bbf947b6bc63c4d
Binary files /dev/null and b/Library/metadata/c1/c18cb9388313e4287ad5895ee735c47d.info differ
diff --git a/Library/metadata/c2/c20299d491dac3843957e48b30f6a168 b/Library/metadata/c2/c20299d491dac3843957e48b30f6a168
new file mode 100644
index 0000000000000000000000000000000000000000..2d03e7a8dfeabd4b7fb9242ddb8ba05f0a9e7ba3
Binary files /dev/null and b/Library/metadata/c2/c20299d491dac3843957e48b30f6a168 differ
diff --git a/Library/metadata/c2/c20299d491dac3843957e48b30f6a168.info b/Library/metadata/c2/c20299d491dac3843957e48b30f6a168.info
new file mode 100644
index 0000000000000000000000000000000000000000..991bdc32d453b8534b8b6bf030ba836a129bbbbf
Binary files /dev/null and b/Library/metadata/c2/c20299d491dac3843957e48b30f6a168.info differ
diff --git a/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2 b/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2
new file mode 100644
index 0000000000000000000000000000000000000000..21800c7f635d09b8f3b72d9b783071c0d2321daf
Binary files /dev/null and b/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2 differ
diff --git a/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2.info b/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2.info
new file mode 100644
index 0000000000000000000000000000000000000000..ef4c45e7e43f4a84b407ec8b880342ca1cd4a94b
Binary files /dev/null and b/Library/metadata/c2/c232a0216066df34cb5ee1b14c5ef2a2.info differ
diff --git a/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569 b/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569
new file mode 100644
index 0000000000000000000000000000000000000000..e9e75408af1a0c62c2177c2582fa3a551694cedb
Binary files /dev/null and b/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569 differ
diff --git a/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569.info b/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569.info
new file mode 100644
index 0000000000000000000000000000000000000000..70b4301d91494567ccdffe8b8b2bc580b795ebee
Binary files /dev/null and b/Library/metadata/c2/c2b1ba894439f774193d0b1682be7569.info differ
diff --git a/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c b/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c
new file mode 100644
index 0000000000000000000000000000000000000000..f2de4f8a473de74ececf95f1478c0de4be6a0979
Binary files /dev/null and b/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c differ
diff --git a/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c.info b/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c.info
new file mode 100644
index 0000000000000000000000000000000000000000..7c08a9f616b01e6a3bef6a9df5dc7d224eb84f88
Binary files /dev/null and b/Library/metadata/c2/c2f7f6a88b4c4f20a53deb72f3d9144c.info differ
diff --git a/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db b/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db
new file mode 100644
index 0000000000000000000000000000000000000000..386aaa655233d3cfa2ded07520f2c426cfe501b3
Binary files /dev/null and b/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db differ
diff --git a/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db.info b/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db.info
new file mode 100644
index 0000000000000000000000000000000000000000..0fbfaab025d2dbbfdc8e508f1d9f533cd53eeab4
Binary files /dev/null and b/Library/metadata/c4/c4777500b5da6094e956c3d4f04de4db.info differ
diff --git a/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466 b/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466
new file mode 100644
index 0000000000000000000000000000000000000000..276e35959379a198450f48f70c01e12ce3628d05
Binary files /dev/null and b/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466 differ
diff --git a/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466.info b/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466.info
new file mode 100644
index 0000000000000000000000000000000000000000..36e15cbb267e2a938a8f5a68458f680d29913687
Binary files /dev/null and b/Library/metadata/c4/c4895692e9cf23f4bb3a7616ad968466.info differ
diff --git a/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36 b/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36
new file mode 100644
index 0000000000000000000000000000000000000000..d4c14c5c8e156effd4addea9ca62fe9e58490ef0
Binary files /dev/null and b/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36 differ
diff --git a/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36.info b/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36.info
new file mode 100644
index 0000000000000000000000000000000000000000..96c7abf30c06109f0aa03603f349ca878a8d2907
Binary files /dev/null and b/Library/metadata/c4/c4c1445ee948a4124bfa9fb818a17e36.info differ
diff --git a/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73 b/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73
new file mode 100644
index 0000000000000000000000000000000000000000..9f14ad494b2aed50abea888f869bd64d4a48bc41
Binary files /dev/null and b/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73 differ
diff --git a/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73.info b/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73.info
new file mode 100644
index 0000000000000000000000000000000000000000..21366871ff05b31aacdc7a76c0c7ecc5c5aa4034
Binary files /dev/null and b/Library/metadata/c4/c4df1124e2787ee0c8d1a911de17ee73.info differ
diff --git a/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6 b/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6
new file mode 100644
index 0000000000000000000000000000000000000000..77e1b6716d360746a7c4faeb50f3d48575c3fc66
Binary files /dev/null and b/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6 differ
diff --git a/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6.info b/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6.info
new file mode 100644
index 0000000000000000000000000000000000000000..8c2579b05a3a4aac9d6367fbbc6e1944326a4cf8
Binary files /dev/null and b/Library/metadata/c5/c5171a7976b3acf4aaf43335af2563d6.info differ
diff --git a/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b b/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b
new file mode 100644
index 0000000000000000000000000000000000000000..25058b27078de27c345da6a999844f6ca5e4b503
Binary files /dev/null and b/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b differ
diff --git a/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b.info b/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b.info
new file mode 100644
index 0000000000000000000000000000000000000000..f059ac953441254b232381c078be77e47adb8dbf
Binary files /dev/null and b/Library/metadata/c5/c522a644a29fcab2eaf63298c118a65b.info differ
diff --git a/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04 b/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04
new file mode 100644
index 0000000000000000000000000000000000000000..ae8139be5e43bd95460d3bb5a49b01173ac8dbc7
Binary files /dev/null and b/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04 differ
diff --git a/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04.info b/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04.info
new file mode 100644
index 0000000000000000000000000000000000000000..df6371fbdf21eb56e889dbd0132eef8022308087
Binary files /dev/null and b/Library/metadata/c5/c55a64c7570474f47a94abe39ebfef04.info differ
diff --git a/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482 b/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482
new file mode 100644
index 0000000000000000000000000000000000000000..8ea2821bfafda71f7ea3c07d4703281c91d81954
Binary files /dev/null and b/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482 differ
diff --git a/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482.info b/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482.info
new file mode 100644
index 0000000000000000000000000000000000000000..644e3abbe19a60f59dfe5c94513dbbdbcc58e79e
Binary files /dev/null and b/Library/metadata/c5/c5ba7626a737840ff88a3bd84b100482.info differ
diff --git a/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8 b/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8
new file mode 100644
index 0000000000000000000000000000000000000000..0a0704e964f8c40dc45cd57596e1f76f2a543d5f
Binary files /dev/null and b/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8 differ
diff --git a/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8.info b/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8.info
new file mode 100644
index 0000000000000000000000000000000000000000..ae47c17dc27061f69fef0f88f1795291e9bac167
Binary files /dev/null and b/Library/metadata/c6/c68ba5b432ef64e67ae0bf74960908a8.info differ
diff --git a/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27 b/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27
new file mode 100644
index 0000000000000000000000000000000000000000..e1daaba65271cef38936e38ff41d75bff7b8cd95
Binary files /dev/null and b/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27 differ
diff --git a/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27.info b/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27.info
new file mode 100644
index 0000000000000000000000000000000000000000..70766ecdc3d79202dc2755dadc41a221c817c97c
Binary files /dev/null and b/Library/metadata/c6/c6b217bd11a4aac4fad5d94d637cbd27.info differ
diff --git a/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5 b/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5
new file mode 100644
index 0000000000000000000000000000000000000000..533fc89a1b0b769e559da9bf0727f6794a5cbc94
Binary files /dev/null and b/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5 differ
diff --git a/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5.info b/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5.info
new file mode 100644
index 0000000000000000000000000000000000000000..ede4e66650849ff82f5f3b3dfdf1f27fea9315c0
Binary files /dev/null and b/Library/metadata/c7/c754112a02f354a6696fa4f2b99e95a5.info differ
diff --git a/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5 b/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5
new file mode 100644
index 0000000000000000000000000000000000000000..3e871fe564de521af13843951dca8cac518ebadd
Binary files /dev/null and b/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5 differ
diff --git a/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5.info b/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5.info
new file mode 100644
index 0000000000000000000000000000000000000000..44da15a9314198144affca88d3a96c526aed1075
Binary files /dev/null and b/Library/metadata/c7/c7559cdbc33f04af1a5a42d2aa5b40a5.info differ
diff --git a/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b b/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b
new file mode 100644
index 0000000000000000000000000000000000000000..aba2d235d508392356dda4d3d6da928c9fb33c35
Binary files /dev/null and b/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b differ
diff --git a/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b.info b/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b.info
new file mode 100644
index 0000000000000000000000000000000000000000..16a41feda7ec3b47f147c467166ed6f88c226d1b
Binary files /dev/null and b/Library/metadata/c7/c76700ea0062413d9f69409b4e9e151b.info differ
diff --git a/Library/metadata/c7/c786248494be6489bbfa006bdf59c773 b/Library/metadata/c7/c786248494be6489bbfa006bdf59c773
new file mode 100644
index 0000000000000000000000000000000000000000..f867570316b4a5dd6981ee7ec656b1de8a7bc055
Binary files /dev/null and b/Library/metadata/c7/c786248494be6489bbfa006bdf59c773 differ
diff --git a/Library/metadata/c7/c786248494be6489bbfa006bdf59c773.info b/Library/metadata/c7/c786248494be6489bbfa006bdf59c773.info
new file mode 100644
index 0000000000000000000000000000000000000000..02ca40ca80b5322ae1acfe7e0a0be2aaa7b1ac72
Binary files /dev/null and b/Library/metadata/c7/c786248494be6489bbfa006bdf59c773.info differ
diff --git a/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f b/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f
new file mode 100644
index 0000000000000000000000000000000000000000..e7bda20a4cbc97eb33cc04357ab02c78f5a7d16d
Binary files /dev/null and b/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f differ
diff --git a/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f.info b/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f.info
new file mode 100644
index 0000000000000000000000000000000000000000..951c4305407ef966f0ae3e1810ef93f7200d0017
Binary files /dev/null and b/Library/metadata/c7/c7ce3cd873dbe3244b5ee01ecb73658f.info differ
diff --git a/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b b/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b
new file mode 100644
index 0000000000000000000000000000000000000000..6723b10e18c2d32e14a89f8cc3ef4de847bda0fb
Binary files /dev/null and b/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b differ
diff --git a/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b.info b/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b.info
new file mode 100644
index 0000000000000000000000000000000000000000..1220a64016c0f37b387cf6f9fc0521366f0f22a9
Binary files /dev/null and b/Library/metadata/c8/c81e82837b7f52f4e81a3d4f831e334b.info differ
diff --git a/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6 b/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6
new file mode 100644
index 0000000000000000000000000000000000000000..dad12e7ebc2a45bcc4d871654c6a72e8480f3d10
Binary files /dev/null and b/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6 differ
diff --git a/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6.info b/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6.info
new file mode 100644
index 0000000000000000000000000000000000000000..0433d403c4c6d7271bf94622f8ed36d1c4d1d9c1
Binary files /dev/null and b/Library/metadata/c8/c86ce4cf34c23ed40b5d66031ee7e7c6.info differ
diff --git a/Library/metadata/c8/c87efcf4926654c46a58be747da2f490 b/Library/metadata/c8/c87efcf4926654c46a58be747da2f490
new file mode 100644
index 0000000000000000000000000000000000000000..a3aad21dbbe935ec3c3c35f57a81c6486f1abe40
Binary files /dev/null and b/Library/metadata/c8/c87efcf4926654c46a58be747da2f490 differ
diff --git a/Library/metadata/c8/c87efcf4926654c46a58be747da2f490.info b/Library/metadata/c8/c87efcf4926654c46a58be747da2f490.info
new file mode 100644
index 0000000000000000000000000000000000000000..95ceaa79f1d6e160b6d41d022ff9a536af660456
Binary files /dev/null and b/Library/metadata/c8/c87efcf4926654c46a58be747da2f490.info differ
diff --git a/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066 b/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066
new file mode 100644
index 0000000000000000000000000000000000000000..326e8dc6de85355b391ba011d26851506137884c
Binary files /dev/null and b/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066 differ
diff --git a/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066.info b/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066.info
new file mode 100644
index 0000000000000000000000000000000000000000..b150b2cd20cff8e3a1adaf66f1c8177b5fade62b
Binary files /dev/null and b/Library/metadata/c8/c8f94a8bc382c454dbcbcc6459e38066.info differ
diff --git a/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117 b/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117
new file mode 100644
index 0000000000000000000000000000000000000000..23db2ec84e3df3278a35188cf081caa50572a76c
Binary files /dev/null and b/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117 differ
diff --git a/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117.info b/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117.info
new file mode 100644
index 0000000000000000000000000000000000000000..e0bb10e7b167b116473bba23341320761bf9f8f5
Binary files /dev/null and b/Library/metadata/c9/c99bfe4fc4e5c4dc3917c14075acd117.info differ
diff --git a/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb b/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb
new file mode 100644
index 0000000000000000000000000000000000000000..24235808e968bef9da2cbfefd39eb7054881abea
Binary files /dev/null and b/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb differ
diff --git a/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb.info b/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb.info
new file mode 100644
index 0000000000000000000000000000000000000000..32d81c8b435d5e54465dd0cbe45d91066a4fb053
Binary files /dev/null and b/Library/metadata/ca/ca51b19024094d1b87f3e07edb0a75fb.info differ
diff --git a/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c b/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c
new file mode 100644
index 0000000000000000000000000000000000000000..b2514afdfee586fad80582bcd46c6ed7874735bc
Binary files /dev/null and b/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c differ
diff --git a/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c.info b/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c.info
new file mode 100644
index 0000000000000000000000000000000000000000..6aea8e4302489c0c094839efb126379349139178
Binary files /dev/null and b/Library/metadata/ca/ca53a6f1e29564d528bb56b92e0f181c.info differ
diff --git a/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e b/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e
new file mode 100644
index 0000000000000000000000000000000000000000..29335f03143c3d85ac4637962e8fd482b2802360
Binary files /dev/null and b/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e differ
diff --git a/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e.info b/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e.info
new file mode 100644
index 0000000000000000000000000000000000000000..ca25ca1e7a44eb89e82d0a455fcee7480412a39b
Binary files /dev/null and b/Library/metadata/ca/ca819640f53b48919bf7774744f7f15e.info differ
diff --git a/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970 b/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970
new file mode 100644
index 0000000000000000000000000000000000000000..bad6ba6e7a54be23d8e1cc3b2dc22d7fed886a5e
Binary files /dev/null and b/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970 differ
diff --git a/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970.info b/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970.info
new file mode 100644
index 0000000000000000000000000000000000000000..ffca3d55af42a67d72a54768c598c9b87306b7f1
Binary files /dev/null and b/Library/metadata/ca/cabaa672b0e3ee91fa7b6da4daab7970.info differ
diff --git a/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08 b/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08
new file mode 100644
index 0000000000000000000000000000000000000000..861dc78977b27cc1555d03003357862c46166f99
Binary files /dev/null and b/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08 differ
diff --git a/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08.info b/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08.info
new file mode 100644
index 0000000000000000000000000000000000000000..beca7c42a63e7ef33f8bbfb588ec78083fefe99f
Binary files /dev/null and b/Library/metadata/ca/cada42fdc2e85784c9bec9d2ade99f08.info differ
diff --git a/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136 b/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136
new file mode 100644
index 0000000000000000000000000000000000000000..2f857388d0bbba7da02431458e6e33334f493e63
Binary files /dev/null and b/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136 differ
diff --git a/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136.info b/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136.info
new file mode 100644
index 0000000000000000000000000000000000000000..b493766a0d729d078f7434f8530d6cf72305d5bf
Binary files /dev/null and b/Library/metadata/cc/cc1b50b5501f748da8bec762294d9136.info differ
diff --git a/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7 b/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7
new file mode 100644
index 0000000000000000000000000000000000000000..4f44c1d16f0b35f6729ae60b7c18b76b5ca55534
Binary files /dev/null and b/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7 differ
diff --git a/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7.info b/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7.info
new file mode 100644
index 0000000000000000000000000000000000000000..84b9ed591375288469f3a0916235754223fb4869
Binary files /dev/null and b/Library/metadata/cc/cc7d99abc3ec09644a143fb9185eb2d7.info differ
diff --git a/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64 b/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64
new file mode 100644
index 0000000000000000000000000000000000000000..641dceaf3390340381fec114609e32e902cfe6b7
Binary files /dev/null and b/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64 differ
diff --git a/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64.info b/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64.info
new file mode 100644
index 0000000000000000000000000000000000000000..83c6320ae619eb528a510a4b16816fa3884d1355
Binary files /dev/null and b/Library/metadata/cc/ccaa4a21cc66f704db378129926aeb64.info differ
diff --git a/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b b/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b
new file mode 100644
index 0000000000000000000000000000000000000000..ccb3de523f3916b63355baa5514d042f8f7b64aa
Binary files /dev/null and b/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b differ
diff --git a/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b.info b/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b.info
new file mode 100644
index 0000000000000000000000000000000000000000..2fe59707a2d43cdb03677626c6b5310e202dd134
Binary files /dev/null and b/Library/metadata/cc/ccf05e44e581645448f76c9885ad303b.info differ
diff --git a/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7 b/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7
new file mode 100644
index 0000000000000000000000000000000000000000..0509f71fe062a7489c134df55d0aab7398e7e637
Binary files /dev/null and b/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7 differ
diff --git a/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7.info b/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7.info
new file mode 100644
index 0000000000000000000000000000000000000000..77461d49c0cc2ea29cc1a40adb28666d123d5068
Binary files /dev/null and b/Library/metadata/cc/ccf4fbf70ed379f4d95d4818aa3154c7.info differ
diff --git a/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62 b/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62
new file mode 100644
index 0000000000000000000000000000000000000000..fa5d8b92ecea08688f964d72cf6a5ab981c62457
Binary files /dev/null and b/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62 differ
diff --git a/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62.info b/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62.info
new file mode 100644
index 0000000000000000000000000000000000000000..46725f90d09f5b071ab498e5fe8e7a3eb6018432
Binary files /dev/null and b/Library/metadata/cd/cd32ad063d2797f49b3e1fca9f474a62.info differ
diff --git a/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180 b/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180
new file mode 100644
index 0000000000000000000000000000000000000000..a305fd813b672c0e93decc649eac5aec58a80d4d
Binary files /dev/null and b/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180 differ
diff --git a/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180.info b/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180.info
new file mode 100644
index 0000000000000000000000000000000000000000..ce898e66dd8088470d4ccfa574ba9b4cb83a7054
Binary files /dev/null and b/Library/metadata/cd/cd44c1bc0fa624a39aa784af44c62180.info differ
diff --git a/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892 b/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892
new file mode 100644
index 0000000000000000000000000000000000000000..803e11cb77a454ec1f7ba29e3b89ea0f9713350e
Binary files /dev/null and b/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892 differ
diff --git a/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892.info b/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892.info
new file mode 100644
index 0000000000000000000000000000000000000000..b664f376075e1e23666328081bb94497159b3e70
Binary files /dev/null and b/Library/metadata/ce/ce4395ccdb12cf62fca756358be1a892.info differ
diff --git a/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a b/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a
new file mode 100644
index 0000000000000000000000000000000000000000..b53a8f883d6e194475fd760b97a6492639c1e053
Binary files /dev/null and b/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a differ
diff --git a/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a.info b/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a.info
new file mode 100644
index 0000000000000000000000000000000000000000..a255a8243f1291369065ee33ac7cafcf2a46bb2c
Binary files /dev/null and b/Library/metadata/ce/ce4ec0f498d1b1a4f90fe94e115b6f9a.info differ
diff --git a/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901 b/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901
new file mode 100644
index 0000000000000000000000000000000000000000..524af0ce3677c5ba388ff3376af7d67e30fe3487
Binary files /dev/null and b/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901 differ
diff --git a/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901.info b/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901.info
new file mode 100644
index 0000000000000000000000000000000000000000..87f4efe3cefdcf5b24b5dbaeef232bc476b783a9
Binary files /dev/null and b/Library/metadata/ce/ce4ff17ca867d2b48b5c8a4181611901.info differ
diff --git a/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c b/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c
new file mode 100644
index 0000000000000000000000000000000000000000..4601fd7560c03b3b5c7fb9190288d7dfd82cdcbe
Binary files /dev/null and b/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c differ
diff --git a/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c.info b/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c.info
new file mode 100644
index 0000000000000000000000000000000000000000..24fcfc04efadf10f1a838b2380eca3847442e771
Binary files /dev/null and b/Library/metadata/ce/ce6108d20abb59c4592721a1f858c26c.info differ
diff --git a/Library/metadata/ce/cef9a845527863546b1318d1681f1545 b/Library/metadata/ce/cef9a845527863546b1318d1681f1545
new file mode 100644
index 0000000000000000000000000000000000000000..175f8e9364372b1db389f66fb9617edb1b21a80a
Binary files /dev/null and b/Library/metadata/ce/cef9a845527863546b1318d1681f1545 differ
diff --git a/Library/metadata/ce/cef9a845527863546b1318d1681f1545.info b/Library/metadata/ce/cef9a845527863546b1318d1681f1545.info
new file mode 100644
index 0000000000000000000000000000000000000000..1cfb6c6daac414c7bc0f94977d66628cabb845e5
Binary files /dev/null and b/Library/metadata/ce/cef9a845527863546b1318d1681f1545.info differ
diff --git a/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333 b/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333
new file mode 100644
index 0000000000000000000000000000000000000000..9f3009b7a522f9713fc963b0e2895c3dcb89571f
Binary files /dev/null and b/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333 differ
diff --git a/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333.info b/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333.info
new file mode 100644
index 0000000000000000000000000000000000000000..281ec90199e7b35c242dee5d27bf61ca893b764c
Binary files /dev/null and b/Library/metadata/cf/cf1fe50a641faac4691bf49eb32ce333.info differ
diff --git a/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4 b/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4
new file mode 100644
index 0000000000000000000000000000000000000000..2dea19a02a2112dee8b77c3332a0a5e35f67c6b1
Binary files /dev/null and b/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4 differ
diff --git a/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4.info b/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4.info
new file mode 100644
index 0000000000000000000000000000000000000000..f4e894cb876ef3f993accbcfcf0aa395f45a87f9
Binary files /dev/null and b/Library/metadata/cf/cf6aca931950a4a6a886e214e9e649c4.info differ
diff --git a/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4 b/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4
new file mode 100644
index 0000000000000000000000000000000000000000..9b73b875b99ea875511485fb0665b42bea16d7f7
Binary files /dev/null and b/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4 differ
diff --git a/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4.info b/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4.info
new file mode 100644
index 0000000000000000000000000000000000000000..60889719c7af3b5ad3d44c5cac7eadedf3941eb4
Binary files /dev/null and b/Library/metadata/cf/cfb1e146a78b1f14ca7aba9b799692f4.info differ
diff --git a/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c b/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c
new file mode 100644
index 0000000000000000000000000000000000000000..cb48730a436245a08498e4f3cbcefd6f25b436aa
Binary files /dev/null and b/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c differ
diff --git a/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c.info b/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c.info
new file mode 100644
index 0000000000000000000000000000000000000000..9a71af5f5e89f968ed4673716f450d295c956fc2
Binary files /dev/null and b/Library/metadata/d0/d028fbbad11524d13a069f495ddcf01c.info differ
diff --git a/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a b/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a
new file mode 100644
index 0000000000000000000000000000000000000000..ed3cc971e418402a7791d2a00f1ad3bc90440d1e
Binary files /dev/null and b/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a differ
diff --git a/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a.info b/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a.info
new file mode 100644
index 0000000000000000000000000000000000000000..bd700f07bd44b22075fcd2d8a6ec3dd04a531c18
Binary files /dev/null and b/Library/metadata/d0/d0e3ad91972c66f5238f5b9b7d5ae58a.info differ
diff --git a/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c b/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c
new file mode 100644
index 0000000000000000000000000000000000000000..c24ac13c033a97ac776205c6652b88db54a5149d
Binary files /dev/null and b/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c differ
diff --git a/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c.info b/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c.info
new file mode 100644
index 0000000000000000000000000000000000000000..bb6e53bd2957e7c43d2d609316f5b599aa52da24
Binary files /dev/null and b/Library/metadata/d1/d1114812d620342e1a4ad3eaae7e220c.info differ
diff --git a/Library/metadata/d1/d133091c82502e34a98957df08617d2a b/Library/metadata/d1/d133091c82502e34a98957df08617d2a
new file mode 100644
index 0000000000000000000000000000000000000000..2216726371cec20f545e1ee7d4338690780f95b7
Binary files /dev/null and b/Library/metadata/d1/d133091c82502e34a98957df08617d2a differ
diff --git a/Library/metadata/d1/d133091c82502e34a98957df08617d2a.info b/Library/metadata/d1/d133091c82502e34a98957df08617d2a.info
new file mode 100644
index 0000000000000000000000000000000000000000..fbf026c184bc4b9ebca01a771b7e5981fa31b1c1
Binary files /dev/null and b/Library/metadata/d1/d133091c82502e34a98957df08617d2a.info differ
diff --git a/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9 b/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9
new file mode 100644
index 0000000000000000000000000000000000000000..3be30cae4871cbb64c76534835e22cbff27a083b
Binary files /dev/null and b/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9 differ
diff --git a/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9.info b/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9.info
new file mode 100644
index 0000000000000000000000000000000000000000..4483567d50947bbeb98af681046228d0e4704aa3
Binary files /dev/null and b/Library/metadata/d1/d16707d14e0b5884b9c736d2dbfa9de9.info differ
diff --git a/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81 b/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81
new file mode 100644
index 0000000000000000000000000000000000000000..580f0f7d62ae0b7b853a7b50f752c5157c7add8e
Binary files /dev/null and b/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81 differ
diff --git a/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81.info b/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81.info
new file mode 100644
index 0000000000000000000000000000000000000000..eb23c1a0dffd590ee791ae1ba024edc68b5571ff
Binary files /dev/null and b/Library/metadata/d1/d1a0a27327b54c3bac52a08929c33f81.info differ
diff --git a/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e b/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e
new file mode 100644
index 0000000000000000000000000000000000000000..0bc950ce918bc85a709f46eeb1f7640cd2fb8037
Binary files /dev/null and b/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e differ
diff --git a/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e.info b/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e.info
new file mode 100644
index 0000000000000000000000000000000000000000..27a7abcfcf73b7aa0cbdbe345d8fc7969f3dc65f
Binary files /dev/null and b/Library/metadata/d1/d1c1a2d988f5148fd9ab17b2460d271e.info differ
diff --git a/Library/metadata/d2/d200af1436d786d4f884fcab62412f27 b/Library/metadata/d2/d200af1436d786d4f884fcab62412f27
new file mode 100644
index 0000000000000000000000000000000000000000..6202233daab66a46b3d23d5362723bf7cf098143
Binary files /dev/null and b/Library/metadata/d2/d200af1436d786d4f884fcab62412f27 differ
diff --git a/Library/metadata/d2/d200af1436d786d4f884fcab62412f27.info b/Library/metadata/d2/d200af1436d786d4f884fcab62412f27.info
new file mode 100644
index 0000000000000000000000000000000000000000..19e1db97e0ca469a82ce6d363a60961260315f04
Binary files /dev/null and b/Library/metadata/d2/d200af1436d786d4f884fcab62412f27.info differ
diff --git a/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1 b/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1
new file mode 100644
index 0000000000000000000000000000000000000000..d512f7beafe15e8d7923c2af6d8ac9fd8f7dd29b
Binary files /dev/null and b/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1 differ
diff --git a/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1.info b/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1.info
new file mode 100644
index 0000000000000000000000000000000000000000..fe8ef703fd9da414624d96a97b621cee659acef7
Binary files /dev/null and b/Library/metadata/d2/d256fa541faf5d4409992c631adb98a1.info differ
diff --git a/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2 b/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2
new file mode 100644
index 0000000000000000000000000000000000000000..75f69c5bf68c096d6af52191e17524c8da40e649
Binary files /dev/null and b/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2 differ
diff --git a/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2.info b/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2.info
new file mode 100644
index 0000000000000000000000000000000000000000..d8e8990f4aa62f9eec2e957856317a024962cfe5
Binary files /dev/null and b/Library/metadata/d3/d31e5d760880a4e52a3a75322481d0d2.info differ
diff --git a/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b b/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b
new file mode 100644
index 0000000000000000000000000000000000000000..090d48f9682675758480f6f28b20415274ee87ec
Binary files /dev/null and b/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b differ
diff --git a/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b.info b/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b.info
new file mode 100644
index 0000000000000000000000000000000000000000..89a962b4f4d02f860de3f723164aa68d80bff5c5
Binary files /dev/null and b/Library/metadata/d3/d32181e3b500f064c96ea078bb92190b.info differ
diff --git a/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796 b/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796
new file mode 100644
index 0000000000000000000000000000000000000000..ad41ae5144b8044f7f58b2c314347b8f1e68f266
Binary files /dev/null and b/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796 differ
diff --git a/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796.info b/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796.info
new file mode 100644
index 0000000000000000000000000000000000000000..e8d3e397a3a441a74732986e32136a7fe4859d3b
Binary files /dev/null and b/Library/metadata/d3/d3cbe921f7b3d9a3257e7c61a5761796.info differ
diff --git a/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635 b/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635
new file mode 100644
index 0000000000000000000000000000000000000000..90ed12bbf6cd552d33129a377b01a451496f0a43
Binary files /dev/null and b/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635 differ
diff --git a/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635.info b/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635.info
new file mode 100644
index 0000000000000000000000000000000000000000..a4d7f6746f7112400b3cf736482a151d8f744223
Binary files /dev/null and b/Library/metadata/d4/d437fe60bb34f45728664a5d930c1635.info differ
diff --git a/Library/metadata/d4/d44480f900820d941aa64074555d6243 b/Library/metadata/d4/d44480f900820d941aa64074555d6243
new file mode 100644
index 0000000000000000000000000000000000000000..271876c6705fe56d020206abfb795fc0f95367eb
Binary files /dev/null and b/Library/metadata/d4/d44480f900820d941aa64074555d6243 differ
diff --git a/Library/metadata/d4/d44480f900820d941aa64074555d6243.info b/Library/metadata/d4/d44480f900820d941aa64074555d6243.info
new file mode 100644
index 0000000000000000000000000000000000000000..f03ae12345f25d4cf5be76d8c61a73c4ecb7c3f2
Binary files /dev/null and b/Library/metadata/d4/d44480f900820d941aa64074555d6243.info differ
diff --git a/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c b/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c
new file mode 100644
index 0000000000000000000000000000000000000000..9a35c35614db3b2989ac9ea863e8e58e797108d5
Binary files /dev/null and b/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c differ
diff --git a/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c.info b/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c.info
new file mode 100644
index 0000000000000000000000000000000000000000..2fe37c56061f213c5e369aa362d7008df1a040eb
Binary files /dev/null and b/Library/metadata/d4/d4ef26aa386b44923b61c9c4b505a67c.info differ
diff --git a/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b b/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b
new file mode 100644
index 0000000000000000000000000000000000000000..98f3984a6c0d92cb98b8393830b4a5a37339f467
Binary files /dev/null and b/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b differ
diff --git a/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b.info b/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b.info
new file mode 100644
index 0000000000000000000000000000000000000000..0034134bc1e73184e203215de12d89973402db4e
Binary files /dev/null and b/Library/metadata/d4/d4faf47cf9be3b444a0dfabe3131b22b.info differ
diff --git a/Library/metadata/d5/d563741c8209e204c842895413aded74 b/Library/metadata/d5/d563741c8209e204c842895413aded74
new file mode 100644
index 0000000000000000000000000000000000000000..1e9fbaccdf9dcf0ebba35c75ca8411f8678913ce
Binary files /dev/null and b/Library/metadata/d5/d563741c8209e204c842895413aded74 differ
diff --git a/Library/metadata/d5/d563741c8209e204c842895413aded74.info b/Library/metadata/d5/d563741c8209e204c842895413aded74.info
new file mode 100644
index 0000000000000000000000000000000000000000..cff121937b8930f208d24361242aa32a4820fb55
Binary files /dev/null and b/Library/metadata/d5/d563741c8209e204c842895413aded74.info differ
diff --git a/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217 b/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217
new file mode 100644
index 0000000000000000000000000000000000000000..b9ba935a7ff7f90beceacb80472e8c5492c47d9d
Binary files /dev/null and b/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217 differ
diff --git a/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217.info b/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217.info
new file mode 100644
index 0000000000000000000000000000000000000000..d6b67d5fa8ed691e6864be23c8d8c20ef2ee7aac
Binary files /dev/null and b/Library/metadata/d5/d5a61f8cc87394b28aec6b88b4083217.info differ
diff --git a/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be b/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be
new file mode 100644
index 0000000000000000000000000000000000000000..bca7b25acc10e6c2569cdb24608ee8d0e110c2c8
Binary files /dev/null and b/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be differ
diff --git a/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be.info b/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be.info
new file mode 100644
index 0000000000000000000000000000000000000000..5ab4668056f0ced4bf1366a413200b654b08a8eb
Binary files /dev/null and b/Library/metadata/d5/d5f0b0adc6826e9dd3b72e292e8438be.info differ
diff --git a/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e b/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e
new file mode 100644
index 0000000000000000000000000000000000000000..f05d27d14ea450f4239a9d4ff1725cfbdab42946
Binary files /dev/null and b/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e differ
diff --git a/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e.info b/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7e6b1606029871339ff5789ad306307cac8bffe
Binary files /dev/null and b/Library/metadata/d6/d607a67dc772b484da060e66a3d61a4e.info differ
diff --git a/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43 b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43
new file mode 100644
index 0000000000000000000000000000000000000000..6cc54a4ec0a5b15641bd3e84420a7f6e8038d430
Binary files /dev/null and b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43 differ
diff --git a/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.info b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.info
new file mode 100644
index 0000000000000000000000000000000000000000..7e1e468f65c4277fd779fc41cc0997946eed9f92
Binary files /dev/null and b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.info differ
diff --git a/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.resource b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.resource
new file mode 100644
index 0000000000000000000000000000000000000000..8ce46692df78b429503c2a659b32f95049c20da6
Binary files /dev/null and b/Library/metadata/d6/d6477a15b6bbef64d95f4a5ca8ca4f43.resource differ
diff --git a/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a b/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a
new file mode 100644
index 0000000000000000000000000000000000000000..e6ec1b5f2855c59145d401d7559dbab3970555ae
Binary files /dev/null and b/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a differ
diff --git a/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a.info b/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a.info
new file mode 100644
index 0000000000000000000000000000000000000000..080b17215eef02e13eb92c51c738803270f921c6
Binary files /dev/null and b/Library/metadata/d6/d687414a82ecb7848910b9d5291aa65a.info differ
diff --git a/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c b/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c
new file mode 100644
index 0000000000000000000000000000000000000000..6ba35f0f7586c9f3c6319933579836f7606d0364
Binary files /dev/null and b/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c differ
diff --git a/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c.info b/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c.info
new file mode 100644
index 0000000000000000000000000000000000000000..e53d3cd905fc463b0976f2b0f4398562e0b0dc6d
Binary files /dev/null and b/Library/metadata/d6/d6a708dbb74414a6dbd60e07d9513c1c.info differ
diff --git a/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2 b/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2
new file mode 100644
index 0000000000000000000000000000000000000000..fee3edae982a97cf53cbe7abb7c33c8ae6e75bc3
Binary files /dev/null and b/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2 differ
diff --git a/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2.info b/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2.info
new file mode 100644
index 0000000000000000000000000000000000000000..7d2a76adc0ad8b63fac1c2ca065e50047ced3c28
Binary files /dev/null and b/Library/metadata/d6/d6c6a000a805f00649b36b542e8426c2.info differ
diff --git a/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244 b/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244
new file mode 100644
index 0000000000000000000000000000000000000000..9dd7922571a635f9c47651dbfac0cc8d4d13dfc2
Binary files /dev/null and b/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244 differ
diff --git a/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244.info b/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244.info
new file mode 100644
index 0000000000000000000000000000000000000000..c7c77f1b9190263fa7f0c57187d368d6af4c6d61
Binary files /dev/null and b/Library/metadata/d6/d6cbe36d82b4eb64697e085a97f55244.info differ
diff --git a/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c b/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c
new file mode 100644
index 0000000000000000000000000000000000000000..0171c510cd80c1f0935a19ef99d89ad4458d1e1f
Binary files /dev/null and b/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c differ
diff --git a/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c.info b/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c.info
new file mode 100644
index 0000000000000000000000000000000000000000..365e33c5aa55cacff9536773dbf475dfe462c5f1
Binary files /dev/null and b/Library/metadata/d6/d6db7caf2e852b75ebb9c6098418179c.info differ
diff --git a/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5 b/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5
new file mode 100644
index 0000000000000000000000000000000000000000..ea891cb01a66b5690a41093d3e45a675d269e2c8
Binary files /dev/null and b/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5 differ
diff --git a/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5.info b/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5.info
new file mode 100644
index 0000000000000000000000000000000000000000..290152181f14afcf2d9553ed54e5a598741271f9
Binary files /dev/null and b/Library/metadata/d7/d7afef36096b81f418bea2f2d3261ac5.info differ
diff --git a/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3 b/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3
new file mode 100644
index 0000000000000000000000000000000000000000..bbfcfc46d512565eaa326c39d53eed6d44f6ec55
Binary files /dev/null and b/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3 differ
diff --git a/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3.info b/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3.info
new file mode 100644
index 0000000000000000000000000000000000000000..8034d9ab9d5c9bb8c0a9b7f712b48135a6bf94bd
Binary files /dev/null and b/Library/metadata/d8/d85e5eeaf8f135aeaaebdc8aa3cff6c3.info differ
diff --git a/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e b/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e
new file mode 100644
index 0000000000000000000000000000000000000000..032dcf90ef2593735061a4c3551fd898947425fe
Binary files /dev/null and b/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e differ
diff --git a/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e.info b/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7e68545b7da7c8fb5e57a063b965469be4d8da1
Binary files /dev/null and b/Library/metadata/d9/d912d4873af534bd4a9d44bf1b52f14e.info differ
diff --git a/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0 b/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0
new file mode 100644
index 0000000000000000000000000000000000000000..8002e6436f08cd56309fe76630a508a8307ebb8f
Binary files /dev/null and b/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0 differ
diff --git a/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0.info b/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0.info
new file mode 100644
index 0000000000000000000000000000000000000000..8924459fc1baab1742342effe83325ffa491fc80
Binary files /dev/null and b/Library/metadata/d9/d929147d9f78c487397abb40f2c257b0.info differ
diff --git a/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317 b/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317
new file mode 100644
index 0000000000000000000000000000000000000000..aa4a4d1b0310048790bda63b49c13fdfaba21f9d
Binary files /dev/null and b/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317 differ
diff --git a/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317.info b/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317.info
new file mode 100644
index 0000000000000000000000000000000000000000..177f3262615e0a1c12471e0c027fe1f582f72457
Binary files /dev/null and b/Library/metadata/d9/d9647b571c5e44729b71d756b3d55317.info differ
diff --git a/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf b/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf
new file mode 100644
index 0000000000000000000000000000000000000000..a4ad495ba34824eeda0d0c10205bde198d0038f4
Binary files /dev/null and b/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf differ
diff --git a/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf.info b/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf.info
new file mode 100644
index 0000000000000000000000000000000000000000..4acd2fb289fd06325feb636d7e917d6647477a77
Binary files /dev/null and b/Library/metadata/d9/d98c8cdf9b7129e4e8984f22fd06a4bf.info differ
diff --git a/Library/metadata/da/da0b41deddf0a4414b09681018c171f1 b/Library/metadata/da/da0b41deddf0a4414b09681018c171f1
new file mode 100644
index 0000000000000000000000000000000000000000..1b728afd11d6d9036266295868e438b00d838cd5
Binary files /dev/null and b/Library/metadata/da/da0b41deddf0a4414b09681018c171f1 differ
diff --git a/Library/metadata/da/da0b41deddf0a4414b09681018c171f1.info b/Library/metadata/da/da0b41deddf0a4414b09681018c171f1.info
new file mode 100644
index 0000000000000000000000000000000000000000..b8a02bc877541f72d960ba0cce49b31d080fb154
Binary files /dev/null and b/Library/metadata/da/da0b41deddf0a4414b09681018c171f1.info differ
diff --git a/Library/metadata/da/da58e41a0c7d7184287af3497f97da62 b/Library/metadata/da/da58e41a0c7d7184287af3497f97da62
new file mode 100644
index 0000000000000000000000000000000000000000..a43056d8e95b9415f5a014922945ee4a7b1f8833
Binary files /dev/null and b/Library/metadata/da/da58e41a0c7d7184287af3497f97da62 differ
diff --git a/Library/metadata/da/da58e41a0c7d7184287af3497f97da62.info b/Library/metadata/da/da58e41a0c7d7184287af3497f97da62.info
new file mode 100644
index 0000000000000000000000000000000000000000..ac19999bd2987ec66c5df2be0795ded74a330698
Binary files /dev/null and b/Library/metadata/da/da58e41a0c7d7184287af3497f97da62.info differ
diff --git a/Library/metadata/da/da7af2b41531e4149991d337de2c7e93 b/Library/metadata/da/da7af2b41531e4149991d337de2c7e93
new file mode 100644
index 0000000000000000000000000000000000000000..449a7de9de668df21d04703409f8f6e8adf60484
Binary files /dev/null and b/Library/metadata/da/da7af2b41531e4149991d337de2c7e93 differ
diff --git a/Library/metadata/da/da7af2b41531e4149991d337de2c7e93.info b/Library/metadata/da/da7af2b41531e4149991d337de2c7e93.info
new file mode 100644
index 0000000000000000000000000000000000000000..e73a2fb86dc54a18fa3f2374ff476f771596c59e
Binary files /dev/null and b/Library/metadata/da/da7af2b41531e4149991d337de2c7e93.info differ
diff --git a/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a b/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a
new file mode 100644
index 0000000000000000000000000000000000000000..c8af1aa12a012154dcd8fa3c74dfb130338b6821
Binary files /dev/null and b/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a differ
diff --git a/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a.info b/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a.info
new file mode 100644
index 0000000000000000000000000000000000000000..41208bb8d818fe520a610aaa7502193b1006bbf9
Binary files /dev/null and b/Library/metadata/da/daa3ef99a3bebeb45b7418d9f710643a.info differ
diff --git a/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c b/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c
new file mode 100644
index 0000000000000000000000000000000000000000..84964e8045d74da3b47f7746d2532134825d266a
Binary files /dev/null and b/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c differ
diff --git a/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c.info b/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c.info
new file mode 100644
index 0000000000000000000000000000000000000000..b18e11669d26e7480a58aeb97d4d2df440339d87
Binary files /dev/null and b/Library/metadata/dc/dc0b7609730dd4b42a66795ed8cd098c.info differ
diff --git a/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb b/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb
new file mode 100644
index 0000000000000000000000000000000000000000..cdab8513e692c4889879b935a086c9e2d4e6803a
Binary files /dev/null and b/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb differ
diff --git a/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info b/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info
new file mode 100644
index 0000000000000000000000000000000000000000..ef29fd61cf96f7706bee677a6ce72fed46dbf0c0
Binary files /dev/null and b/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info differ
diff --git a/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968 b/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968
new file mode 100644
index 0000000000000000000000000000000000000000..047909dbc6db01421cf94ba797e9c2ac78a974f0
Binary files /dev/null and b/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968 differ
diff --git a/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968.info b/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968.info
new file mode 100644
index 0000000000000000000000000000000000000000..a695fe2f20e8aae9c14e562b76831e90bb67488b
Binary files /dev/null and b/Library/metadata/dc/dcc8c6e92b172a65719af5ddf47dd968.info differ
diff --git a/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2 b/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2
new file mode 100644
index 0000000000000000000000000000000000000000..39aea47186297bc695f7dc357681c4535573a8d7
Binary files /dev/null and b/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2 differ
diff --git a/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2.info b/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2.info
new file mode 100644
index 0000000000000000000000000000000000000000..31969fff706f74a6e88fb42ed147bbebe3e1fff8
Binary files /dev/null and b/Library/metadata/dc/dce91326f102345f3ba2f0987c0679c2.info differ
diff --git a/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21 b/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21
new file mode 100644
index 0000000000000000000000000000000000000000..227468cbccf67e55089a79d8a88204fbf8df21b1
Binary files /dev/null and b/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21 differ
diff --git a/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21.info b/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21.info
new file mode 100644
index 0000000000000000000000000000000000000000..e7177503dd4e2e487908b420e9d3d8f8fdfe99c1
Binary files /dev/null and b/Library/metadata/dc/dced8f6ea9f964e8e8e61574ea889d21.info differ
diff --git a/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38 b/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38
new file mode 100644
index 0000000000000000000000000000000000000000..91047bd455384b79bb5c7290cc3b3019e8e1bcbf
Binary files /dev/null and b/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38 differ
diff --git a/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38.info b/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38.info
new file mode 100644
index 0000000000000000000000000000000000000000..3939d94aff17c9c81bb7f370671de739a6ae451d
Binary files /dev/null and b/Library/metadata/dd/dd2fe74169b54bf58fca17288513ef38.info differ
diff --git a/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449 b/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449
new file mode 100644
index 0000000000000000000000000000000000000000..8c58f0d4f951a87d83d86344e60e2e7d1768f7ac
Binary files /dev/null and b/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449 differ
diff --git a/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449.info b/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449.info
new file mode 100644
index 0000000000000000000000000000000000000000..4a8a7eba0a6320f27e3dc707635dcf3fa2ad7a50
Binary files /dev/null and b/Library/metadata/dd/ddc2cf13ac2f2c6488a2cf7ee2397449.info differ
diff --git a/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4 b/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4
new file mode 100644
index 0000000000000000000000000000000000000000..511b2d1975fc447e7f4cc9167f4dd224f09a79c8
Binary files /dev/null and b/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4 differ
diff --git a/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4.info b/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4.info
new file mode 100644
index 0000000000000000000000000000000000000000..81e3e7424f9d95d58dac25aa86254f5ea4dcae25
Binary files /dev/null and b/Library/metadata/de/deba9a10e109bfb4f8754d12eefa9fd4.info differ
diff --git a/Library/metadata/df/df0c188f18eb59d418206508b45196b7 b/Library/metadata/df/df0c188f18eb59d418206508b45196b7
new file mode 100644
index 0000000000000000000000000000000000000000..292ecd6f10281addccdc1bb7536d79ebaf3c7c48
Binary files /dev/null and b/Library/metadata/df/df0c188f18eb59d418206508b45196b7 differ
diff --git a/Library/metadata/df/df0c188f18eb59d418206508b45196b7.info b/Library/metadata/df/df0c188f18eb59d418206508b45196b7.info
new file mode 100644
index 0000000000000000000000000000000000000000..5bfe9d1d72c59e029aeb4b53cff093783b7a8d15
Binary files /dev/null and b/Library/metadata/df/df0c188f18eb59d418206508b45196b7.info differ
diff --git a/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b b/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b
new file mode 100644
index 0000000000000000000000000000000000000000..a0f80bf83cd379dbf9099547ded4426866f5f48c
Binary files /dev/null and b/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b differ
diff --git a/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b.info b/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b.info
new file mode 100644
index 0000000000000000000000000000000000000000..457c8b9a2bd1e6ed1ac51b0e5b7432b351d63c91
Binary files /dev/null and b/Library/metadata/e0/e05ace3bd15740cda0bad60d89092a5b.info differ
diff --git a/Library/metadata/e1/e1007cd261c84053beb0c3537782908d b/Library/metadata/e1/e1007cd261c84053beb0c3537782908d
new file mode 100644
index 0000000000000000000000000000000000000000..88e725859967ed44a821a58e3b57f40de6c74e20
Binary files /dev/null and b/Library/metadata/e1/e1007cd261c84053beb0c3537782908d differ
diff --git a/Library/metadata/e1/e1007cd261c84053beb0c3537782908d.info b/Library/metadata/e1/e1007cd261c84053beb0c3537782908d.info
new file mode 100644
index 0000000000000000000000000000000000000000..6ab7bdae2f59f147f88bc441e493daa7a4be169a
Binary files /dev/null and b/Library/metadata/e1/e1007cd261c84053beb0c3537782908d.info differ
diff --git a/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17 b/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17
new file mode 100644
index 0000000000000000000000000000000000000000..fe8afe06ea0fd241a4ee9346e64ecf9c7d4a3682
Binary files /dev/null and b/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17 differ
diff --git a/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17.info b/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17.info
new file mode 100644
index 0000000000000000000000000000000000000000..1f0b1f9893cc0f506505127e36f14b5249438d85
Binary files /dev/null and b/Library/metadata/e1/e1ef8466c8fd01a549f10baa4d51fa17.info differ
diff --git a/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab b/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab
new file mode 100644
index 0000000000000000000000000000000000000000..47d9f0e425ce872c22ae7547d3646adfa0f44425
Binary files /dev/null and b/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab differ
diff --git a/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab.info b/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab.info
new file mode 100644
index 0000000000000000000000000000000000000000..fd4a299c86c86a47e788190f2bd4e6e10645ccc1
Binary files /dev/null and b/Library/metadata/e2/e2135e9ba7bc8e34e99c5b6c19b822ab.info differ
diff --git a/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3 b/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3
new file mode 100644
index 0000000000000000000000000000000000000000..b15145645cd0eff313d2f942e5894461fc7a11bc
Binary files /dev/null and b/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3 differ
diff --git a/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3.info b/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3.info
new file mode 100644
index 0000000000000000000000000000000000000000..d19cbdd4659d790556d0ec4777a050653210478c
Binary files /dev/null and b/Library/metadata/e2/e21bec35f48a44298911b25ead550ce3.info differ
diff --git a/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278 b/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278
new file mode 100644
index 0000000000000000000000000000000000000000..dbe2ccb8d03313af1cb8498e4ec5e7c536d72bc4
Binary files /dev/null and b/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278 differ
diff --git a/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278.info b/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278.info
new file mode 100644
index 0000000000000000000000000000000000000000..fbdaaeb0e79bae6f110b8a82b8cd50f914db1765
Binary files /dev/null and b/Library/metadata/e3/e3882522a08b6f5459b4dea6f8791278.info differ
diff --git a/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8 b/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8
new file mode 100644
index 0000000000000000000000000000000000000000..0f5958241af2c1568a2e33a02938d3ff2efa464d
Binary files /dev/null and b/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8 differ
diff --git a/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8.info b/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8.info
new file mode 100644
index 0000000000000000000000000000000000000000..6bbe25f8a1da9eb605e52b55f31a64e39183de7b
Binary files /dev/null and b/Library/metadata/e3/e3b0f810fdea84e40ab4ba20f256f7e8.info differ
diff --git a/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b b/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b
new file mode 100644
index 0000000000000000000000000000000000000000..e1966fd3ad7f0352f66cde0972354031858c6fd8
Binary files /dev/null and b/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b differ
diff --git a/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b.info b/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b.info
new file mode 100644
index 0000000000000000000000000000000000000000..e2684dc17224786f8cdba77c0c33c088315cf98b
Binary files /dev/null and b/Library/metadata/e4/e40365ad2e2e92a40b428d97f4465f3b.info differ
diff --git a/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486 b/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486
new file mode 100644
index 0000000000000000000000000000000000000000..7b0318deaea006b5962db7a19b020174e9013f2d
Binary files /dev/null and b/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486 differ
diff --git a/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486.info b/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486.info
new file mode 100644
index 0000000000000000000000000000000000000000..dee62ec5eb2255d45d1ced3f348cfe0965acf882
Binary files /dev/null and b/Library/metadata/e4/e426a33061f184a9785cd5d82f9fb486.info differ
diff --git a/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da b/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da
new file mode 100644
index 0000000000000000000000000000000000000000..a1933c09f6fe39e3c7a1c5ea5d9a6bcddc9de488
Binary files /dev/null and b/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da differ
diff --git a/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da.info b/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da.info
new file mode 100644
index 0000000000000000000000000000000000000000..2794c45e8dc857edbaf04c7cdca5fd2adbb489d1
Binary files /dev/null and b/Library/metadata/e4/e45ba03774084ee4a899cbfd8f4b24da.info differ
diff --git a/Library/metadata/e4/e45f79867376940b7ba31502238d8efa b/Library/metadata/e4/e45f79867376940b7ba31502238d8efa
new file mode 100644
index 0000000000000000000000000000000000000000..19ba04ded63b1c39a98a4aec1fffcd92aea82f34
Binary files /dev/null and b/Library/metadata/e4/e45f79867376940b7ba31502238d8efa differ
diff --git a/Library/metadata/e4/e45f79867376940b7ba31502238d8efa.info b/Library/metadata/e4/e45f79867376940b7ba31502238d8efa.info
new file mode 100644
index 0000000000000000000000000000000000000000..f7e2163521de221a9a17d8c444c38ca5270f42de
Binary files /dev/null and b/Library/metadata/e4/e45f79867376940b7ba31502238d8efa.info differ
diff --git a/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7 b/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7
new file mode 100644
index 0000000000000000000000000000000000000000..fcf6e67fc58c979a0a614bd0254e64b4e002a26b
Binary files /dev/null and b/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7 differ
diff --git a/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7.info b/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7.info
new file mode 100644
index 0000000000000000000000000000000000000000..49eb1fac3a082ecead3b2339033b3e920080ea32
Binary files /dev/null and b/Library/metadata/e4/e488e518fc6c5f444807ac34142c4ec7.info differ
diff --git a/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e b/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e
new file mode 100644
index 0000000000000000000000000000000000000000..41f08b925a02684b407fc23bf0131b724d0dd5b1
Binary files /dev/null and b/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e differ
diff --git a/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e.info b/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e.info
new file mode 100644
index 0000000000000000000000000000000000000000..d4df5841fd719710d269e0f8df0d1e972499ddac
Binary files /dev/null and b/Library/metadata/e4/e48d1ac8d862d4b41b09aacfae304d6e.info differ
diff --git a/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823 b/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823
new file mode 100644
index 0000000000000000000000000000000000000000..d108b838df096ddde96bf63b645589d8ebf64858
Binary files /dev/null and b/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823 differ
diff --git a/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823.info b/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823.info
new file mode 100644
index 0000000000000000000000000000000000000000..3b0077504b51cd8189efd7855f246e92551326e1
Binary files /dev/null and b/Library/metadata/e4/e4e0b1de1aee400d81ed4273141e7823.info differ
diff --git a/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a b/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a
new file mode 100644
index 0000000000000000000000000000000000000000..3854b694c8b53a2133361f3a0d284fbae9705e03
Binary files /dev/null and b/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a differ
diff --git a/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a.info b/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a.info
new file mode 100644
index 0000000000000000000000000000000000000000..ac20f9043e38eaec1597bb6f18d3caa23fa28a8e
Binary files /dev/null and b/Library/metadata/e4/e4f4cf1b9b434137a499903a7a1d651a.info differ
diff --git a/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb b/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb
new file mode 100644
index 0000000000000000000000000000000000000000..e17107e04b634ee1db851e361f1a1b0a0248e252
Binary files /dev/null and b/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb differ
diff --git a/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb.info b/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb.info
new file mode 100644
index 0000000000000000000000000000000000000000..c0dc5051bc9d4f4175453197051e2ef319b0ab48
Binary files /dev/null and b/Library/metadata/e5/e53bc96d2d054b8cbc811f0d73e761eb.info differ
diff --git a/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a b/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a
new file mode 100644
index 0000000000000000000000000000000000000000..a0628f25a01501dbaf66d44cfbb11d6442fa0e63
Binary files /dev/null and b/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a differ
diff --git a/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a.info b/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a.info
new file mode 100644
index 0000000000000000000000000000000000000000..e8ec35c9867a697175e3cda00a284eebdbbd510f
Binary files /dev/null and b/Library/metadata/e6/e69259f6ff914146ad610be5491eb44a.info differ
diff --git a/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe b/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe
new file mode 100644
index 0000000000000000000000000000000000000000..29d2fefbed0d88cbaf1e6a5557c755d22d881d23
Binary files /dev/null and b/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe differ
diff --git a/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe.info b/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe.info
new file mode 100644
index 0000000000000000000000000000000000000000..63bddfd143ac5ea716e9edad1939104decafc85b
Binary files /dev/null and b/Library/metadata/e6/e6925bb38494e6a43ba0921e65e424fe.info differ
diff --git a/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4 b/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4
new file mode 100644
index 0000000000000000000000000000000000000000..641bbf5e7e215450485a22c5055f782166355727
Binary files /dev/null and b/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4 differ
diff --git a/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4.info b/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4.info
new file mode 100644
index 0000000000000000000000000000000000000000..28a628d0b38c37d59e039fc40f69b67feba95d8e
Binary files /dev/null and b/Library/metadata/e6/e6a1d1e3d2384453a7371b4a07a41ca4.info differ
diff --git a/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2 b/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2
new file mode 100644
index 0000000000000000000000000000000000000000..82715a88c14f9a006cacec69d99ecf6f32e71a5e
Binary files /dev/null and b/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2 differ
diff --git a/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2.info b/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2.info
new file mode 100644
index 0000000000000000000000000000000000000000..65221c0c14e2bba19d8ac0f0b24169cd77f17c22
Binary files /dev/null and b/Library/metadata/e8/e870dbea0da3c384cb0dcb99904389e2.info differ
diff --git a/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc b/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc
new file mode 100644
index 0000000000000000000000000000000000000000..46298f1e7daed12ef9f1cda2fdd2cd901b8b2f2d
Binary files /dev/null and b/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc differ
diff --git a/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc.info b/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc.info
new file mode 100644
index 0000000000000000000000000000000000000000..e58341496de631456021d69be7beeb084f9e8f6f
Binary files /dev/null and b/Library/metadata/e8/e8d4dd58e49e54f4ca14f84542a2afcc.info differ
diff --git a/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61 b/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61
new file mode 100644
index 0000000000000000000000000000000000000000..480b29afe23c4828d189a53f2fd001d850f0d96b
Binary files /dev/null and b/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61 differ
diff --git a/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61.info b/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61.info
new file mode 100644
index 0000000000000000000000000000000000000000..c9d066cea06be36d987c12936381532cfcaaebd2
Binary files /dev/null and b/Library/metadata/e8/e8df51b00999fb349842d80a161a2a61.info differ
diff --git a/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838 b/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838
new file mode 100644
index 0000000000000000000000000000000000000000..c9d30e63481d4a270c2dd0e0803739462839bfe6
Binary files /dev/null and b/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838 differ
diff --git a/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838.info b/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838.info
new file mode 100644
index 0000000000000000000000000000000000000000..fe4e3a1a9163ae729e5aaa35a47e2a286a809290
Binary files /dev/null and b/Library/metadata/e9/e93ec7eb6de342aabd156833e253f838.info differ
diff --git a/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34 b/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34
new file mode 100644
index 0000000000000000000000000000000000000000..32706ecfd6aff8034edeebe09017137d5e27ec64
Binary files /dev/null and b/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34 differ
diff --git a/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34.info b/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34.info
new file mode 100644
index 0000000000000000000000000000000000000000..5550cf39fcd3f9942eed5143e07c1f3efb96d89e
Binary files /dev/null and b/Library/metadata/e9/e93ff1d31f60dad45bb1f74a599ebe34.info differ
diff --git a/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9 b/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9
new file mode 100644
index 0000000000000000000000000000000000000000..1ae519844ee14083c7fb2dae4cd571b97e5389ef
Binary files /dev/null and b/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9 differ
diff --git a/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9.info b/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9.info
new file mode 100644
index 0000000000000000000000000000000000000000..15cf9a8c49584c85e1249cfddc2f134b43685763
Binary files /dev/null and b/Library/metadata/e9/e9d032764fa4433458c6a64d64995cb9.info differ
diff --git a/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50 b/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50
new file mode 100644
index 0000000000000000000000000000000000000000..6b3879f0cd8407d276c08559f5d06dc934b7a8b7
Binary files /dev/null and b/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50 differ
diff --git a/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50.info b/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50.info
new file mode 100644
index 0000000000000000000000000000000000000000..5a5f6c94840f93eaf4908fd817b4735dd6e9447f
Binary files /dev/null and b/Library/metadata/e9/e9df95f53f1c1d0c9199e235d6c42b50.info differ
diff --git a/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680 b/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680
new file mode 100644
index 0000000000000000000000000000000000000000..7497fdcb70fe09db09a88ade3216890e37553352
Binary files /dev/null and b/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680 differ
diff --git a/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680.info b/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680.info
new file mode 100644
index 0000000000000000000000000000000000000000..76d990d627254a9728ab79f8eb7a6a4296ce7b2e
Binary files /dev/null and b/Library/metadata/ea/ead147da21254ff9a0a936bdd75e1680.info differ
diff --git a/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562 b/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562
new file mode 100644
index 0000000000000000000000000000000000000000..ec8dc89965f6597a7f5bee3af28be903e5d518c4
Binary files /dev/null and b/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562 differ
diff --git a/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562.info b/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562.info
new file mode 100644
index 0000000000000000000000000000000000000000..5e3cbbd68f139d8414e8b597480529ffb7320d2a
Binary files /dev/null and b/Library/metadata/ea/eaf83a90ec8170e4b84ae200a7110562.info differ
diff --git a/Library/metadata/ec/ec02776fe29df900b897106d61977735 b/Library/metadata/ec/ec02776fe29df900b897106d61977735
new file mode 100644
index 0000000000000000000000000000000000000000..b11befe3c4e999c15fb3b471ce16cbdb4573cf33
Binary files /dev/null and b/Library/metadata/ec/ec02776fe29df900b897106d61977735 differ
diff --git a/Library/metadata/ec/ec02776fe29df900b897106d61977735.info b/Library/metadata/ec/ec02776fe29df900b897106d61977735.info
new file mode 100644
index 0000000000000000000000000000000000000000..7b69a828df80ca6223bdc464f45912df1e9564f2
Binary files /dev/null and b/Library/metadata/ec/ec02776fe29df900b897106d61977735.info differ
diff --git a/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7 b/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7
new file mode 100644
index 0000000000000000000000000000000000000000..8493ed393279aba949c4f43a00b5044f6dfe5723
Binary files /dev/null and b/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7 differ
diff --git a/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7.info b/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7.info
new file mode 100644
index 0000000000000000000000000000000000000000..4a86e72cfed0c38799dbe054f3da2b713d079630
Binary files /dev/null and b/Library/metadata/ec/ec554b127cc81864eb43277b92f9e1e7.info differ
diff --git a/Library/metadata/ec/ec7c645d93308c04d8840982af12101e b/Library/metadata/ec/ec7c645d93308c04d8840982af12101e
new file mode 100644
index 0000000000000000000000000000000000000000..495d209c14cbd1181a566536a390b0578cd77b70
Binary files /dev/null and b/Library/metadata/ec/ec7c645d93308c04d8840982af12101e differ
diff --git a/Library/metadata/ec/ec7c645d93308c04d8840982af12101e.info b/Library/metadata/ec/ec7c645d93308c04d8840982af12101e.info
new file mode 100644
index 0000000000000000000000000000000000000000..4485095919834b47d0a3ec35c4306a426fa226fb
Binary files /dev/null and b/Library/metadata/ec/ec7c645d93308c04d8840982af12101e.info differ
diff --git a/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e b/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e
new file mode 100644
index 0000000000000000000000000000000000000000..658f86b3192e78f631f4f6965005a51c9a8b5ae2
Binary files /dev/null and b/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e differ
diff --git a/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e.info b/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e.info
new file mode 100644
index 0000000000000000000000000000000000000000..d93bf4f4724b8143ca55f8fd4d9fb5dcef02f44c
Binary files /dev/null and b/Library/metadata/ed/ed041e68439749a69d0efa0e3d896c2e.info differ
diff --git a/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea b/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea
new file mode 100644
index 0000000000000000000000000000000000000000..0e5d84c5d5fae66769afcad9541aacae19ebefd1
Binary files /dev/null and b/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea differ
diff --git a/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea.info b/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7a0dac0f199c3f80e3e391c91b0ef15f018e2bf
Binary files /dev/null and b/Library/metadata/ed/ed7343f30e3843b3afda8f8b02669cea.info differ
diff --git a/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38 b/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38
new file mode 100644
index 0000000000000000000000000000000000000000..bf5849724b65fd9eeaa5eb39a93b226305cc5cdf
Binary files /dev/null and b/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38 differ
diff --git a/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38.info b/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38.info
new file mode 100644
index 0000000000000000000000000000000000000000..fbbfcf786600f691d88bc9fe4c2db98cf38743b0
Binary files /dev/null and b/Library/metadata/ed/ede0462698a4a5643aa9872c074acd38.info differ
diff --git a/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7 b/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7
new file mode 100644
index 0000000000000000000000000000000000000000..86f8a0cea1c64e6437670378a5ccc154ed2753a2
Binary files /dev/null and b/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7 differ
diff --git a/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7.info b/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7.info
new file mode 100644
index 0000000000000000000000000000000000000000..845490d7efe43a30bdb7dda76090d97652870b6e
Binary files /dev/null and b/Library/metadata/ed/edf97aac6cc5a437ebf600a06a2e5ac7.info differ
diff --git a/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c b/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c
new file mode 100644
index 0000000000000000000000000000000000000000..121c5d697a0a789cacf1c60c1dfd75fb204e2d29
Binary files /dev/null and b/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c differ
diff --git a/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c.info b/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c.info
new file mode 100644
index 0000000000000000000000000000000000000000..9667a63e5d4454d87c22bc066bfa26edde63d32a
Binary files /dev/null and b/Library/metadata/ee/ee148e281f3c41c5b4ff5f8a5afe5a6c.info differ
diff --git a/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0 b/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0
new file mode 100644
index 0000000000000000000000000000000000000000..728a1b5dea8da29d596e7ac7212db3729209b7ff
Binary files /dev/null and b/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0 differ
diff --git a/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0.info b/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0.info
new file mode 100644
index 0000000000000000000000000000000000000000..4d381dddb3de001bd3669f16ecc50e8f4f5f7dcd
Binary files /dev/null and b/Library/metadata/ee/eeed6954b3c264ca0b28a92aa6289bf0.info differ
diff --git a/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf b/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf
new file mode 100644
index 0000000000000000000000000000000000000000..65bebaa32952d969d3d830b8f8d3b944f064a2f0
Binary files /dev/null and b/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf differ
diff --git a/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf.info b/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf.info
new file mode 100644
index 0000000000000000000000000000000000000000..dc9a16ca8eceeeab42583843573e99fcbdbbff2e
Binary files /dev/null and b/Library/metadata/ef/ef5a2781610c4f12a79939f717f789cf.info differ
diff --git a/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf b/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf
new file mode 100644
index 0000000000000000000000000000000000000000..e06808d8d63a97dabaae80fae16eaeeb72a55ed9
Binary files /dev/null and b/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf differ
diff --git a/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf.info b/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf.info
new file mode 100644
index 0000000000000000000000000000000000000000..520e3017a95d16e677e7195e58ae1f9e987f791f
Binary files /dev/null and b/Library/metadata/ef/effb76e1937b45ff8adf45e51a4c08cf.info differ
diff --git a/Library/metadata/f0/f028115ac8729e44d955113204947937 b/Library/metadata/f0/f028115ac8729e44d955113204947937
new file mode 100644
index 0000000000000000000000000000000000000000..6f5a9cc743de45d113a63b54f87c1f7505ceeb12
Binary files /dev/null and b/Library/metadata/f0/f028115ac8729e44d955113204947937 differ
diff --git a/Library/metadata/f0/f028115ac8729e44d955113204947937.info b/Library/metadata/f0/f028115ac8729e44d955113204947937.info
new file mode 100644
index 0000000000000000000000000000000000000000..4fafca824bed52c366e6835db0c6b140e55cee9d
Binary files /dev/null and b/Library/metadata/f0/f028115ac8729e44d955113204947937.info differ
diff --git a/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73 b/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73
new file mode 100644
index 0000000000000000000000000000000000000000..ce9a9780499b2622bbd60c76bf88e74dd9b1de0d
Binary files /dev/null and b/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73 differ
diff --git a/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73.info b/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73.info
new file mode 100644
index 0000000000000000000000000000000000000000..35d80ddd36cb65d5019dd466e4e80c9ba92d5478
Binary files /dev/null and b/Library/metadata/f0/f03b3e03b69e74ef9bd0f20377217a73.info differ
diff --git a/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513 b/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513
new file mode 100644
index 0000000000000000000000000000000000000000..674fce98d2a9c677c78c0c138acc880447f0c733
Binary files /dev/null and b/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513 differ
diff --git a/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513.info b/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513.info
new file mode 100644
index 0000000000000000000000000000000000000000..14003ab4f028b7e677c5887ac423eac8a22c6cba
Binary files /dev/null and b/Library/metadata/f0/f05ac313a4e8919488a2825b55b9b513.info differ
diff --git a/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8 b/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8
new file mode 100644
index 0000000000000000000000000000000000000000..6aa048aec528b4dc6071d1612bb1f899bd9dcb8d
Binary files /dev/null and b/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8 differ
diff --git a/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8.info b/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8.info
new file mode 100644
index 0000000000000000000000000000000000000000..b655a7470f42d769a262008ad1e9be42dda6104d
Binary files /dev/null and b/Library/metadata/f0/f0f13f2ab3d6d13cfc6e4656824bfca8.info differ
diff --git a/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0 b/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0
new file mode 100644
index 0000000000000000000000000000000000000000..fc1f926f52120599d17e4641d0aa2d0c2422a690
Binary files /dev/null and b/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0 differ
diff --git a/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0.info b/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0.info
new file mode 100644
index 0000000000000000000000000000000000000000..edec865fd6fd91d1a922e494c6db030444df36a7
Binary files /dev/null and b/Library/metadata/f1/f1045c695c5bf4fb7b8509687bc60fc0.info differ
diff --git a/Library/metadata/f1/f14df4f591394954188a185fe4b20d07 b/Library/metadata/f1/f14df4f591394954188a185fe4b20d07
new file mode 100644
index 0000000000000000000000000000000000000000..789f55428789e69503cd4ccb47cd428056803855
Binary files /dev/null and b/Library/metadata/f1/f14df4f591394954188a185fe4b20d07 differ
diff --git a/Library/metadata/f1/f14df4f591394954188a185fe4b20d07.info b/Library/metadata/f1/f14df4f591394954188a185fe4b20d07.info
new file mode 100644
index 0000000000000000000000000000000000000000..f9f0c0c6401e44299ecd85967557bee5ce5f0d6e
Binary files /dev/null and b/Library/metadata/f1/f14df4f591394954188a185fe4b20d07.info differ
diff --git a/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6 b/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6
new file mode 100644
index 0000000000000000000000000000000000000000..e904c8b5246e06e637711b266cfe4f2cb3b438e2
Binary files /dev/null and b/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6 differ
diff --git a/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6.info b/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6.info
new file mode 100644
index 0000000000000000000000000000000000000000..3866e6c1609b98fe1bdca9ef04357b6a90393df9
Binary files /dev/null and b/Library/metadata/f1/f1687bb24464840ae9e1d253685ae0f6.info differ
diff --git a/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7 b/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7
new file mode 100644
index 0000000000000000000000000000000000000000..ab6062f79f3cf11454dc245f065a653757eb3cbd
Binary files /dev/null and b/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7 differ
diff --git a/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7.info b/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7.info
new file mode 100644
index 0000000000000000000000000000000000000000..c82a93a85de169d6e71f20460a7dbf1c4e037462
Binary files /dev/null and b/Library/metadata/f1/f1ea944dcf8849ebab391e461b99ccb7.info differ
diff --git a/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa b/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa
new file mode 100644
index 0000000000000000000000000000000000000000..92a93e10b04305b95f54c019448d71dbf28fef09
Binary files /dev/null and b/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa differ
diff --git a/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa.info b/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa.info
new file mode 100644
index 0000000000000000000000000000000000000000..b7cc172397ba6b8297e1c34e9ff6a0af556570c2
Binary files /dev/null and b/Library/metadata/f2/f257d9bf30c4b004380441331faac5fa.info differ
diff --git a/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981 b/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981
new file mode 100644
index 0000000000000000000000000000000000000000..91884601888c7e213020e30ffa1b9e62b2fbecba
Binary files /dev/null and b/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981 differ
diff --git a/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981.info b/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981.info
new file mode 100644
index 0000000000000000000000000000000000000000..d4fdbb120b3ceed852e416079919f515101d53c0
Binary files /dev/null and b/Library/metadata/f2/f28fcced5af094cf78eb4e1109a71981.info differ
diff --git a/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad b/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad
new file mode 100644
index 0000000000000000000000000000000000000000..8b19bde7155cfe042b797df3d0f2f580834e1411
Binary files /dev/null and b/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad differ
diff --git a/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad.info b/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad.info
new file mode 100644
index 0000000000000000000000000000000000000000..bea2197cdf7d7b6c558561436e170301d56d47dd
Binary files /dev/null and b/Library/metadata/f3/f34f5fa2437664b2a81b4a7f34df87ad.info differ
diff --git a/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4 b/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4
new file mode 100644
index 0000000000000000000000000000000000000000..37affa570c697478d9df47c7cfc954ea9fff64fc
Binary files /dev/null and b/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4 differ
diff --git a/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4.info b/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4.info
new file mode 100644
index 0000000000000000000000000000000000000000..559f3fe082aa5691596a5d8cc1a47bebee0a49c2
Binary files /dev/null and b/Library/metadata/f3/f36f751c2e598324cb7cde77dc0b85d4.info differ
diff --git a/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603 b/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603
new file mode 100644
index 0000000000000000000000000000000000000000..2af35bf73b1af88198dc4099f8cb8a181bc51b14
Binary files /dev/null and b/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603 differ
diff --git a/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603.info b/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603.info
new file mode 100644
index 0000000000000000000000000000000000000000..831554a280a6960cb19b57b94bfd47ea790b3b1d
Binary files /dev/null and b/Library/metadata/f3/f3e9be7a01a611c49af4ad5d45b0e603.info differ
diff --git a/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5 b/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5
new file mode 100644
index 0000000000000000000000000000000000000000..a3237874d13e2955888bc09e803688e74edc8d80
Binary files /dev/null and b/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5 differ
diff --git a/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5.info b/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5.info
new file mode 100644
index 0000000000000000000000000000000000000000..06ec8844313bb803ebf02cd24a4da1ef72b935f7
Binary files /dev/null and b/Library/metadata/f4/f4688fdb7df04437aeb418b961361dc5.info differ
diff --git a/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37 b/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37
new file mode 100644
index 0000000000000000000000000000000000000000..cbe79e59629cad233e874cedbe28da52a1850ca6
Binary files /dev/null and b/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37 differ
diff --git a/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37.info b/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37.info
new file mode 100644
index 0000000000000000000000000000000000000000..07970e8f499d233fcfdafa36310ed9812f278419
Binary files /dev/null and b/Library/metadata/f4/f47e7a413153c4f4b88c5a2b1f7fea37.info differ
diff --git a/Library/metadata/f4/f4935fb862d54980b1bcbca942962642 b/Library/metadata/f4/f4935fb862d54980b1bcbca942962642
new file mode 100644
index 0000000000000000000000000000000000000000..f23e9bfdba5cf097eace153d627a9de79de7d185
Binary files /dev/null and b/Library/metadata/f4/f4935fb862d54980b1bcbca942962642 differ
diff --git a/Library/metadata/f4/f4935fb862d54980b1bcbca942962642.info b/Library/metadata/f4/f4935fb862d54980b1bcbca942962642.info
new file mode 100644
index 0000000000000000000000000000000000000000..47663e09610574e8d87443ccb96b2a2802b17b6a
Binary files /dev/null and b/Library/metadata/f4/f4935fb862d54980b1bcbca942962642.info differ
diff --git a/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b b/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b
new file mode 100644
index 0000000000000000000000000000000000000000..fa9c97063933f604919cb3af965e03c0f3e1e06c
Binary files /dev/null and b/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b differ
diff --git a/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b.info b/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b.info
new file mode 100644
index 0000000000000000000000000000000000000000..6632a136c0afc4adadcaaf7e18b2d8f93cc37495
Binary files /dev/null and b/Library/metadata/f4/f499e12eaeb145bf9022f581c0b7fa5b.info differ
diff --git a/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e b/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e
new file mode 100644
index 0000000000000000000000000000000000000000..2735f19dfefdccd9001f1c6f8dc890de6df24375
Binary files /dev/null and b/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e differ
diff --git a/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e.info b/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e.info
new file mode 100644
index 0000000000000000000000000000000000000000..b94db6a6cbf53020ea85d8356a866cd64cd0b29c
Binary files /dev/null and b/Library/metadata/f4/f4c7193663918411c8f78e3cf844cb9e.info differ
diff --git a/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8 b/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8
new file mode 100644
index 0000000000000000000000000000000000000000..4e7e8cfac09c30b6ba1860c0992df7c43091036b
Binary files /dev/null and b/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8 differ
diff --git a/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8.info b/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8.info
new file mode 100644
index 0000000000000000000000000000000000000000..42ec8ac31ed6610a1517299891ce2c00ec3d4057
Binary files /dev/null and b/Library/metadata/f5/f50a8792a52724345b71943ee2ff52f8.info differ
diff --git a/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045 b/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045
new file mode 100644
index 0000000000000000000000000000000000000000..0acc6f4c155c9ded9a307fdd87211680c7feaf06
Binary files /dev/null and b/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045 differ
diff --git a/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045.info b/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045.info
new file mode 100644
index 0000000000000000000000000000000000000000..53aeeb0b9ad2417690ae26880a9167bfadffa1ea
Binary files /dev/null and b/Library/metadata/f5/f53ba1c15d19fd34abacf443a6514045.info differ
diff --git a/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64 b/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64
new file mode 100644
index 0000000000000000000000000000000000000000..a2c5232fa2d32244590d21b391e9422704518ff9
Binary files /dev/null and b/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64 differ
diff --git a/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64.info b/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64.info
new file mode 100644
index 0000000000000000000000000000000000000000..03d4ed2814d2f4dc41d454269895f8813c893669
Binary files /dev/null and b/Library/metadata/f5/f5600e6ae5a1464da659eca36bef9d64.info differ
diff --git a/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4 b/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4
new file mode 100644
index 0000000000000000000000000000000000000000..3b740cde6c85b0d8c6c3a4a47ec1c125efb1d65f
Binary files /dev/null and b/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4 differ
diff --git a/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4.info b/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4.info
new file mode 100644
index 0000000000000000000000000000000000000000..4e89623688a6c899aa3b0f06881cff0e7509cbbf
Binary files /dev/null and b/Library/metadata/f5/f5b355aa2f884c148b650e442c42a6e4.info differ
diff --git a/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0 b/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0
new file mode 100644
index 0000000000000000000000000000000000000000..7ad39443b267887a4e41e58527b9a2cb8cd8dbce
Binary files /dev/null and b/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0 differ
diff --git a/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0.info b/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0.info
new file mode 100644
index 0000000000000000000000000000000000000000..dac04883b9f6066e65823489c7df9cd302bf2bbe
Binary files /dev/null and b/Library/metadata/f5/f5be2b8c262f47f48bd26dc7e27b39a0.info differ
diff --git a/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 b/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8
new file mode 100644
index 0000000000000000000000000000000000000000..5f4cda6cfee514288d88740c449512e597220f49
Binary files /dev/null and b/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 differ
diff --git a/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info b/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info
new file mode 100644
index 0000000000000000000000000000000000000000..311e931a918064329bd4b8c40b14b9f1c460b161
Binary files /dev/null and b/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info differ
diff --git a/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4 b/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4
new file mode 100644
index 0000000000000000000000000000000000000000..c2ee9bb5d2ef54e57d1ae9b1cf9c9d1d84451b6b
Binary files /dev/null and b/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4 differ
diff --git a/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4.info b/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4.info
new file mode 100644
index 0000000000000000000000000000000000000000..75b097bba895b038a14d861f2389200afa02d667
Binary files /dev/null and b/Library/metadata/f6/f68d88b9933cd4204925b22192bf15b4.info differ
diff --git a/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e b/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e
new file mode 100644
index 0000000000000000000000000000000000000000..a75c21cdaa9ce8e883addf35cb0fad9ac15c73b8
Binary files /dev/null and b/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e differ
diff --git a/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e.info b/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e.info
new file mode 100644
index 0000000000000000000000000000000000000000..1c032fb42b2eca727af55bdbd42a5ac5e39452fe
Binary files /dev/null and b/Library/metadata/f6/f695b5f9415c40b39ae877eaff41c96e.info differ
diff --git a/Library/metadata/f6/f6a734d3807597b46a96aa216412b846 b/Library/metadata/f6/f6a734d3807597b46a96aa216412b846
new file mode 100644
index 0000000000000000000000000000000000000000..13e8343b61e6da521f6279b60c169757c82dbd0e
Binary files /dev/null and b/Library/metadata/f6/f6a734d3807597b46a96aa216412b846 differ
diff --git a/Library/metadata/f6/f6a734d3807597b46a96aa216412b846.info b/Library/metadata/f6/f6a734d3807597b46a96aa216412b846.info
new file mode 100644
index 0000000000000000000000000000000000000000..1eacfe81f14beeeec0c392c60b9347c1e1aebbd6
Binary files /dev/null and b/Library/metadata/f6/f6a734d3807597b46a96aa216412b846.info differ
diff --git a/Library/metadata/f7/f70555f144d8491a825f0804e09c671c b/Library/metadata/f7/f70555f144d8491a825f0804e09c671c
new file mode 100644
index 0000000000000000000000000000000000000000..71425c6356887122cba9defa5ef65801e1b681e4
Binary files /dev/null and b/Library/metadata/f7/f70555f144d8491a825f0804e09c671c differ
diff --git a/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info b/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info
new file mode 100644
index 0000000000000000000000000000000000000000..df250ee94b545787a81bd494fc043c730ddbf7b9
Binary files /dev/null and b/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info differ
diff --git a/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af b/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af
new file mode 100644
index 0000000000000000000000000000000000000000..381668fd2480e14a606f9ed8814aeefe5897b1dd
Binary files /dev/null and b/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af differ
diff --git a/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af.info b/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af.info
new file mode 100644
index 0000000000000000000000000000000000000000..d791acf2050432815410e265f51c69d1920a3a94
Binary files /dev/null and b/Library/metadata/f7/f74142ec8a4cd4fb1b0ff6cf5c3075af.info differ
diff --git a/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122 b/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122
new file mode 100644
index 0000000000000000000000000000000000000000..dbcefcd459ed32f1e94e6895c630a861f809baa2
Binary files /dev/null and b/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122 differ
diff --git a/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122.info b/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122.info
new file mode 100644
index 0000000000000000000000000000000000000000..429760b935f57f98148745ee14249ca2cd21d2b1
Binary files /dev/null and b/Library/metadata/f7/f7a8357347c80dc69c08d0b1a05e2122.info differ
diff --git a/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574 b/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574
new file mode 100644
index 0000000000000000000000000000000000000000..3e12c9f90bd76ecc27b6097802973d3c47000cfa
Binary files /dev/null and b/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574 differ
diff --git a/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574.info b/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574.info
new file mode 100644
index 0000000000000000000000000000000000000000..0c7676f4185adb83de269dec65b3c1f3e120eea2
Binary files /dev/null and b/Library/metadata/f8/f824eec467fc3144f933a361b0f7e574.info differ
diff --git a/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9 b/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9
new file mode 100644
index 0000000000000000000000000000000000000000..abebf7f31cc87179d3e61e6513a225c663ebd429
Binary files /dev/null and b/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9 differ
diff --git a/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9.info b/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9.info
new file mode 100644
index 0000000000000000000000000000000000000000..64c8ec5f6d7a03ce1f52762fcc24e5a075b3f595
Binary files /dev/null and b/Library/metadata/f8/f851ca8f9604f442aafccf60a6713ce9.info differ
diff --git a/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5 b/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5
new file mode 100644
index 0000000000000000000000000000000000000000..355c5c7e1c5701e7f33075612baa207e339a95c0
Binary files /dev/null and b/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5 differ
diff --git a/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5.info b/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5.info
new file mode 100644
index 0000000000000000000000000000000000000000..be5c771b1d418210e43c9df3ef98cb38546693be
Binary files /dev/null and b/Library/metadata/f8/f8e6a2d47aba4c6c9b3c5a72d9f48da5.info differ
diff --git a/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f b/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f
new file mode 100644
index 0000000000000000000000000000000000000000..3a7dc16d6ee41aabd5823038835bc3b326fd06fe
Binary files /dev/null and b/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f differ
diff --git a/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f.info b/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f.info
new file mode 100644
index 0000000000000000000000000000000000000000..e12a39905c6feb772274abeb996e974ca375217f
Binary files /dev/null and b/Library/metadata/f8/f8eca3a711f4842eba0c52ea9885ef7f.info differ
diff --git a/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9 b/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9
new file mode 100644
index 0000000000000000000000000000000000000000..e478e04a7d28037f6a8c46f3ed8187cdd11c4ff8
Binary files /dev/null and b/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9 differ
diff --git a/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9.info b/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9.info
new file mode 100644
index 0000000000000000000000000000000000000000..733707acc560b15c6288ed30e5d37fb741d417f7
Binary files /dev/null and b/Library/metadata/f9/f93b94d70e9edc841a2f91d115dc39f9.info differ
diff --git a/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8 b/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8
new file mode 100644
index 0000000000000000000000000000000000000000..5ffe8d2359223a043049aac4c659519c32f19496
Binary files /dev/null and b/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8 differ
diff --git a/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8.info b/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8.info
new file mode 100644
index 0000000000000000000000000000000000000000..a08b6c23407e30d6f0e80a75a583c132d3670935
Binary files /dev/null and b/Library/metadata/f9/f944311c8fff2479fa3ba741f6039fc8.info differ
diff --git a/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338 b/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338
new file mode 100644
index 0000000000000000000000000000000000000000..42da9a58c02e551275618bdfdf3b1b01eb9b62f8
Binary files /dev/null and b/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338 differ
diff --git a/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338.info b/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338.info
new file mode 100644
index 0000000000000000000000000000000000000000..5c6f1f0c4260bd6eef34b261569b12d50fd46bba
Binary files /dev/null and b/Library/metadata/fa/fa27413e9edb06a6058d6c894eca0338.info differ
diff --git a/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f b/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f
new file mode 100644
index 0000000000000000000000000000000000000000..c5636c406fddfe7749e650d6d017db0a5316c61b
Binary files /dev/null and b/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f differ
diff --git a/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f.info b/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f.info
new file mode 100644
index 0000000000000000000000000000000000000000..b62c36dfafa3dd36732d21045386daff4cc0d940
Binary files /dev/null and b/Library/metadata/fa/fa469c8648c10b14bb67833db45f245f.info differ
diff --git a/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56 b/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56
new file mode 100644
index 0000000000000000000000000000000000000000..c9b699eb6a308d402cff28376bf44a2da409e1c5
Binary files /dev/null and b/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56 differ
diff --git a/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56.info b/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56.info
new file mode 100644
index 0000000000000000000000000000000000000000..187d61bf0c4298210d9550590feba1346e4627aa
Binary files /dev/null and b/Library/metadata/fa/fa4ff09b6aaaa4df29a884efa38bce56.info differ
diff --git a/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5 b/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5
new file mode 100644
index 0000000000000000000000000000000000000000..41c76693ad3c5ae64d5e66256171924734a59e04
Binary files /dev/null and b/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5 differ
diff --git a/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5.info b/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5.info
new file mode 100644
index 0000000000000000000000000000000000000000..6ec0fd1059b471c52d118777726c8a1f96978ca5
Binary files /dev/null and b/Library/metadata/fa/fa6bd40a216346b783a4cce741d277a5.info differ
diff --git a/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9 b/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9
new file mode 100644
index 0000000000000000000000000000000000000000..a2ebee119a2770614a1ef09276f51c5785634d0f
Binary files /dev/null and b/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9 differ
diff --git a/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9.info b/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9.info
new file mode 100644
index 0000000000000000000000000000000000000000..3348ce39114ab501f6fc7e73209fea59c72337a9
Binary files /dev/null and b/Library/metadata/fb/fb5730e24283d0c489e5c7d0bee023d9.info differ
diff --git a/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8 b/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8
new file mode 100644
index 0000000000000000000000000000000000000000..123d8e58b62ba0dfb1a2bf11eefa7ecb5ee586f7
Binary files /dev/null and b/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8 differ
diff --git a/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8.info b/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8.info
new file mode 100644
index 0000000000000000000000000000000000000000..24b38459f78677af33a55ff5e1caa16bf25bb70e
Binary files /dev/null and b/Library/metadata/fb/fb750bc39c1d1d94eac4f5add3e227a8.info differ
diff --git a/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e b/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e
new file mode 100644
index 0000000000000000000000000000000000000000..73f8bc9cee04726417b18c56d3dd669e85870b36
Binary files /dev/null and b/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e differ
diff --git a/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e.info b/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e.info
new file mode 100644
index 0000000000000000000000000000000000000000..9eea96d14eb5862a3f6cf5ada5218ec4e5ea4e69
Binary files /dev/null and b/Library/metadata/fb/fb94a85578dd49141ac3d93064efaa3e.info differ
diff --git a/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3 b/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3
new file mode 100644
index 0000000000000000000000000000000000000000..298b7a80cc49a49b9de194d19d022fdffafec871
Binary files /dev/null and b/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3 differ
diff --git a/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3.info b/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3.info
new file mode 100644
index 0000000000000000000000000000000000000000..2fe48134c96c01d8af6f9c89692715077e3c927f
Binary files /dev/null and b/Library/metadata/fb/fbd6a683bee77e14baf74f2fe40cb6e3.info differ
diff --git a/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563 b/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563
new file mode 100644
index 0000000000000000000000000000000000000000..919c34a100143bab3b5b536744de5e15aae3021a
Binary files /dev/null and b/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563 differ
diff --git a/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563.info b/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563.info
new file mode 100644
index 0000000000000000000000000000000000000000..8a7604cf4d19d080eb8da4453229f621c888832b
Binary files /dev/null and b/Library/metadata/fc/fc3a810351931f5e6183e16b9beb5563.info differ
diff --git a/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe b/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe
new file mode 100644
index 0000000000000000000000000000000000000000..fc4682c8097c230ed636c52e2a5cbd59926823ff
Binary files /dev/null and b/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe differ
diff --git a/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe.info b/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe.info
new file mode 100644
index 0000000000000000000000000000000000000000..a49cb71668ee15b2f8c58ce90658f8942a50d028
Binary files /dev/null and b/Library/metadata/fc/fc46f91ea1e8e4ca2ab693fef9156dbe.info differ
diff --git a/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a b/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a
new file mode 100644
index 0000000000000000000000000000000000000000..f22b9b80c85e95e6c59b7e0959ad9d0231ebc878
Binary files /dev/null and b/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a differ
diff --git a/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a.info b/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a.info
new file mode 100644
index 0000000000000000000000000000000000000000..ff31018836036631fb0f2ddb5a10d18706fe334d
Binary files /dev/null and b/Library/metadata/fc/fcc60c1d6bb544d9b712b652f418ff3a.info differ
diff --git a/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630 b/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630
new file mode 100644
index 0000000000000000000000000000000000000000..b34003d14308d9ff6a891ad8a48f8000a385029a
Binary files /dev/null and b/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630 differ
diff --git a/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630.info b/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630.info
new file mode 100644
index 0000000000000000000000000000000000000000..37519b3eb72bfe26884531749209f3bcaf37442c
Binary files /dev/null and b/Library/metadata/fd/fd0a39b4d296d4d509b4f1dbd08d0630.info differ
diff --git a/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88 b/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88
new file mode 100644
index 0000000000000000000000000000000000000000..d8272de8a418b9ed6d6aef80726f0d140c9b2c16
Binary files /dev/null and b/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88 differ
diff --git a/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88.info b/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88.info
new file mode 100644
index 0000000000000000000000000000000000000000..8ed9e09d44f86d849df73dfea5b379fa6f74c303
Binary files /dev/null and b/Library/metadata/fd/fd382b8abbd6145c29e32af0e2a26d88.info differ
diff --git a/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7 b/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7
new file mode 100644
index 0000000000000000000000000000000000000000..a078da7e3b05fdec6f4078edaa8413dac86cc28b
Binary files /dev/null and b/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7 differ
diff --git a/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7.info b/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7.info
new file mode 100644
index 0000000000000000000000000000000000000000..34db3616d38530c0cb29b6225ae4115a2a2d904a
Binary files /dev/null and b/Library/metadata/fd/fd871a8be47119612f7c254e96a822b7.info differ
diff --git a/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c b/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c
new file mode 100644
index 0000000000000000000000000000000000000000..17ceffd12d5ec4ca202a46dcc686ba92164a0174
Binary files /dev/null and b/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c differ
diff --git a/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c.info b/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c.info
new file mode 100644
index 0000000000000000000000000000000000000000..ac9f6b9aa7548d16ba5a562a66d2a2a4952af2a2
Binary files /dev/null and b/Library/metadata/fe/fe684bbd80eab45778b9eb316893ff7c.info differ
diff --git a/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33 b/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33
new file mode 100644
index 0000000000000000000000000000000000000000..dc9685b842ae0cc4705a4d09c20947895a5d3953
Binary files /dev/null and b/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33 differ
diff --git a/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33.info b/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33.info
new file mode 100644
index 0000000000000000000000000000000000000000..468babccddf0734bd62f109a7da83b751b868ccd
Binary files /dev/null and b/Library/metadata/fe/fea24dc53b50441a9b2a8f9473fede33.info differ
diff --git a/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8 b/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8
new file mode 100644
index 0000000000000000000000000000000000000000..1ea91b69acd9f9c835e708eab9d49c86bc69f07a
Binary files /dev/null and b/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8 differ
diff --git a/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8.info b/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8.info
new file mode 100644
index 0000000000000000000000000000000000000000..044ecf7168f97473a307937ba9465680baa896ce
Binary files /dev/null and b/Library/metadata/fe/fea49a0730244a98bf1087f7ca9410a8.info differ
diff --git a/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18 b/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18
new file mode 100644
index 0000000000000000000000000000000000000000..3daff00f7936d01a8db44d84ec95482dab6c4d50
Binary files /dev/null and b/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18 differ
diff --git a/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18.info b/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18.info
new file mode 100644
index 0000000000000000000000000000000000000000..e9f330ec928b4f8b743064bbf8233194260dbb1f
Binary files /dev/null and b/Library/metadata/fe/fec197bad419341558f81f2ec8a05e18.info differ
diff --git a/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4 b/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4
new file mode 100644
index 0000000000000000000000000000000000000000..09d8e59ae6067c701f3cc8a7e9cd675d1c8d898b
Binary files /dev/null and b/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4 differ
diff --git a/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4.info b/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4.info
new file mode 100644
index 0000000000000000000000000000000000000000..367ed7ad51f826c7b40df4e9ef73749865fae399
Binary files /dev/null and b/Library/metadata/fe/fed9dda667cab45d398d06402bba03f4.info differ
diff --git a/Library/shadercompiler-UnityShaderCompiler.exe0.log b/Library/shadercompiler-UnityShaderCompiler.exe0.log
new file mode 100644
index 0000000000000000000000000000000000000000..8f33efa200c863cb3927e27537125915f0123d5c
--- /dev/null
+++ b/Library/shadercompiler-UnityShaderCompiler.exe0.log
@@ -0,0 +1,350 @@
+Base path: C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data
+Cmd: initializeCompiler
+Cmd: compileSnippet
+  api=4 type=0 insize=4999 outsize=3686 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=4999 outsize=486 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2616 outsize=1002 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2026 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2026 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2026 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2762 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2162 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2786 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH VERTEXLIGHT_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2162 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2786 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1346 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1498 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1346 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1498 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD POINT ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD SPOT PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD POINT_COOKIE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1670 kw=UNITY_PASS_FORWARDADD POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=2066 kw=UNITY_PASS_FORWARDADD SPOT ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1914 kw=UNITY_PASS_FORWARDADD SPOT PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1822 kw=UNITY_PASS_FORWARDADD POINT ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=16820 outsize=1198 kw=UNITY_PASS_PREPASSBASE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=16820 outsize=362 kw=UNITY_PASS_PREPASSBASE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=710 kw=UNITY_PASS_PREPASSFINAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=838 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=686 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=862 kw=UNITY_PASS_PREPASSFINAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=850 kw=UNITY_PASS_DEFERRED pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=978 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=850 kw=UNITY_PASS_DEFERRED PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=1002 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=914 outsize=1550 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=914 outsize=478 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1179 outsize=1658 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1179 outsize=682 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1062 outsize=2890 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1062 outsize=502 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1186 outsize=3194 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1186 outsize=670 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1128 outsize=1978 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1128 outsize=478 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1337 outsize=2078 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1337 outsize=670 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1344 outsize=670 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1206 outsize=1490 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1206 outsize=646 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1251 outsize=3118 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1251 outsize=718 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1238 outsize=2962 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1238 outsize=718 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2090 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2898 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=3042 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=1790 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2082 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2634 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11816 outsize=1258 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11816 outsize=2134 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11820 outsize=1258 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11820 outsize=2290 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11846 outsize=1258 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11846 outsize=5706 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11850 outsize=1258 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11850 outsize=5578 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1402 outsize=690 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1402 outsize=974 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1605 outsize=690 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1605 outsize=298 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1901 outsize=1302 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1901 outsize=298 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL_COOKIE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL SHADOWS_SCREEN UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3226 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3378 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3966 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3202 kw=POINT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3446 kw=POINT_COOKIE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3598 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4186 kw=POINT_COOKIE SHADOWS_CUBE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1005 outsize=650 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1005 outsize=350 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=3555 outsize=1118 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=3555 outsize=2946 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1224 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1224 outsize=350 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=5814 outsize=710 kw=UNITY_PASS_MOTIONVECTORS pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=5826 outsize=846 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=5826 outsize=1346 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=5835 outsize=846 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=5835 outsize=1402 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1590 outsize=790 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1590 outsize=374 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1895 outsize=790 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1895 outsize=394 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1476 outsize=474 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1686 outsize=694 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1686 outsize=426 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2525 outsize=694 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2525 outsize=706 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1842 outsize=1082 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1842 outsize=798 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1701 outsize=1094 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1701 outsize=522 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1341 outsize=790 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1341 outsize=402 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1878 outsize=1082 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1878 outsize=778 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=4971 outsize=1138 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=4971 outsize=3494 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1841 outsize=650 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1841 outsize=422 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2285 outsize=858 kw=UNITY_UI_CLIP_RECT UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2313 outsize=858 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2313 outsize=542 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=927 outsize=682 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=927 outsize=254 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1148 outsize=790 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1148 outsize=466 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=977 outsize=1886 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=977 outsize=254 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1155 outsize=2762 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1155 outsize=454 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1097 outsize=1090 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1097 outsize=254 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1306 outsize=1190 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1306 outsize=454 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1312 outsize=1190 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1312 outsize=454 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1181 outsize=1266 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1181 outsize=430 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1220 outsize=2250 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1220 outsize=502 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1207 outsize=2094 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1791 outsize=450 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7565 outsize=754 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7565 outsize=742 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7572 outsize=878 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7563 outsize=754 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7563 outsize=914 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7563 outsize=754 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7563 outsize=374 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7567 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7567 outsize=374 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7566 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7566 outsize=482 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7568 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7568 outsize=1238 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7566 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7566 outsize=1398 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7567 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7567 outsize=626 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7565 outsize=750 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=7565 outsize=798 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
diff --git a/Library/shadercompiler-UnityShaderCompiler.exe1.log b/Library/shadercompiler-UnityShaderCompiler.exe1.log
new file mode 100644
index 0000000000000000000000000000000000000000..977ea15e589b1bb9227c22830b59c38c63b260c9
--- /dev/null
+++ b/Library/shadercompiler-UnityShaderCompiler.exe1.log
@@ -0,0 +1,170 @@
+Base path: C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data
+Cmd: initializeCompiler
+Cmd: compileSnippet
+  api=4 type=0 insize=4999 outsize=3294 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=4999 outsize=486 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1814 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2762 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH VERTEXLIGHT_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1814 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2666 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1934 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2786 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2162 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2898 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3058 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3210 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1498 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3210 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD POINT_COOKIE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1494 kw=UNITY_PASS_FORWARDADD DIRECTIONAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD POINT_COOKIE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD SPOT ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1534 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1822 kw=UNITY_PASS_FORWARDADD POINT ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1274 kw=UNITY_PASS_FORWARDADD DIRECTIONAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1534 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1914 kw=UNITY_PASS_FORWARDADD POINT_COOKIE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=16820 outsize=1334 kw=UNITY_PASS_PREPASSBASE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=16820 outsize=362 kw=UNITY_PASS_PREPASSBASE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=686 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=862 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=686 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=838 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=850 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=1002 kw=UNITY_PASS_DEFERRED ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=850 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=1002 kw=UNITY_PASS_DEFERRED ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1145 outsize=182 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1344 outsize=2102 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2438 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2050 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2658 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2414 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=4234 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2878 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11816 outsize=1258 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11816 outsize=2418 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11820 outsize=1258 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11820 outsize=1142 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11846 outsize=1258 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11846 outsize=4538 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11850 outsize=1258 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11850 outsize=4410 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT SHADOWS_CUBE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3470 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3246 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3622 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4590 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=5510 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4322 kw=POINT SHADOWS_CUBE SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=5814 outsize=1322 kw=UNITY_PASS_MOTIONVECTORS pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=725 outsize=1070 kw=PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1841 outsize=862 kw=ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1841 outsize=422 kw=PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2285 outsize=542 kw=UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2313 outsize=858 kw=UNITY_UI_CLIP_RECT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2313 outsize=858 kw=UNITY_UI_CLIP_RECT UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1470 outsize=690 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
diff --git a/Library/shadercompiler-UnityShaderCompiler.exe2.log b/Library/shadercompiler-UnityShaderCompiler.exe2.log
new file mode 100644
index 0000000000000000000000000000000000000000..4862ecb3ce4f7f7fc158b7aae36ba55f14273f8c
--- /dev/null
+++ b/Library/shadercompiler-UnityShaderCompiler.exe2.log
@@ -0,0 +1,178 @@
+Base path: C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data
+Cmd: initializeCompiler
+Cmd: compileSnippet
+  api=4 type=0 insize=4999 outsize=3866 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2762 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL VERTEXLIGHT_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2666 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH VERTEXLIGHT_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1814 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2666 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1934 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2898 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL LIGHTPROBE_SH VERTEXLIGHT_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1934 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2898 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3058 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1346 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3058 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1358 kw=UNITY_PASS_FORWARDADD DIRECTIONAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD POINT ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1762 kw=UNITY_PASS_FORWARDADD POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1426 kw=UNITY_PASS_FORWARDADD DIRECTIONAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1686 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1426 kw=UNITY_PASS_FORWARDADD DIRECTIONAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=2066 kw=UNITY_PASS_FORWARDADD SPOT ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=16820 outsize=1198 kw=UNITY_PASS_PREPASSBASE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=16820 outsize=362 kw=UNITY_PASS_PREPASSBASE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=710 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=838 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=710 kw=UNITY_PASS_PREPASSFINAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=862 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=826 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=1002 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=826 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=978 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=1814 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2106 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2310 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=3286 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2066 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2026 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2286 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=3262 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11816 outsize=1258 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11816 outsize=1270 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11820 outsize=1258 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11820 outsize=2014 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11846 outsize=1258 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11846 outsize=5422 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11850 outsize=1258 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11850 outsize=4410 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT SHADOWS_CUBE SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3570 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=5534 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4210 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3546 kw=SPOT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4186 kw=SPOT SHADOWS_DEPTH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3942 kw=POINT SHADOWS_CUBE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1224 outsize=346 kw=UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1476 outsize=690 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=725 outsize=1070 kw=ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=725 outsize=574 kw=ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1841 outsize=862 kw=PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1841 outsize=574 kw=ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2285 outsize=858 kw=UNITY_UI_CLIP_RECT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2285 outsize=666 kw=UNITY_UI_CLIP_RECT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2313 outsize=858 kw=UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2313 outsize=638 kw=UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1207 outsize=502 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1791 outsize=690 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=7572 outsize=754 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
diff --git a/Library/shadercompiler-UnityShaderCompiler.exe3.log b/Library/shadercompiler-UnityShaderCompiler.exe3.log
new file mode 100644
index 0000000000000000000000000000000000000000..dc28377569c7faa76980b1423914cc7d8eec661f
--- /dev/null
+++ b/Library/shadercompiler-UnityShaderCompiler.exe3.log
@@ -0,0 +1,174 @@
+Base path: C:/Program Files/Unity/Hub/Editor/2018.4.18f1/Editor/Data
+Cmd: initializeCompiler
+Cmd: compileSnippet
+  api=4 type=1 insize=4999 outsize=486 kw=POINT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2616 outsize=574 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1814 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2666 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN VERTEXLIGHT_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2762 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2162 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2898 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL VERTEXLIGHT_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=1934 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=35368 outsize=2786 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN LIGHTPROBE_SH VERTEXLIGHT_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=1498 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3210 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3058 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=35368 outsize=3210 kw=UNITY_PASS_FORWARDBASE DIRECTIONAL SHADOWS_SCREEN ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1546 kw=UNITY_PASS_FORWARDADD SPOT ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD POINT PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1494 kw=UNITY_PASS_FORWARDADD DIRECTIONAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=19124 outsize=1682 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1914 kw=UNITY_PASS_FORWARDADD SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1914 kw=UNITY_PASS_FORWARDADD POINT_COOKIE ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1670 kw=UNITY_PASS_FORWARDADD POINT PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1762 kw=UNITY_PASS_FORWARDADD POINT_COOKIE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=19124 outsize=1686 kw=UNITY_PASS_FORWARDADD DIRECTIONAL_COOKIE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=16820 outsize=1334 kw=UNITY_PASS_PREPASSBASE ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=16820 outsize=362 kw=UNITY_PASS_PREPASSBASE PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2190 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=26926 outsize=2310 kw=UNITY_PASS_PREPASSFINAL ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=686 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=862 kw=UNITY_PASS_PREPASSFINAL ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=710 kw=UNITY_PASS_PREPASSFINAL LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=26926 outsize=838 kw=UNITY_PASS_PREPASSFINAL UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2026 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=28520 outsize=2162 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=826 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=978 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=826 kw=UNITY_PASS_DEFERRED LIGHTPROBE_SH UNITY_HDR_ON PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=28520 outsize=978 kw=UNITY_PASS_DEFERRED UNITY_HDR_ON ETC1_EXTERNAL_ALPHA PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1145 outsize=538 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1569 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2334 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=4258 kw=SPOT SHADOWS_DEPTH SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1569 outsize=2902 kw=POINT_COOKIE SHADOWS_CUBE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=SPOT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=DIRECTIONAL_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1562 outsize=1118 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2310 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=2874 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1562 outsize=3018 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11816 outsize=1258 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11816 outsize=1270 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11820 outsize=1258 kw=SHADOWS_SPLIT_SPHERES pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11820 outsize=1142 kw=SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11846 outsize=1258 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11846 outsize=4538 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=11850 outsize=1258 kw=SHADOWS_SPLIT_SPHERES SHADOWS_SINGLE_CASCADE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=11850 outsize=5302 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=SPOT SHADOWS_DEPTH UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=DIRECTIONAL_COOKIE SHADOWS_SCREEN UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2104 outsize=1118 kw=POINT_COOKIE SHADOWS_CUBE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3006 kw=DIRECTIONAL pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4210 kw=SPOT SHADOWS_DEPTH pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4346 kw=POINT SHADOWS_CUBE SHADOWS_SOFT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=2982 kw=DIRECTIONAL UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3222 kw=DIRECTIONAL_COOKIE UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=3354 kw=DIRECTIONAL SHADOWS_SCREEN UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2104 outsize=4566 kw=POINT_COOKIE SHADOWS_CUBE SHADOWS_SOFT UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1224 outsize=750 kw=UNITY_HDR_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=725 outsize=422 kw=PIXELSNAP_ON pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=1841 outsize=650 kw=ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1841 outsize=574 kw=ETC1_EXTERNAL_ALPHA pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2285 outsize=858 kw=UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2285 outsize=762 kw=UNITY_UI_CLIP_RECT UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=0 insize=2313 outsize=858 kw=UNITY_UI_CLIP_RECT UNITY_UI_ALPHACLIP pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=2313 outsize=762 kw=UNITY_UI_CLIP_RECT pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
+Cmd: compileSnippet
+  api=4 type=1 insize=1470 outsize=534 kw= pd=UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR ok=1
diff --git a/Logs/Packages-Update.log b/Logs/Packages-Update.log
new file mode 100644
index 0000000000000000000000000000000000000000..ed80feebe596f88684723b10fc380710ad53f2aa
--- /dev/null
+++ b/Logs/Packages-Update.log
@@ -0,0 +1,43 @@
+
+=== Tue Mar 24 08:05:59 2020
+
+Packages were changed.
+Update Mode: mergeDefaultDependencies
+
+The following packages were added:
+  com.unity.analytics@3.2.3
+  com.unity.purchasing@2.0.3
+  com.unity.ads@2.0.8
+  com.unity.textmeshpro@1.4.1
+  com.unity.package-manager-ui@2.0.8
+  com.unity.collab-proxy@1.2.15
+  com.unity.modules.ai@1.0.0
+  com.unity.modules.animation@1.0.0
+  com.unity.modules.assetbundle@1.0.0
+  com.unity.modules.audio@1.0.0
+  com.unity.modules.cloth@1.0.0
+  com.unity.modules.director@1.0.0
+  com.unity.modules.imageconversion@1.0.0
+  com.unity.modules.imgui@1.0.0
+  com.unity.modules.jsonserialize@1.0.0
+  com.unity.modules.particlesystem@1.0.0
+  com.unity.modules.physics@1.0.0
+  com.unity.modules.physics2d@1.0.0
+  com.unity.modules.screencapture@1.0.0
+  com.unity.modules.terrain@1.0.0
+  com.unity.modules.terrainphysics@1.0.0
+  com.unity.modules.tilemap@1.0.0
+  com.unity.modules.ui@1.0.0
+  com.unity.modules.uielements@1.0.0
+  com.unity.modules.umbra@1.0.0
+  com.unity.modules.unityanalytics@1.0.0
+  com.unity.modules.unitywebrequest@1.0.0
+  com.unity.modules.unitywebrequestassetbundle@1.0.0
+  com.unity.modules.unitywebrequestaudio@1.0.0
+  com.unity.modules.unitywebrequesttexture@1.0.0
+  com.unity.modules.unitywebrequestwww@1.0.0
+  com.unity.modules.vehicles@1.0.0
+  com.unity.modules.video@1.0.0
+  com.unity.modules.vr@1.0.0
+  com.unity.modules.wind@1.0.0
+  com.unity.modules.xr@1.0.0
diff --git a/Packages/manifest.json b/Packages/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..49d6c9e0489d71cabf9d6828d84665dfd9b7bd19
--- /dev/null
+++ b/Packages/manifest.json
@@ -0,0 +1,40 @@
+{
+  "dependencies": {
+    "com.unity.ads": "2.0.8",
+    "com.unity.analytics": "3.2.3",
+    "com.unity.collab-proxy": "1.2.15",
+    "com.unity.package-manager-ui": "2.0.8",
+    "com.unity.purchasing": "2.0.3",
+    "com.unity.textmeshpro": "1.4.1",
+    "com.unity.modules.ai": "1.0.0",
+    "com.unity.modules.animation": "1.0.0",
+    "com.unity.modules.assetbundle": "1.0.0",
+    "com.unity.modules.audio": "1.0.0",
+    "com.unity.modules.cloth": "1.0.0",
+    "com.unity.modules.director": "1.0.0",
+    "com.unity.modules.imageconversion": "1.0.0",
+    "com.unity.modules.imgui": "1.0.0",
+    "com.unity.modules.jsonserialize": "1.0.0",
+    "com.unity.modules.particlesystem": "1.0.0",
+    "com.unity.modules.physics": "1.0.0",
+    "com.unity.modules.physics2d": "1.0.0",
+    "com.unity.modules.screencapture": "1.0.0",
+    "com.unity.modules.terrain": "1.0.0",
+    "com.unity.modules.terrainphysics": "1.0.0",
+    "com.unity.modules.tilemap": "1.0.0",
+    "com.unity.modules.ui": "1.0.0",
+    "com.unity.modules.uielements": "1.0.0",
+    "com.unity.modules.umbra": "1.0.0",
+    "com.unity.modules.unityanalytics": "1.0.0",
+    "com.unity.modules.unitywebrequest": "1.0.0",
+    "com.unity.modules.unitywebrequestassetbundle": "1.0.0",
+    "com.unity.modules.unitywebrequestaudio": "1.0.0",
+    "com.unity.modules.unitywebrequesttexture": "1.0.0",
+    "com.unity.modules.unitywebrequestwww": "1.0.0",
+    "com.unity.modules.vehicles": "1.0.0",
+    "com.unity.modules.video": "1.0.0",
+    "com.unity.modules.vr": "1.0.0",
+    "com.unity.modules.wind": "1.0.0",
+    "com.unity.modules.xr": "1.0.0"
+  }
+}
diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..4f31e74482c3d4d56765906783bd5e3145a44679
--- /dev/null
+++ b/ProjectSettings/AudioManager.asset
@@ -0,0 +1,17 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!11 &1
+AudioManager:
+  m_ObjectHideFlags: 0
+  m_Volume: 1
+  Rolloff Scale: 1
+  Doppler Factor: 1
+  Default Speaker Mode: 2
+  m_SampleRate: 0
+  m_DSPBufferSize: 1024
+  m_VirtualVoiceCount: 512
+  m_RealVoiceCount: 32
+  m_SpatializerPlugin: 
+  m_AmbisonicDecoderPlugin: 
+  m_DisableAudio: 0
+  m_VirtualizeEffects: 1
diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..e7886b266a005f4d9d80f2fef8d1649dcfd3ed2b
--- /dev/null
+++ b/ProjectSettings/ClusterInputManager.asset
@@ -0,0 +1,6 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!236 &1
+ClusterInputManager:
+  m_ObjectHideFlags: 0
+  m_Inputs: []
diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..b3c263d37b6ad4db52bcc2926c22abce4c79a72f
--- /dev/null
+++ b/ProjectSettings/DynamicsManager.asset
@@ -0,0 +1,30 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!55 &1
+PhysicsManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 8
+  m_Gravity: {x: 0, y: -9.81, z: 0}
+  m_DefaultMaterial: {fileID: 0}
+  m_BounceThreshold: 2
+  m_SleepThreshold: 0.005
+  m_DefaultContactOffset: 0.01
+  m_DefaultSolverIterations: 6
+  m_DefaultSolverVelocityIterations: 1
+  m_QueriesHitBackfaces: 0
+  m_QueriesHitTriggers: 1
+  m_EnableAdaptiveForce: 0
+  m_ClothInterCollisionDistance: 0
+  m_ClothInterCollisionStiffness: 0
+  m_ContactsGeneration: 1
+  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+  m_AutoSimulation: 1
+  m_AutoSyncTransforms: 0
+  m_ReuseCollisionCallbacks: 1
+  m_ClothInterCollisionSettingsToggle: 0
+  m_ContactPairsMode: 0
+  m_BroadphaseType: 0
+  m_WorldBounds:
+    m_Center: {x: 0, y: 0, z: 0}
+    m_Extent: {x: 250, y: 250, z: 250}
+  m_WorldSubdivisions: 8
diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..bffcd66dab307ad02079aa3d805bdcc1dfe3e00f
--- /dev/null
+++ b/ProjectSettings/EditorBuildSettings.asset
@@ -0,0 +1,17 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1045 &1
+EditorBuildSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Scenes:
+  - enabled: 1
+    path: Assets/Scenes/MainMenu.unity
+    guid: 9768f82ea595f7d4a8d7ef0994db7be7
+  - enabled: 1
+    path: Assets/Scenes/SampleScene.unity
+    guid: df0c188f18eb59d418206508b45196b7
+  - enabled: 1
+    path: Assets/Scenes/Scoreboard.unity
+    guid: b6c7db7dacd591844967b34bde3b0d08
+  m_configObjects: {}
diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..8d9e83b05c5dd73d991a486fd03ca80dd3a4cb53
--- /dev/null
+++ b/ProjectSettings/EditorSettings.asset
@@ -0,0 +1,21 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!159 &1
+EditorSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 7
+  m_ExternalVersionControlSupport: Visible Meta Files
+  m_SerializationMode: 2
+  m_LineEndingsForNewScripts: 2
+  m_DefaultBehaviorMode: 1
+  m_SpritePackerMode: 4
+  m_SpritePackerPaddingPower: 1
+  m_EtcTextureCompressorBehavior: 1
+  m_EtcTextureFastCompressor: 1
+  m_EtcTextureNormalCompressor: 2
+  m_EtcTextureBestCompressor: 4
+  m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd
+  m_ProjectGenerationRootNamespace: 
+  m_UserGeneratedProjectSuffix: 
+  m_CollabEditorSettings:
+    inProgressEnabled: 1
diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..ce1e58e65dcc9fb8a9d901d2ce5c2415435bb9f0
--- /dev/null
+++ b/ProjectSettings/GraphicsSettings.asset
@@ -0,0 +1,61 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!30 &1
+GraphicsSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 12
+  m_Deferred:
+    m_Mode: 1
+    m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
+  m_DeferredReflections:
+    m_Mode: 1
+    m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
+  m_ScreenSpaceShadows:
+    m_Mode: 1
+    m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
+  m_LegacyDeferred:
+    m_Mode: 1
+    m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}
+  m_DepthNormals:
+    m_Mode: 1
+    m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
+  m_MotionVectors:
+    m_Mode: 1
+    m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
+  m_LightHalo:
+    m_Mode: 1
+    m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
+  m_LensFlare:
+    m_Mode: 1
+    m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
+  m_AlwaysIncludedShaders:
+  - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0}
+  - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0}
+  m_PreloadedShaders: []
+  m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
+    type: 0}
+  m_CustomRenderPipeline: {fileID: 0}
+  m_TransparencySortMode: 0
+  m_TransparencySortAxis: {x: 0, y: 0, z: 1}
+  m_DefaultRenderingPath: 1
+  m_DefaultMobileRenderingPath: 1
+  m_TierSettings: []
+  m_LightmapStripping: 0
+  m_FogStripping: 0
+  m_InstancingStripping: 0
+  m_LightmapKeepPlain: 1
+  m_LightmapKeepDirCombined: 1
+  m_LightmapKeepDynamicPlain: 1
+  m_LightmapKeepDynamicDirCombined: 1
+  m_LightmapKeepShadowMask: 1
+  m_LightmapKeepSubtractive: 1
+  m_FogKeepLinear: 1
+  m_FogKeepExp: 1
+  m_FogKeepExp2: 1
+  m_AlbedoSwatchInfos: []
+  m_LightsUseLinearIntensity: 0
+  m_LightsUseColorTemperature: 0
+  m_LogWhenShaderIsCompiled: 0
diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..17c8f538e2152c0a0310b4870979eeecece2153c
--- /dev/null
+++ b/ProjectSettings/InputManager.asset
@@ -0,0 +1,295 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!13 &1
+InputManager:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Axes:
+  - serializedVersion: 3
+    m_Name: Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: left
+    positiveButton: right
+    altNegativeButton: a
+    altPositiveButton: d
+    gravity: 3
+    dead: 0.001
+    sensitivity: 3
+    snap: 1
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: down
+    positiveButton: up
+    altNegativeButton: s
+    altPositiveButton: w
+    gravity: 3
+    dead: 0.001
+    sensitivity: 3
+    snap: 1
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire1
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left ctrl
+    altNegativeButton: 
+    altPositiveButton: mouse 0
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire2
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left alt
+    altNegativeButton: 
+    altPositiveButton: mouse 1
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire3
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: left shift
+    altNegativeButton: 
+    altPositiveButton: mouse 2
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Jump
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: space
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse X
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse Y
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 1
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Mouse ScrollWheel
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0
+    sensitivity: 0.1
+    snap: 0
+    invert: 0
+    type: 1
+    axis: 2
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Horizontal
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0.19
+    sensitivity: 1
+    snap: 0
+    invert: 0
+    type: 2
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Vertical
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: 
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 0
+    dead: 0.19
+    sensitivity: 1
+    snap: 0
+    invert: 1
+    type: 2
+    axis: 1
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire1
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 0
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire2
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 1
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Fire3
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 2
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Jump
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: joystick button 3
+    altNegativeButton: 
+    altPositiveButton: 
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Submit
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: return
+    altNegativeButton: 
+    altPositiveButton: joystick button 0
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Submit
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: enter
+    altNegativeButton: 
+    altPositiveButton: space
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
+  - serializedVersion: 3
+    m_Name: Cancel
+    descriptiveName: 
+    descriptiveNegativeName: 
+    negativeButton: 
+    positiveButton: escape
+    altNegativeButton: 
+    altPositiveButton: joystick button 1
+    gravity: 1000
+    dead: 0.001
+    sensitivity: 1000
+    snap: 0
+    invert: 0
+    type: 0
+    axis: 0
+    joyNum: 0
diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset
new file mode 100644
index 0000000000000000000000000000000000000000..3b0b7c3d183abdd300112f56965916ef11667f54
--- /dev/null
+++ b/ProjectSettings/NavMeshAreas.asset
@@ -0,0 +1,91 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!126 &1
+NavMeshProjectSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  areas:
+  - name: Walkable
+    cost: 1
+  - name: Not Walkable
+    cost: 1
+  - name: Jump
+    cost: 2
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  - name: 
+    cost: 1
+  m_LastAgentTypeID: -887442657
+  m_Settings:
+  - serializedVersion: 2
+    agentTypeID: 0
+    agentRadius: 0.5
+    agentHeight: 2
+    agentSlope: 45
+    agentClimb: 0.75
+    ledgeDropHeight: 0
+    maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666667
+    manualTileSize: 0
+    tileSize: 256
+    accuratePlacement: 0
+    debug:
+      m_Flags: 0
+  m_SettingNames:
+  - Humanoid
diff --git a/ProjectSettings/NetworkManager.asset b/ProjectSettings/NetworkManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..5dc6a831d9f2a11f08ed96571e0f602e3c3908b5
--- /dev/null
+++ b/ProjectSettings/NetworkManager.asset
@@ -0,0 +1,8 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!149 &1
+NetworkManager:
+  m_ObjectHideFlags: 0
+  m_DebugLevel: 0
+  m_Sendrate: 15
+  m_AssetToPrefab: {}
diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..47880b1c8c8e3b6306101004bb9826527d80e05e
--- /dev/null
+++ b/ProjectSettings/Physics2DSettings.asset
@@ -0,0 +1,56 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!19 &1
+Physics2DSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 4
+  m_Gravity: {x: 0, y: -9.81}
+  m_DefaultMaterial: {fileID: 0}
+  m_VelocityIterations: 8
+  m_PositionIterations: 3
+  m_VelocityThreshold: 1
+  m_MaxLinearCorrection: 0.2
+  m_MaxAngularCorrection: 8
+  m_MaxTranslationSpeed: 100
+  m_MaxRotationSpeed: 360
+  m_BaumgarteScale: 0.2
+  m_BaumgarteTimeOfImpactScale: 0.75
+  m_TimeToSleep: 0.5
+  m_LinearSleepTolerance: 0.01
+  m_AngularSleepTolerance: 2
+  m_DefaultContactOffset: 0.01
+  m_JobOptions:
+    serializedVersion: 2
+    useMultithreading: 0
+    useConsistencySorting: 0
+    m_InterpolationPosesPerJob: 100
+    m_NewContactsPerJob: 30
+    m_CollideContactsPerJob: 100
+    m_ClearFlagsPerJob: 200
+    m_ClearBodyForcesPerJob: 200
+    m_SyncDiscreteFixturesPerJob: 50
+    m_SyncContinuousFixturesPerJob: 50
+    m_FindNearestContactsPerJob: 100
+    m_UpdateTriggerContactsPerJob: 100
+    m_IslandSolverCostThreshold: 100
+    m_IslandSolverBodyCostScale: 1
+    m_IslandSolverContactCostScale: 10
+    m_IslandSolverJointCostScale: 10
+    m_IslandSolverBodiesPerJob: 50
+    m_IslandSolverContactsPerJob: 50
+  m_AutoSimulation: 1
+  m_QueriesHitTriggers: 1
+  m_QueriesStartInColliders: 1
+  m_CallbacksOnDisable: 1
+  m_ReuseCollisionCallbacks: 1
+  m_AutoSyncTransforms: 0
+  m_AlwaysShowColliders: 0
+  m_ShowColliderSleep: 1
+  m_ShowColliderContacts: 0
+  m_ShowColliderAABB: 0
+  m_ContactArrowScale: 0.2
+  m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
+  m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
+  m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
+  m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
+  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..7992168e3943168f655be73248cc9c8e594fb5f5
--- /dev/null
+++ b/ProjectSettings/PresetManager.asset
@@ -0,0 +1,13 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1386491679 &1
+PresetManager:
+  m_ObjectHideFlags: 0
+  m_DefaultList:
+  - type:
+      m_NativeTypeID: 20
+      m_ManagedTypePPtr: {fileID: 0}
+      m_ManagedTypeFallback: 
+    defaultPresets:
+    - m_Preset: {fileID: 2655988077585873504, guid: bfcfc320427f8224bbb7a96f3d3aebad,
+        type: 2}
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..5d652244a8765193ebb7757aadd8569022c0e5a3
--- /dev/null
+++ b/ProjectSettings/ProjectSettings.asset
@@ -0,0 +1,602 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!129 &1
+PlayerSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 18
+  productGUID: 8f32abdf76a257248974fe5018ff8281
+  AndroidProfiler: 0
+  AndroidFilterTouchesWhenObscured: 0
+  AndroidEnableSustainedPerformanceMode: 0
+  defaultScreenOrientation: 4
+  targetDevice: 2
+  useOnDemandResources: 0
+  accelerometerFrequency: 60
+  companyName: DefaultCompany
+  productName: 2D Shooter
+  defaultCursor: {fileID: 0}
+  cursorHotspot: {x: 0, y: 0}
+  m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
+  m_ShowUnitySplashScreen: 1
+  m_ShowUnitySplashLogo: 1
+  m_SplashScreenOverlayOpacity: 1
+  m_SplashScreenAnimation: 1
+  m_SplashScreenLogoStyle: 1
+  m_SplashScreenDrawMode: 0
+  m_SplashScreenBackgroundAnimationZoom: 1
+  m_SplashScreenLogoAnimationZoom: 1
+  m_SplashScreenBackgroundLandscapeAspect: 1
+  m_SplashScreenBackgroundPortraitAspect: 1
+  m_SplashScreenBackgroundLandscapeUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenBackgroundPortraitUvs:
+    serializedVersion: 2
+    x: 0
+    y: 0
+    width: 1
+    height: 1
+  m_SplashScreenLogos: []
+  m_VirtualRealitySplashScreen: {fileID: 0}
+  m_HolographicTrackingLossScreen: {fileID: 0}
+  defaultScreenWidth: 1024
+  defaultScreenHeight: 768
+  defaultScreenWidthWeb: 960
+  defaultScreenHeightWeb: 600
+  m_StereoRenderingPath: 0
+  m_ActiveColorSpace: 0
+  m_MTRendering: 1
+  m_StackTraceTypes: 010000000100000001000000010000000100000001000000
+  iosShowActivityIndicatorOnLoading: -1
+  androidShowActivityIndicatorOnLoading: -1
+  displayResolutionDialog: 1
+  iosUseCustomAppBackgroundBehavior: 0
+  iosAllowHTTPDownload: 1
+  allowedAutorotateToPortrait: 1
+  allowedAutorotateToPortraitUpsideDown: 1
+  allowedAutorotateToLandscapeRight: 1
+  allowedAutorotateToLandscapeLeft: 1
+  useOSAutorotation: 1
+  use32BitDisplayBuffer: 1
+  preserveFramebufferAlpha: 0
+  disableDepthAndStencilBuffers: 0
+  androidStartInFullscreen: 1
+  androidRenderOutsideSafeArea: 0
+  androidBlitType: 0
+  defaultIsNativeResolution: 1
+  macRetinaSupport: 1
+  runInBackground: 1
+  captureSingleScreen: 0
+  muteOtherAudioSources: 0
+  Prepare IOS For Recording: 0
+  Force IOS Speakers When Recording: 0
+  deferSystemGesturesMode: 0
+  hideHomeButton: 0
+  submitAnalytics: 1
+  usePlayerLog: 1
+  bakeCollisionMeshes: 0
+  forceSingleInstance: 0
+  resizableWindow: 0
+  useMacAppStoreValidation: 0
+  macAppStoreCategory: public.app-category.games
+  gpuSkinning: 0
+  graphicsJobs: 0
+  xboxPIXTextureCapture: 0
+  xboxEnableAvatar: 0
+  xboxEnableKinect: 0
+  xboxEnableKinectAutoTracking: 0
+  xboxEnableFitness: 0
+  visibleInBackground: 1
+  allowFullscreenSwitch: 1
+  graphicsJobMode: 0
+  fullscreenMode: 1
+  xboxSpeechDB: 0
+  xboxEnableHeadOrientation: 0
+  xboxEnableGuest: 0
+  xboxEnablePIXSampling: 0
+  metalFramebufferOnly: 0
+  xboxOneResolution: 0
+  xboxOneSResolution: 0
+  xboxOneXResolution: 3
+  xboxOneMonoLoggingLevel: 0
+  xboxOneLoggingLevel: 1
+  xboxOneDisableEsram: 0
+  xboxOneEnableTypeOptimization: 0
+  xboxOnePresentImmediateThreshold: 0
+  switchQueueCommandMemory: 0
+  switchQueueControlMemory: 16384
+  switchQueueComputeMemory: 262144
+  switchNVNShaderPoolsGranularity: 33554432
+  switchNVNDefaultPoolsGranularity: 16777216
+  switchNVNOtherPoolsGranularity: 16777216
+  vulkanEnableSetSRGBWrite: 0
+  m_SupportedAspectRatios:
+    4:3: 1
+    5:4: 1
+    16:10: 1
+    16:9: 1
+    Others: 1
+  bundleVersion: 0.1
+  preloadedAssets: []
+  metroInputSource: 0
+  wsaTransparentSwapchain: 0
+  m_HolographicPauseOnTrackingLoss: 1
+  xboxOneDisableKinectGpuReservation: 1
+  xboxOneEnable7thCore: 1
+  isWsaHolographicRemotingEnabled: 0
+  vrSettings:
+    cardboard:
+      depthFormat: 0
+      enableTransitionView: 0
+    daydream:
+      depthFormat: 0
+      useSustainedPerformanceMode: 0
+      enableVideoLayer: 0
+      useProtectedVideoMemory: 0
+      minimumSupportedHeadTracking: 0
+      maximumSupportedHeadTracking: 1
+    hololens:
+      depthFormat: 1
+      depthBufferSharingEnabled: 1
+    oculus:
+      sharedDepthBuffer: 1
+      dashSupport: 1
+      lowOverheadMode: 0
+      protectedContext: 0
+      v2Signing: 0
+    enable360StereoCapture: 0
+  protectGraphicsMemory: 0
+  enableFrameTimingStats: 0
+  useHDRDisplay: 0
+  m_ColorGamuts: 00000000
+  targetPixelDensity: 30
+  resolutionScalingMode: 0
+  androidSupportedAspectRatio: 1
+  androidMaxAspectRatio: 2.1
+  applicationIdentifier:
+    Standalone: com.Company.ProductName
+  buildNumber: {}
+  AndroidBundleVersionCode: 1
+  AndroidMinSdkVersion: 16
+  AndroidTargetSdkVersion: 0
+  AndroidPreferredInstallLocation: 1
+  aotOptions: 
+  stripEngineCode: 1
+  iPhoneStrippingLevel: 0
+  iPhoneScriptCallOptimization: 0
+  ForceInternetPermission: 0
+  ForceSDCardPermission: 0
+  CreateWallpaper: 0
+  APKExpansionFiles: 0
+  keepLoadedShadersAlive: 0
+  StripUnusedMeshComponents: 1
+  VertexChannelCompressionMask: 4054
+  iPhoneSdkVersion: 988
+  iOSTargetOSVersionString: 9.0
+  tvOSSdkVersion: 0
+  tvOSRequireExtendedGameController: 0
+  tvOSTargetOSVersionString: 9.0
+  uIPrerenderedIcon: 0
+  uIRequiresPersistentWiFi: 0
+  uIRequiresFullScreen: 1
+  uIStatusBarHidden: 1
+  uIExitOnSuspend: 0
+  uIStatusBarStyle: 0
+  iPhoneSplashScreen: {fileID: 0}
+  iPhoneHighResSplashScreen: {fileID: 0}
+  iPhoneTallHighResSplashScreen: {fileID: 0}
+  iPhone47inSplashScreen: {fileID: 0}
+  iPhone55inPortraitSplashScreen: {fileID: 0}
+  iPhone55inLandscapeSplashScreen: {fileID: 0}
+  iPhone58inPortraitSplashScreen: {fileID: 0}
+  iPhone58inLandscapeSplashScreen: {fileID: 0}
+  iPadPortraitSplashScreen: {fileID: 0}
+  iPadHighResPortraitSplashScreen: {fileID: 0}
+  iPadLandscapeSplashScreen: {fileID: 0}
+  iPadHighResLandscapeSplashScreen: {fileID: 0}
+  appleTVSplashScreen: {fileID: 0}
+  appleTVSplashScreen2x: {fileID: 0}
+  tvOSSmallIconLayers: []
+  tvOSSmallIconLayers2x: []
+  tvOSLargeIconLayers: []
+  tvOSLargeIconLayers2x: []
+  tvOSTopShelfImageLayers: []
+  tvOSTopShelfImageLayers2x: []
+  tvOSTopShelfImageWideLayers: []
+  tvOSTopShelfImageWideLayers2x: []
+  iOSLaunchScreenType: 0
+  iOSLaunchScreenPortrait: {fileID: 0}
+  iOSLaunchScreenLandscape: {fileID: 0}
+  iOSLaunchScreenBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreenFillPct: 100
+  iOSLaunchScreenSize: 100
+  iOSLaunchScreenCustomXibPath: 
+  iOSLaunchScreeniPadType: 0
+  iOSLaunchScreeniPadImage: {fileID: 0}
+  iOSLaunchScreeniPadBackgroundColor:
+    serializedVersion: 2
+    rgba: 0
+  iOSLaunchScreeniPadFillPct: 100
+  iOSLaunchScreeniPadSize: 100
+  iOSLaunchScreeniPadCustomXibPath: 
+  iOSUseLaunchScreenStoryboard: 0
+  iOSLaunchScreenCustomStoryboardPath: 
+  iOSDeviceRequirements: []
+  iOSURLSchemes: []
+  iOSBackgroundModes: 0
+  iOSMetalForceHardShadows: 0
+  metalEditorSupport: 1
+  metalAPIValidation: 1
+  iOSRenderExtraFrameOnPause: 0
+  appleDeveloperTeamID: 
+  iOSManualSigningProvisioningProfileID: 
+  tvOSManualSigningProvisioningProfileID: 
+  iOSManualSigningProvisioningProfileType: 0
+  tvOSManualSigningProvisioningProfileType: 0
+  appleEnableAutomaticSigning: 0
+  iOSRequireARKit: 0
+  iOSAutomaticallyDetectAndAddCapabilities: 1
+  appleEnableProMotion: 0
+  clonedFromGUID: 5f34be1353de5cf4398729fda238591b
+  templatePackageId: com.unity.template.2d@1.3.0
+  templateDefaultScene: Assets/Scenes/SampleScene.unity
+  AndroidTargetArchitectures: 5
+  AndroidSplashScreenScale: 0
+  androidSplashScreen: {fileID: 0}
+  AndroidKeystoreName: 
+  AndroidKeyaliasName: 
+  AndroidBuildApkPerCpuArchitecture: 0
+  AndroidTVCompatibility: 1
+  AndroidIsGame: 1
+  AndroidEnableTango: 0
+  androidEnableBanner: 1
+  androidUseLowAccuracyLocation: 0
+  m_AndroidBanners:
+  - width: 320
+    height: 180
+    banner: {fileID: 0}
+  androidGamepadSupportLevel: 0
+  resolutionDialogBanner: {fileID: 0}
+  m_BuildTargetIcons: []
+  m_BuildTargetPlatformIcons: []
+  m_BuildTargetBatching: []
+  m_BuildTargetGraphicsAPIs: []
+  m_BuildTargetVRSettings: []
+  m_BuildTargetEnableVuforiaSettings: []
+  openGLRequireES31: 0
+  openGLRequireES31AEP: 0
+  m_TemplateCustomTags: {}
+  mobileMTRendering:
+    Android: 1
+    iPhone: 1
+    tvOS: 1
+  m_BuildTargetGroupLightmapEncodingQuality: []
+  m_BuildTargetGroupLightmapSettings: []
+  playModeTestRunnerEnabled: 0
+  runPlayModeTestAsEditModeTest: 0
+  actionOnDotNetUnhandledException: 1
+  enableInternalProfiler: 0
+  logObjCUncaughtExceptions: 1
+  enableCrashReportAPI: 0
+  cameraUsageDescription: 
+  locationUsageDescription: 
+  microphoneUsageDescription: 
+  switchNetLibKey: 
+  switchSocketMemoryPoolSize: 6144
+  switchSocketAllocatorPoolSize: 128
+  switchSocketConcurrencyLimit: 14
+  switchScreenResolutionBehavior: 2
+  switchUseCPUProfiler: 0
+  switchApplicationID: 0x01004b9000490000
+  switchNSODependencies: 
+  switchTitleNames_0: 
+  switchTitleNames_1: 
+  switchTitleNames_2: 
+  switchTitleNames_3: 
+  switchTitleNames_4: 
+  switchTitleNames_5: 
+  switchTitleNames_6: 
+  switchTitleNames_7: 
+  switchTitleNames_8: 
+  switchTitleNames_9: 
+  switchTitleNames_10: 
+  switchTitleNames_11: 
+  switchTitleNames_12: 
+  switchTitleNames_13: 
+  switchTitleNames_14: 
+  switchPublisherNames_0: 
+  switchPublisherNames_1: 
+  switchPublisherNames_2: 
+  switchPublisherNames_3: 
+  switchPublisherNames_4: 
+  switchPublisherNames_5: 
+  switchPublisherNames_6: 
+  switchPublisherNames_7: 
+  switchPublisherNames_8: 
+  switchPublisherNames_9: 
+  switchPublisherNames_10: 
+  switchPublisherNames_11: 
+  switchPublisherNames_12: 
+  switchPublisherNames_13: 
+  switchPublisherNames_14: 
+  switchIcons_0: {fileID: 0}
+  switchIcons_1: {fileID: 0}
+  switchIcons_2: {fileID: 0}
+  switchIcons_3: {fileID: 0}
+  switchIcons_4: {fileID: 0}
+  switchIcons_5: {fileID: 0}
+  switchIcons_6: {fileID: 0}
+  switchIcons_7: {fileID: 0}
+  switchIcons_8: {fileID: 0}
+  switchIcons_9: {fileID: 0}
+  switchIcons_10: {fileID: 0}
+  switchIcons_11: {fileID: 0}
+  switchIcons_12: {fileID: 0}
+  switchIcons_13: {fileID: 0}
+  switchIcons_14: {fileID: 0}
+  switchSmallIcons_0: {fileID: 0}
+  switchSmallIcons_1: {fileID: 0}
+  switchSmallIcons_2: {fileID: 0}
+  switchSmallIcons_3: {fileID: 0}
+  switchSmallIcons_4: {fileID: 0}
+  switchSmallIcons_5: {fileID: 0}
+  switchSmallIcons_6: {fileID: 0}
+  switchSmallIcons_7: {fileID: 0}
+  switchSmallIcons_8: {fileID: 0}
+  switchSmallIcons_9: {fileID: 0}
+  switchSmallIcons_10: {fileID: 0}
+  switchSmallIcons_11: {fileID: 0}
+  switchSmallIcons_12: {fileID: 0}
+  switchSmallIcons_13: {fileID: 0}
+  switchSmallIcons_14: {fileID: 0}
+  switchManualHTML: 
+  switchAccessibleURLs: 
+  switchLegalInformation: 
+  switchMainThreadStackSize: 1048576
+  switchPresenceGroupId: 
+  switchLogoHandling: 0
+  switchReleaseVersion: 0
+  switchDisplayVersion: 1.0.0
+  switchStartupUserAccount: 0
+  switchTouchScreenUsage: 0
+  switchSupportedLanguagesMask: 0
+  switchLogoType: 0
+  switchApplicationErrorCodeCategory: 
+  switchUserAccountSaveDataSize: 0
+  switchUserAccountSaveDataJournalSize: 0
+  switchApplicationAttribute: 0
+  switchCardSpecSize: -1
+  switchCardSpecClock: -1
+  switchRatingsMask: 0
+  switchRatingsInt_0: 0
+  switchRatingsInt_1: 0
+  switchRatingsInt_2: 0
+  switchRatingsInt_3: 0
+  switchRatingsInt_4: 0
+  switchRatingsInt_5: 0
+  switchRatingsInt_6: 0
+  switchRatingsInt_7: 0
+  switchRatingsInt_8: 0
+  switchRatingsInt_9: 0
+  switchRatingsInt_10: 0
+  switchRatingsInt_11: 0
+  switchRatingsInt_12: 0
+  switchLocalCommunicationIds_0: 
+  switchLocalCommunicationIds_1: 
+  switchLocalCommunicationIds_2: 
+  switchLocalCommunicationIds_3: 
+  switchLocalCommunicationIds_4: 
+  switchLocalCommunicationIds_5: 
+  switchLocalCommunicationIds_6: 
+  switchLocalCommunicationIds_7: 
+  switchParentalControl: 0
+  switchAllowsScreenshot: 1
+  switchAllowsVideoCapturing: 1
+  switchAllowsRuntimeAddOnContentInstall: 0
+  switchDataLossConfirmation: 0
+  switchUserAccountLockEnabled: 0
+  switchSystemResourceMemory: 16777216
+  switchSupportedNpadStyles: 3
+  switchNativeFsCacheSize: 32
+  switchIsHoldTypeHorizontal: 0
+  switchSupportedNpadCount: 8
+  switchSocketConfigEnabled: 0
+  switchTcpInitialSendBufferSize: 32
+  switchTcpInitialReceiveBufferSize: 64
+  switchTcpAutoSendBufferSizeMax: 256
+  switchTcpAutoReceiveBufferSizeMax: 256
+  switchUdpSendBufferSize: 9
+  switchUdpReceiveBufferSize: 42
+  switchSocketBufferEfficiency: 4
+  switchSocketInitializeEnabled: 1
+  switchNetworkInterfaceManagerInitializeEnabled: 1
+  switchPlayerConnectionEnabled: 1
+  ps4NPAgeRating: 12
+  ps4NPTitleSecret: 
+  ps4NPTrophyPackPath: 
+  ps4ParentalLevel: 11
+  ps4ContentID: ED1633-NPXX51362_00-0000000000000000
+  ps4Category: 0
+  ps4MasterVersion: 01.00
+  ps4AppVersion: 01.00
+  ps4AppType: 0
+  ps4ParamSfxPath: 
+  ps4VideoOutPixelFormat: 0
+  ps4VideoOutInitialWidth: 1920
+  ps4VideoOutBaseModeInitialWidth: 1920
+  ps4VideoOutReprojectionRate: 60
+  ps4PronunciationXMLPath: 
+  ps4PronunciationSIGPath: 
+  ps4BackgroundImagePath: 
+  ps4StartupImagePath: 
+  ps4StartupImagesFolder: 
+  ps4IconImagesFolder: 
+  ps4SaveDataImagePath: 
+  ps4SdkOverride: 
+  ps4BGMPath: 
+  ps4ShareFilePath: 
+  ps4ShareOverlayImagePath: 
+  ps4PrivacyGuardImagePath: 
+  ps4NPtitleDatPath: 
+  ps4RemotePlayKeyAssignment: -1
+  ps4RemotePlayKeyMappingDir: 
+  ps4PlayTogetherPlayerCount: 0
+  ps4EnterButtonAssignment: 1
+  ps4ApplicationParam1: 0
+  ps4ApplicationParam2: 0
+  ps4ApplicationParam3: 0
+  ps4ApplicationParam4: 0
+  ps4DownloadDataSize: 0
+  ps4GarlicHeapSize: 2048
+  ps4ProGarlicHeapSize: 2560
+  ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ
+  ps4pnSessions: 1
+  ps4pnPresence: 1
+  ps4pnFriends: 1
+  ps4pnGameCustomData: 1
+  playerPrefsSupport: 0
+  enableApplicationExit: 0
+  resetTempFolder: 1
+  restrictedAudioUsageRights: 0
+  ps4UseResolutionFallback: 0
+  ps4ReprojectionSupport: 0
+  ps4UseAudio3dBackend: 0
+  ps4SocialScreenEnabled: 0
+  ps4ScriptOptimizationLevel: 0
+  ps4Audio3dVirtualSpeakerCount: 14
+  ps4attribCpuUsage: 0
+  ps4PatchPkgPath: 
+  ps4PatchLatestPkgPath: 
+  ps4PatchChangeinfoPath: 
+  ps4PatchDayOne: 0
+  ps4attribUserManagement: 0
+  ps4attribMoveSupport: 0
+  ps4attrib3DSupport: 0
+  ps4attribShareSupport: 0
+  ps4attribExclusiveVR: 0
+  ps4disableAutoHideSplash: 0
+  ps4videoRecordingFeaturesUsed: 0
+  ps4contentSearchFeaturesUsed: 0
+  ps4attribEyeToEyeDistanceSettingVR: 0
+  ps4IncludedModules: []
+  monoEnv: 
+  splashScreenBackgroundSourceLandscape: {fileID: 0}
+  splashScreenBackgroundSourcePortrait: {fileID: 0}
+  spritePackerPolicy: 
+  webGLMemorySize: 256
+  webGLExceptionSupport: 1
+  webGLNameFilesAsHashes: 0
+  webGLDataCaching: 1
+  webGLDebugSymbols: 0
+  webGLEmscriptenArgs: 
+  webGLModulesDirectory: 
+  webGLTemplate: APPLICATION:Default
+  webGLAnalyzeBuildSize: 0
+  webGLUseEmbeddedResources: 0
+  webGLCompressionFormat: 1
+  webGLLinkerTarget: 1
+  webGLThreadsSupport: 0
+  scriptingDefineSymbols: {}
+  platformArchitecture: {}
+  scriptingBackend: {}
+  il2cppCompilerConfiguration: {}
+  managedStrippingLevel: {}
+  incrementalIl2cppBuild: {}
+  allowUnsafeCode: 0
+  additionalIl2CppArgs: 
+  scriptingRuntimeVersion: 1
+  apiCompatibilityLevelPerPlatform: {}
+  m_RenderingPath: 1
+  m_MobileRenderingPath: 1
+  metroPackageName: Template_2D
+  metroPackageVersion: 
+  metroCertificatePath: 
+  metroCertificatePassword: 
+  metroCertificateSubject: 
+  metroCertificateIssuer: 
+  metroCertificateNotAfter: 0000000000000000
+  metroApplicationDescription: Template_2D
+  wsaImages: {}
+  metroTileShortName: 
+  metroTileShowName: 0
+  metroMediumTileShowName: 0
+  metroLargeTileShowName: 0
+  metroWideTileShowName: 0
+  metroSupportStreamingInstall: 0
+  metroLastRequiredScene: 0
+  metroDefaultTileSize: 1
+  metroTileForegroundText: 2
+  metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
+  metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628,
+    a: 1}
+  metroSplashScreenUseBackgroundColor: 0
+  platformCapabilities: {}
+  metroTargetDeviceFamilies: {}
+  metroFTAName: 
+  metroFTAFileTypes: []
+  metroProtocolName: 
+  metroCompilationOverrides: 1
+  XboxOneProductId: 
+  XboxOneUpdateKey: 
+  XboxOneSandboxId: 
+  XboxOneContentId: 
+  XboxOneTitleId: 
+  XboxOneSCId: 
+  XboxOneGameOsOverridePath: 
+  XboxOnePackagingOverridePath: 
+  XboxOneAppManifestOverridePath: 
+  XboxOneVersion: 1.0.0.0
+  XboxOnePackageEncryption: 0
+  XboxOnePackageUpdateGranularity: 2
+  XboxOneDescription: 
+  XboxOneLanguage:
+  - enus
+  XboxOneCapability: []
+  XboxOneGameRating: {}
+  XboxOneIsContentPackage: 0
+  XboxOneEnableGPUVariability: 1
+  XboxOneSockets: {}
+  XboxOneSplashScreen: {fileID: 0}
+  XboxOneAllowedProductIds: []
+  XboxOnePersistentLocalStorageSize: 0
+  XboxOneXTitleMemory: 8
+  xboxOneScriptCompiler: 1
+  XboxOneOverrideIdentityName: 
+  vrEditorSettings:
+    daydream:
+      daydreamIconForeground: {fileID: 0}
+      daydreamIconBackground: {fileID: 0}
+  cloudServicesEnabled:
+    UNet: 1
+  luminIcon:
+    m_Name: 
+    m_ModelFolderPath: 
+    m_PortalFolderPath: 
+  luminCert:
+    m_CertPath: 
+    m_PrivateKeyPath: 
+  luminIsChannelApp: 0
+  luminVersion:
+    m_VersionCode: 1
+    m_VersionName: 
+  facebookSdkVersion: 7.9.4
+  facebookAppId: 
+  facebookCookies: 1
+  facebookLogging: 1
+  facebookStatus: 1
+  facebookXfbml: 0
+  facebookFrictionlessRequests: 1
+  apiCompatibilityLevel: 6
+  cloudProjectId: f2c43b2d-63da-41e3-ba97-c49f3dedf495
+  framebufferDepthMemorylessMode: 0
+  projectName: 2D Shooter
+  organizationId: alamhasabie165
+  cloudEnabled: 0
+  enableNativePlatformBackendsForNewInputSystem: 0
+  disableOldInputManagerSupport: 0
+  legacyClampBlendShapeWeights: 0
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9bebbca9799bd295880061133633df6213f02771
--- /dev/null
+++ b/ProjectSettings/ProjectVersion.txt
@@ -0,0 +1 @@
+m_EditorVersion: 2018.4.18f1
diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..4ae8c38e5ba7d5d83258a88314512e66162d973e
--- /dev/null
+++ b/ProjectSettings/QualitySettings.asset
@@ -0,0 +1,191 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!47 &1
+QualitySettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 5
+  m_CurrentQuality: 3
+  m_QualitySettings:
+  - serializedVersion: 2
+    name: Very Low
+    pixelLightCount: 0
+    shadows: 0
+    shadowResolution: 0
+    shadowProjection: 1
+    shadowCascades: 1
+    shadowDistance: 15
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 0
+    blendWeights: 1
+    textureQuality: 1
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 0
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 0
+    lodBias: 0.3
+    maximumLODLevel: 0
+    particleRaycastBudget: 4
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  - serializedVersion: 2
+    name: Low
+    pixelLightCount: 0
+    shadows: 0
+    shadowResolution: 0
+    shadowProjection: 1
+    shadowCascades: 1
+    shadowDistance: 20
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 0
+    blendWeights: 2
+    textureQuality: 0
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 0
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 0
+    lodBias: 0.4
+    maximumLODLevel: 0
+    particleRaycastBudget: 16
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  - serializedVersion: 2
+    name: Medium
+    pixelLightCount: 1
+    shadows: 0
+    shadowResolution: 0
+    shadowProjection: 1
+    shadowCascades: 1
+    shadowDistance: 20
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 0
+    blendWeights: 2
+    textureQuality: 0
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 0
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 1
+    lodBias: 0.7
+    maximumLODLevel: 0
+    particleRaycastBudget: 64
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  - serializedVersion: 2
+    name: High
+    pixelLightCount: 2
+    shadows: 0
+    shadowResolution: 1
+    shadowProjection: 1
+    shadowCascades: 2
+    shadowDistance: 40
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 1
+    blendWeights: 2
+    textureQuality: 0
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 1
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 1
+    lodBias: 1
+    maximumLODLevel: 0
+    particleRaycastBudget: 256
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  - serializedVersion: 2
+    name: Very High
+    pixelLightCount: 3
+    shadows: 0
+    shadowResolution: 2
+    shadowProjection: 1
+    shadowCascades: 2
+    shadowDistance: 70
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 1
+    blendWeights: 4
+    textureQuality: 0
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 1
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 1
+    lodBias: 1.5
+    maximumLODLevel: 0
+    particleRaycastBudget: 1024
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  - serializedVersion: 2
+    name: Ultra
+    pixelLightCount: 4
+    shadows: 0
+    shadowResolution: 0
+    shadowProjection: 1
+    shadowCascades: 4
+    shadowDistance: 150
+    shadowNearPlaneOffset: 3
+    shadowCascade2Split: 0.33333334
+    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
+    shadowmaskMode: 1
+    blendWeights: 4
+    textureQuality: 0
+    anisotropicTextures: 0
+    antiAliasing: 0
+    softParticles: 0
+    softVegetation: 1
+    realtimeReflectionProbes: 0
+    billboardsFaceCameraPosition: 0
+    vSyncCount: 1
+    lodBias: 2
+    maximumLODLevel: 0
+    particleRaycastBudget: 4096
+    asyncUploadTimeSlice: 2
+    asyncUploadBufferSize: 16
+    resolutionScalingFixedDPIFactor: 1
+    excludedTargetPlatforms: []
+  m_PerPlatformDefaultQuality:
+    Android: 2
+    Nintendo 3DS: 5
+    Nintendo Switch: 5
+    PS4: 5
+    PSM: 5
+    PSP2: 2
+    Standalone: 5
+    Tizen: 2
+    WebGL: 3
+    WiiU: 5
+    Windows Store Apps: 5
+    XboxOne: 5
+    iPhone: 2
+    tvOS: 2
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..695c01766f8f96bba6ed4ea176948d950236d325
--- /dev/null
+++ b/ProjectSettings/TagManager.asset
@@ -0,0 +1,51 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!78 &1
+TagManager:
+  serializedVersion: 2
+  tags:
+  - Platform
+  - ScoreManager
+  layers:
+  - Default
+  - TransparentFX
+  - Ignore Raycast
+  - 
+  - Water
+  - UI
+  - 
+  - 
+  - Shootable
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  - 
+  m_SortingLayers:
+  - name: Default
+    uniqueID: 0
+    locked: 0
+  - name: Back
+    uniqueID: 2673936071
+    locked: 0
+  - name: Front
+    uniqueID: 1169290741
+    locked: 0
diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..06bcc6d2953cf16c089324d3f547ce7b81f8807c
--- /dev/null
+++ b/ProjectSettings/TimeManager.asset
@@ -0,0 +1,9 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!5 &1
+TimeManager:
+  m_ObjectHideFlags: 0
+  Fixed Timestep: 0.02
+  Maximum Allowed Timestep: 0.1
+  m_TimeScale: 1
+  Maximum Particle Timestep: 0.03
diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset
new file mode 100644
index 0000000000000000000000000000000000000000..06db74a94440d2c2de741c8f3cc0bed1b29abc12
--- /dev/null
+++ b/ProjectSettings/UnityConnectSettings.asset
@@ -0,0 +1,34 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!310 &1
+UnityConnectSettings:
+  m_ObjectHideFlags: 0
+  serializedVersion: 1
+  m_Enabled: 1
+  m_TestMode: 0
+  m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
+  m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
+  m_ConfigUrl: https://config.uca.cloud.unity3d.com
+  m_TestInitMode: 0
+  CrashReportingSettings:
+    m_EventUrl: https://perf-events.cloud.unity3d.com
+    m_Enabled: 0
+    m_LogBufferSize: 10
+    m_CaptureEditorExceptions: 1
+  UnityPurchasingSettings:
+    m_Enabled: 0
+    m_TestMode: 0
+  UnityAnalyticsSettings:
+    m_Enabled: 1
+    m_TestMode: 0
+    m_InitializeOnStartup: 1
+  UnityAdsSettings:
+    m_Enabled: 0
+    m_InitializeOnStartup: 1
+    m_TestMode: 0
+    m_IosGameId: 
+    m_AndroidGameId: 
+    m_GameIds: {}
+    m_GameId: 
+  PerformanceReportingSettings:
+    m_Enabled: 0
diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset
new file mode 100644
index 0000000000000000000000000000000000000000..6e0eaca40d51a23fde75fc0183b34888ea942945
--- /dev/null
+++ b/ProjectSettings/VFXManager.asset
@@ -0,0 +1,11 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!937362698 &1
+VFXManager:
+  m_ObjectHideFlags: 0
+  m_IndirectShader: {fileID: 0}
+  m_CopyBufferShader: {fileID: 0}
+  m_SortShader: {fileID: 0}
+  m_RenderPipeSettingsPath: 
+  m_FixedTimeStep: 0.016666668
+  m_MaxDeltaTime: 0.05